def triangles(max):
L,n = [1],1
while n <= max:
yield L
L = [0] + L + [0]
L = [L[i] + L[i+1] for i in range(n+1)]
n = n + 1
# 测试:
for t in triangles(3):
print(t)
下面是说明,设max是3,以算到n为2时举例,把原来的L分为L1,L2,L3理清过程
n = 2
L1 = [1,1] # L1进入新一轮的初始值
L2 = [0] + L1 + [0]
L3 = [L2[i] + L2[i+1] for i in range(n+1)] # n为2的输出结果,问题主要就是这里,智商不够,折腾了好久
print(L1) # 结果当然是[1,1]
print(L2) # 这个是[0,1,1,0],也很好理解
print(L3)
# 结果是 [ 1, 2 ,1 ]。 for i in range(n+1) 当n为2时,i 就是迭代0,1,2 。
# i=0 L2[i]=0 L2[i+1]=1 L2[i] + L2[i+1]=1
# i=1 L2[i]=1 L2[i+1]=1 L2[i] + L2[i+1]=2
# i=2 L2[i]=1 L2[i+1]=0 L2[i] + L2[i+1]=1
# 然后列表 L3的每个元素就是 i为0,1,2时依次的结果
# 最后再说下yield L,就是把列表L返回给调用的地方,然后继续下面的命令。还是上面的例子,算出 [ 1, 2 ,1 ]后,往下n变为3,进入新一轮while循环,这时 n = max,遇到yield L # 这时把最后一条结果 [ 1, 2 ,1 ] 返回去,等算完这一轮,n已经是4了,循环是False,也就不会再继续执行yield L了。
你这个测试会失败哦
因为triangles()里面是不会赋值的
我都是用pycharm写的,网站上的测试搞不太懂,没用它
Sign in to make a reply
飞页快刀
def triangles(max):
L,n = [1],1
while n <= max:
yield L
L = [0] + L + [0]
L = [L[i] + L[i+1] for i in range(n+1)]
n = n + 1
# 测试:
for t in triangles(3):
print(t)
下面是说明,设max是3,以算到n为2时举例,把原来的L分为L1,L2,L3理清过程
n = 2
L1 = [1,1] # L1进入新一轮的初始值
L2 = [0] + L1 + [0]
L3 = [L2[i] + L2[i+1] for i in range(n+1)] # n为2的输出结果,问题主要就是这里,智商不够,折腾了好久
print(L1) # 结果当然是[1,1]
print(L2) # 这个是[0,1,1,0],也很好理解
print(L3)
# 结果是 [ 1, 2 ,1 ]。 for i in range(n+1) 当n为2时,i 就是迭代0,1,2 。
# i=0 L2[i]=0 L2[i+1]=1 L2[i] + L2[i+1]=1
# i=1 L2[i]=1 L2[i+1]=1 L2[i] + L2[i+1]=2
# i=2 L2[i]=1 L2[i+1]=0 L2[i] + L2[i+1]=1
# 然后列表 L3的每个元素就是 i为0,1,2时依次的结果
# 最后再说下yield L,就是把列表L返回给调用的地方,然后继续下面的命令。还是上面的例子,算出 [ 1, 2 ,1 ]后,往下n变为3,进入新一轮while循环,这时 n = max,遇到yield L
# 这时把最后一条结果 [ 1, 2 ,1 ] 返回去,等算完这一轮,n已经是4了,循环是False,也就不会再继续执行yield L了。