pascal三角程序显示错误的输出

时间:2019-05-23 09:31:01

标签: python python-3.x pascals-triangle

我设计了一个程序,该程序接受用户输入数字三角形中的每个数字,并向控制台显示它是否是帕斯卡三角形。问题是代码一直显示数字三角形不是帕斯卡三角形。我只是想知道是什么原因导致它即使显示也不会继续显示“这不是一个帕斯卡三角形”。谢谢。

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

当用户输入一个数字三角形为Pascal三角形时,它应在控制台上显示“这是一个Pascal三角形”

1 个答案:

答案 0 :(得分:0)

这是在构建时不测试代码的完全灾难。让我们看看程序如何启动:

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()读取的用户三角形被打印并丢弃!然后,我们在未转换的 string 版本的三角形高度上调用checkIfPascal(),而不是三角形本身!

checkIfPascal()是它自己的代码沼泽。尽管triangle()函数似乎将数据格式化为list的{​​{1}}中的list,但是int对其参数调用checkIfPascal()就像它是由字符串组成的!这两个函数的共享数据结构不一致。

从小处开始,然后进行测试。不要编写整个程序,并假设您(或我们)可以简单地调试工作。我认为这是一个很棒的程序。