我想通过python打印列表:
# 1
# 1 1
# 1 2 1
# 1 3 3 1
# 1 4 6 4 1
#1 5 10 10 5 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]
# [1, 8, 28, 56, 70, 56, 28, 8, 1]
# [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
....
但出现例外情况:
IndexError:列表索引超出范围
它告诉我在第28行。我一次又一次地检查它,但我不知道为什么。谁能回答我?
这是python代码:
def triangles():
row = 1
while True:
triangle = [[1],[1,1]]
if row == 1:
print(triangle[row - 1])
if row == 2:
print(triangle[row - 1])
if row > 2:
#init the n list
subn = [1]*row
for i in range(row):
#if subn[1] ~ subn[row -2]
if i > 0 and i < (row - 1):
a = triangle[row - 2][i]
b = triangle[row - 2][i - 1]
subn[i] = a + b
triangle.append(subn)
print(triangle[row - 1])
row = row + 1
triangles()
答案 0 :(得分:0)
triangle
。
每次创建并分配新行时,都会将其附加到变量triangle
,但随后又循环并将其重新分配给[[1],[1,1]]
,这会丢失附加的行。您认为行数比您多,因此索引超出范围。
def triangles():
row = 1
while True:
triangle = [[1],[1,1]]
if row == 1:
print(triangle[row - 1])
应该是:
def triangles():
row = 1
triangle = [[1],[1,1]]
while True:
if row == 1:
print(triangle[row - 1])
另外,你应该以某种方式限制它,否则它是一个永久循环。
把
if row > 100:
break
<{1>}循环中的