我的python代码异常“列表索引超出范围”

时间:2017-08-14 09:17:33

标签: python

我想通过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:列表索引超出范围

enter image description here

它告诉我在第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()

1 个答案:

答案 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>}循环

中的