廖雪峰python的练习题集之生成器(杨辉三角习题)

最近跟着廖雪峰老师的教程进行学习python,在做生成器的练习题时,发现自己的思路还有待拓展,跟其他学习的大佬比起来还有较大的差距,因此记录下来用作复习。

ps:本块代码是看了廖雪峰老师教程上MeanCoder的作业。。。

o(╯□╰)o,虽然自己写了出来,但是要复杂太多,就不贴出来了。

杨辉三角定义如下:

          1
         / \
        1   1
       / \ / \
      1   2   1
     / \ / \ / \
    1   3   3   1
   / \ / \ / \ / \
  1   4   6   4   1
 / \ / \ / \ / \ / \
1   5   10  10  5   1

把每一行看做一个list,试写一个generator,不断输出下一行的list:

# -*- coding: utf-8 -*-

def triangles():
    x=[1]
    while True:
        yield x
        x=[0]+x+[0]   #首尾加0 ,用以计算边界值
        x= [ x[i] + x[i+1] for i in range(len(x)-1)]

以下也是教程中的AnimaOcean提供的帮助,说的挺简单明了,就直接搬用了;

x = [0]+x+[0] 首尾加0,用于边界的计算
x = [x[i]+x[i+1] for i in range(len(x)-1)]  循环生成list,最后赋值给l
x[i]+x[i+1] 前一个值和后一个值相加计算出下一个值
for i in range(len(x)-1) 循环获取生成的索引值
range(len(x)-1) 获得l的全部索引值,因为计算方式是当前值和后一个值相加,避免尾部越界所以要减一

拆开就是这样的
def triangles():
    x = [1]
    while True:
        yield x
        x = [0]+x+[0]
        g = []
        for i in range(len(x)-1):
            g.append(x[i]+x[i+1])
        x = g

感谢廖雪峰老师以及那两位同学。。。

猜你喜欢

转载自blog.csdn.net/Holy_NewBie/article/details/109119563