制作Pascal的三角形

时间:2015-02-19 16:23:56

标签: python python-3.x

def tri(fib_lst,n):

    lst = []
    if n > 1:
        for i in range(n):
            if i == 0 or i == n-1:
                lst.append(1)
            else:
                lst.append((i-1)+i)
    if n <= 1:
        lst.append(1)
    return lst

def draw_pascal_triangle(fib_lst,n):

    for i in range(n):
        fib_lst.append(tri(fib_lst, i+1))

然后为了获得结果,我输入了以下内容:

>>> lst = []
>>> lst2 = []
>>> draw_pascal_triangle(lst, 5)
>>> draw_pascal_triangle(lst, 8)
>>> print(lst)
>>> print(lst2)

结果是:

[[1], [1, 1], [1, 1, 1], [1, 1, 3, 1], [1, 1, 3, 5, 1], [1], [1, 1], [1, 1, 1], [1, 1, 3, 1], [1, 1, 3, 5, 1], [1, 1, 3, 5, 7, 1], [1, 1, 3, 5, 7, 9, 1], [1, 1, 3, 5, 7, 9, 11, 1]]

我知道我的问题出现在这一行:

else:
    lst.append((i+1)+i)

但我不知道如何解决我的错误。

2 个答案:

答案 0 :(得分:1)

这是我刚制作的一个简单的pascal生成器。

def generatePascal(depth):        
    pascal = [[1]]

    for level in range(depth):
        lastRow = pascal[-1]
        paddedLastRow = [0] + lastRow + [0]
        nextRow = []
        for position in range(len(paddedLastRow) - 1):
            nextRow.append(paddedLastRow[position] + paddedLastRow[position+1])
        pascal.append(nextRow)

    return pascal

例如:

>>> generatePascal(4)
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]

答案 1 :(得分:0)

这是一个有效的代码,我刚刚更改了你写的一行:

def tri(fib_lst,n):
    lst = []
    if n > 1:
        for i in range(n):
            if i == 0 or i == n-1:
                lst.append(1)
            else:
                lst.append(fib_lst[-1][i-1]+fib_lst[-1][i])
    if n <= 1:
        lst.append(1)
    return lst

def draw_pascal_triangle(fib_lst,n):
    for i in range(n):
        fib_lst.append(tri(fib_lst, i+1))

然后:

>>> lst = []
>>> lst2 = []
>>> draw_pascal_triangle(lst, 5)
>>> draw_pascal_triangle(lst, 8)
>>> print('\n'.join([str(l) for l in lst]))
>>> print('\n'.join([str(l) for l in ls2]))

结果:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]

你的错误是一个算法错误。看看Wikipedia

我们有lst[n][k] = lst[n-1][k-1] + lst[n-1][k]