做本章作业的时候,我写了一份比较笨的代码,如下:
L=[]
L.append(1)
yield (L)
x=3
while(x<=10):
m = 1
i = 0
while(i < (x-2)) :
L[m] = L[m-1]+L[m]
m=m+1
i = i+1
x=x+1
心想虽然代码看着笨,但是逻辑应该没啥大问题。但是,运行的时候我傻 了,以下是返回结果:
[1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] [1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1] 测试失败!
[1, 9, 43, 144, 376, 804, 1429, 2055, 2056, 1]
测试失败!
居然每一行都一样。我就不明白了。就算逻辑有问题,前两个yield 返回的L,第一个长度为1,第二个长度为2应该没啥问题,但是现在长度都为10,值都一样,使我严重怀疑yield返回的是一个指针(类似C的指针吧)。所以修改了一下代码,如下:(此段代码测试可以通过)
yield
L=[1,1,1]
yield ([1])
yield ([1,1])
L2=[1]
L2.append(L[m-1]+L[m])
L2.append(1)
L = L2
前两次返回的不是L,后面返回的L其实都指向了一个新的L2。这样结果就没有问题了。但是这不知是否能够验证我的猜想。还请各位大神指教。
我也遇到了同样的问题
Sign in to make a reply
疾风_90334
做本章作业的时候,我写了一份比较笨的代码,如下:
L=[]
L.append(1)
yield (L)
L.append(1)
yield (L)
x=3
while(x<=10):
m = 1
i = 0
while(i < (x-2)) :
L[m] = L[m-1]+L[m]
m=m+1
i = i+1
L.append(1)
x=x+1
yield (L)
心想虽然代码看着笨,但是逻辑应该没啥大问题。但是,运行的时候我傻 了,以下是返回结果:
居然每一行都一样。我就不明白了。就算逻辑有问题,前两个
yield
返回的L,第一个长度为1,第二个长度为2应该没啥问题,但是现在长度都为10,值都一样,使我严重怀疑yield返回的是一个指针(类似C的指针吧)。所以修改了一下代码,如下:(此段代码测试可以通过)L=[1,1,1]
yield ([1])
yield ([1,1])
x=3
while(x<=10):
m = 1
i = 0
L2=[1]
while(i < (x-2)) :
L2.append(L[m-1]+L[m])
m=m+1
i = i+1
L2.append(1)
L = L2
x=x+1
yield (L)
前两次返回的不是L,后面返回的L其实都指向了一个新的L2。这样结果就没有问题了。但是这不知是否能够验证我的猜想。还请各位大神指教。