Discuss / Python / 真难

真难

Topic source

def triangles2():

    p = [1]

    while True:

        yield p

        p = [1] + [p[n]+p[n+1] for n in range(len(p)-1)] + [1]

n = 0

results = []

for t in triangles2():

    print(t)

    results.append(t)

    n = n + 1

    if n == 10:

        break

#思路是先打草稿,假设去除头尾两个1,还有n个值

#第一个值是p0+p1,第二个值是p1+p2,...,第n个值是pn-1+pn

#那么0到n-1就是range(n),这里的n怎么定义呢? 我们自然想到用数列的长度去定义

#我们此时手里的这一列数字长度是n+1+1 = n+2

#那么我们若称呼上一列是p,则它的长度,即len(p)是 n+1

#则range(n) = range(len(p)-1)

#我们再想到用列表表达式去简化我们的for循环

#去除首位两个 [1]

#中间那 n 个数据可以表达为  [  pn + pn+1   for   n  in  range(len(p) - 1)  ]

#加到一起为:  p = [1] + [p[n]+p[n+1] for n in range(len(p)-1)] + [1]

#配合yield p,我们将数列表达式放到它后面,整体再放到while True的下面,run即可


  • 1

Reply