программа треугольника Паскаля, отображающая неверный вывод

Я разработал программу, которая принимает пользовательский ввод для каждого числа в числовом треугольнике и отображает на консоли, является ли это треугольником Паскаля или нет. Проблема в том, что код продолжает отображать, что числовой треугольник не является треугольником Паскаля, когда он им является. Мне просто интересно, что может быть причиной того, что он продолжает отображать «Это не треугольник Паскаля», даже если это так. Спасибо.

def checkIfPascal(dataLines):
    size = int(dataLines[0])


    n = 2 * size + 1
    grid = [[0 for x in range(n)] for y in range(size)]

    left = 1
    # do not read first line
    for i in range(size, 0, -1):
        parts = dataLines.split(' ')
        count = 0
        for p in parts:
            grid[i - 1][left + 2 * count] = int(p)
            count += 1
        left += 1

        # if there are not n+1 numbers, then it is not pascal
        if (count != i):
            return False

    left = 1
    for i in range(size - 1, -1, -1):
        if i == 0:
            return (grid[i][left] == 1)
        numbers = i + 1
        count = 0
        while count < numbers:
            current = grid[i][left + count * 2]
            upperLeft = grid[i - 1][left - 1 + count * 2]
            upperRight = grid[i - 1][left + 1 + count * 2]
            if (current != (upperLeft + upperRight)):
                return False
            count += 1

        left += 1
    return False


# main function



dataLines = input("please enter the height: ")
rows = int(dataLines) # --> convert user input to an integer
def triangle(rows):
    PrintingList = list()
    for rownum in range (1, rows + 1): # use colon after control structure to denote the beginning of block of code
        PrintingList.append([]) # append a row
        for iteration in range (rownum):
            newValue = input("Please enter the next number:")
            PrintingList[rownum - 1].append(int(newValue))
            print()

    for item in PrintingList:
      print (*item)
triangle(rows)

def main():
    if checkIfPascal(dataLines):
        print('It is a pascal triangle')
    else:
        print('It is not a pascal triangle')

main()

когда пользователь вводит числовой треугольник, который является треугольником Паскаля, он должен отображать «Это треугольник Паскаля» на консоли


person molo1234    schedule 23.05.2019    source источник


Ответы (1)


Это полная катастрофа, если вы не тестируете свой код во время сборки. Давайте посмотрим, как программа запускается:

dataLines = input("please enter the height: ")
rows = int(dataLines)

triangle(rows)

def main():
    if checkIfPascal(dataLines):
        print('It is a pascal triangle')
    else:
        print('It is not a pascal triangle')

main()

Треугольник пользователя, прочитанный triangle(), распечатывается и выбрасывается! Затем мы вызываем checkIfPascal() для непреобразованной строковой версии высоты треугольника, а не для самого треугольника!

А checkIfPascal() - это собственное болото кода. Хотя функция triangle() форматирует данные как list из list из int, checkIfPascal() вызывает split(' ') для своего аргумента, как если бы он состоял из строк! Две функции не согласны с их общей структурой данных.

Начните с малого и тестируйте на ходу. Не пишите всю программу целиком и не предполагайте, что вы (или мы) можете просто отладить ее, чтобы она заработала. Я думаю, что это классная идея для программы.

person cdlane    schedule 25.05.2019