def triangles(max): n=1 while n<= max: if n>2: L=[L[i-1] + L[i] for i in range(1,n-1)] L.append(1) L.insert(0,1) n+=1 yield L if n==2: n+=1 L=[1,1] yield L if n==1: n+=1 yield [1] return 'done'
for t in triangles(int(input())): print(t)
运行结果:
c:\Py_works>python yanghui.py 10 [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]
L=[L[i-1] + L[i] for i in range(1,n-1)]这里,之前我是这么写的: if n>2: S=L for i in range(1,n-1): L[i]=S[i-1]+S[i] L.append(1) n+=1 yield L
然后出错了 c:\Py_works>python yanghui.py 10 [1] [1, 1] [1, 2, 1] [1, 3, 4, 1] [1, 4, 8, 9, 1] [1, 5, 13, 22, 23, 1] [1, 6, 19, 41, 64, 65, 1] [1, 7, 26, 67, 131, 196, 197, 1] [1, 8, 34, 101, 232, 428, 625, 626, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] 不知道为什么,希望网友帮忙解答
S=L这里有问题 S指向了L的存储地址。 所以L内部变化,S也会,然后迭代会产生错误的结果,你现在的方法L是重新生成的list
恩,谢谢。 我从运行结果上能感觉是这方面错误,但不知道具体的是什么。 谢谢你的回答。
Sign in to make a reply
邪恶小弯角
-- coding: utf-8 --
def triangles(max): n=1 while n<= max: if n>2:
L=[L[i-1] + L[i] for i in range(1,n-1)] L.append(1) L.insert(0,1) n+=1 yield L if n==2: n+=1 L=[1,1] yield L if n==1: n+=1 yield [1] return 'done'
for t in triangles(int(input())): print(t)
运行结果:
c:\Py_works>python yanghui.py 10 [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]
L=[L[i-1] + L[i] for i in range(1,n-1)]这里,之前我是这么写的: if n>2:
S=L for i in range(1,n-1): L[i]=S[i-1]+S[i] L.append(1) n+=1 yield L
然后出错了 c:\Py_works>python yanghui.py 10 [1] [1, 1] [1, 2, 1] [1, 3, 4, 1] [1, 4, 8, 9, 1] [1, 5, 13, 22, 23, 1] [1, 6, 19, 41, 64, 65, 1] [1, 7, 26, 67, 131, 196, 197, 1] [1, 8, 34, 101, 232, 428, 625, 626, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] 不知道为什么,希望网友帮忙解答