前言
本文通过定义一个生成器函数来实现杨辉三角。生成器函数的特点如下:
- 1.生成器函数中使用yield代替普通函数中的print进行输出;
说明:函数在执行到yield语句时便停止执行并返回,下次执行时直接从上次返回的yield语句处继续执行下面的语句。 - 2.调用生成器函数时需要声明一个对象,该对象可以使用for循环进行迭代;
实现
-
1.杨辉三角的定义如下:
说明:当n>=2时,每一行的开头和结尾都是1,从第3行开始,中间的各个元素=上一行相应位置与前一位置元素之和。我们假设将每一行的所有元素当作一个列表,例如:
第二行的元素为:list_2 = [1,1]
第三行的元素为:list_3 = [1,2,1]
除去首尾都是1不变之外,list_3中的2 = list_2[0] + list_2[1]。又如list_5中的4 = list_4[0] + list_4[1],6 = list_4[1] + list_4[2]。 -
2.实现思路
(1)预先声明两个list:tri = [1]和pre = [1]
说明:其中列表tri表示下一行的所有元素,列表pre表示上一行的列表元素。
列表tri中每次的元素变化都 = 列表pre中相应位置的元素之和。
(2)每次计算完列表tri中的元素之后,通过append(1)来添加末尾的元素。 -
3.实现代码
# 杨辉三角--generator
def triangles(max): # max表示准备输出多少行的元素
tri = [1]
pre = [1]
n = 1
while n <= max:
yield tri
for i in range(1, len(pre)):
tri[i] = pre[i-1] + pre[i]
tri.append(1)
pre = tri[:]
n += 1
triangles = triangles(10) # 以输出10行为例;调用generator函数,返回一个generator对象
for tri in triangles: # 遍历generator对象不断计算并输出下一行的元素
print(tri)
- 4.实现结果