Discuss / Python / 思路是 "用户6589242306" 的,看了一圈感觉这个简洁,附上一点说明

思路是 "用户6589242306" 的,看了一圈感觉这个简洁,附上一点说明

Topic source

飞页快刀

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

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了。

_tt_一一

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

你这个测试会失败哦

因为triangles()里面是不会赋值的

飞页快刀

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

我都是用pycharm写的,网站上的测试搞不太懂,没用它


  • 1

Reply