программа «треугольник паскаля», отображающая неверный вывод - PullRequest
0 голосов
/ 23 мая 2019

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

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()

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

1 Ответ

0 голосов
/ 25 мая 2019

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

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(' ') для своего аргумента, как будто он состоит из строк!Эти две функции не согласуются в их общей структуре данных.

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

...