这样写哪里错了吗,求助
Topic sourcefor 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
用户7629784270
def triangles():
a = [1]
while True:
yield a
a.append(0)
for i in range(len(a)):
a[i] = a[i-1] + a[i]