Discuss / Python / 我的作业

我的作业

Topic source

babeCoral珊

#1 Created at ... [Delete] [Delete and Lock User]
def triangles():
	L=[1]
	yield print(L)
	while True:
		N=[1]
		for i, value in enumerate(L):
			if(i==len(L)-1 and value==1):
				N.append(1)
				break
			N.append(L[i]+L[i+1])
		L=N
		yield print(L)

Daziiiiiii

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

您好,我有点不是很能明白if和break语句这块。我的理解是:满足if条件相当于L的最后一个元素是1,然后这时候再给N的最末加1,之后N.append(...)是再给N的末尾加其他元素,那不是不符合序列要求了吗?抓耳挠腮好久了,想向您请教一下(˶‾᷄ ⁻̫ ‾᷅˵)

lov1394_198

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

主要是理解for i, value in enumerate(L)

第一次调用到yield结束,这时L=[1]

第二次调用是从yield结束的地方开始L=[1],然后进循环,先不管N,这时enumerate的作用是取出下标赋给i=0,值赋给value=1

进入判断if(i==len(L)-1 and value==1):

(i = (len(L)=1) - 1= 0) and value=value=1成立 N.append(1)在这时N=[1,1] break 跳出循环

L=N=[1,1]

打印L

第三次调用从while里面的yield开始L=[1,1],这时enumerate取出下标赋给i=0,值赋给value=1

进入判断if(i==len(L)-1 and value==1): 注意这是后L的长度是2

(i = (len(L)=2) - 1 != 0) and value=value=1条件不成立,执行N.append(L[i=0]=1+L[(i=0)+1]=1) 就是N.append(2)这时候N=[1,2]注意没有跳出for循环!

for第二次取值,这时enumerate取出下标赋给i=1,值赋给value=1

进入判断if(i==len(L)-1 and value==1):

(i = (len(L)=2) - 1= 1) and value=value=1成立 N.append(1)在这时N=[1,2,1] break 跳出循环

L=N=[1,2,1]

打印L

除了第一次调用没进while,后面的调用都是在while里面执行。

Daziiiiiii

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

哇好详细,明白了!非常非常感谢您!


  • 1

Reply