Discuss / Python / 有些疑问

有些疑问

Topic source

-- 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] 不知道为什么,希望网友帮忙解答

3RKO

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

S=L这里有问题 S指向了L的存储地址。 所以L内部变化,S也会,然后迭代会产生错误的结果,你现在的方法L是重新生成的list

恩,谢谢。 我从运行结果上能感觉是这方面错误,但不知道具体的是什么。 谢谢你的回答。


  • 1

Reply