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)
但我不知道如何解决我的错误。
答案 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]
。