Discuss / Python / 这样写哪里错了吗,求助

这样写哪里错了吗,求助

Topic source

def triangles():

    a = [1]

    while True:

        yield a

        a.append(0)

        for i in range(len(a)):

            a[i] = a[i-1] + a[i]

深渊_小龙

#2 Created at ... [Delete] [Delete and Lock User]

for i in range(len(a)):

            a[i] = a[i-1] + a[i]

这个循环里面,你在每次循环时,修改了原有的list,而不是保持上一行list不变,计算生成下一行的新的list。

每次循环修改了list里的a[i]的值,在下一次循环时,使用的a[i-1]其实上一次循环计算出来的新值,而不是整个循环开始前的list中的值,解析如下:

第一行初始化list:[1]

先末尾加0,得临时list  [1,0]

开始循环计算前,a[0]=1,a[1]=0

计算第二行

第一次循环:a[0]=a[-1] + a[0]  = a[1] + a[[0] = 0 + 1 = 1,得 a[0]=1          

!!!注意此时的list已经更新了,虽然a[0]还是1,但是是计算之后得到的1了

第二次循环:a[1]=a[0] + a[1] = 1 + 0 = 1      !!!此处的a[0]已经是更新之后的a[0]了

所以第二行得到list  [1, 1]   看似结果是对的,但是只是巧合

再来看第三行

先末尾加0,得临时list [1,1,0]

开始循环计算前,a[0]=1, a[1]=1, a[2]=0

第一次循环:a[0]=a[-1] + a[0]  = a[2] + a[0] = 0 + 1 = 1,得 a[0]=1         

 !!!注意此时的list已经更新了,虽然值还是[1,1,0]

第二次循环:a[1]=a[0] + a[1] = 1 + 1 = 2   !!!关键点来了,此时的list更新变成[1,2,0]

第三次循环:a[2]=a[1] + a[2] = 2 + 0 = 2

所以第三行得到的list是 [1,2,2],而不是预想中的[1,2,1],依次类推,下面的行都会不对


  • 1

Reply