今天看廖雪峰老师python教程生成器一节时,最后的练习题目是打印杨辉三角前10行,题目如下:
分析:
1.每一行看做一个list,第一行只有一个1,s = [1]
2.每次使用generator生成一行list,generater每一次都从上次的yield处开始执行,需要生成几行我们就调用几次generator。
2.杨辉三角的特点就是
(1)从第二行开始,最左和最右的数都为1。即s = [1] + [1]
(2)每一行的元素个数等于行数,如第二行两个数,第三行三个数…,计算行数使用len(s)
(3)中间每一个数等于其肩膀上两个数的和,正如下面这个2等于上一行(行数为 (len(s)-1) )的两个1的和
即s = [1] + [s[i] +s [i + 1] for i in range(len(s) - 1)] + [1]
代码如下:
def triangles(): # generator, 用于生成杨辉三角每一行的list
s = [1]
while True:
yield s
s = [1] + [s[i] +s [i + 1] for i in range(len(s) - 1)] + [1] # 核心
pass
n = 0
results = [] #得到杨辉三角
for i in triangles():
results.append(i) # 增加list
n = n + 1
if n == 10: # 前10行
break
for i in results: # 打印杨辉三角
print(i)