Python【习题】杨辉三角:生成器


人生苦短,我用Python

环境:Windows 10 64-bit, python == 3.6.4 , PyCharm CE == 2018.1
声明:学习资源来自于网络,这里是自己学习笔记总结与分享,每篇内容会随着学习的深入进行更新,如发现问题请评论留言。由于网络重复资源比较多,原作者不明,均未给出链接,实现代码根据自己的理解会重新编写,若原作者看到此文,请留言,我将标记文中代码来源。


Python【习题】杨辉三角:生成器_第1张图片
杨辉三角

杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

用Python实现杨辉三角
杨辉三角的每一行可以看成一个列表,然后通过杨辉三角的规律不断计算出下一行的值,并输出此行列表。
具体实现如下,有详细注释:

  • 方法1:
# 杨辉三角
# 定义一个生成器triangles()
def triangles():
    L = [1] # 定义一个列表,杨辉三角第一行
    while True:
        yield L # 当遇到yield时,就输出列表L
        L.append(0) # 在列表末尾增加一个元素0,用于计算下一行
        L = [L[i - 1] + L[i] for i in range(len(L))] # 此为列表生成式,用于计算下一行
        # len(L)列表的长度,也就是杨辉三角的第len(L)行
        # range(len(L))  用for循环挨个计算每一行的每一个元素
        # L[i - 1] + L[i]计算的结果作为新行的元素

n = 0 # 计数作用,循环结束条件
for i in triangles():
    print(i) # 打印出杨辉三角
    n +=1
    if n == 10:  # 当打印10行时,结束.
        break

下面是L = [L[i - 1] + L[i] for i in range(len(L))]的详细计算过程:

初始 L = [1]
经过 L.append(0) 
此时 L = [1,0], len(L) = 2 行数即为接下来准备计算杨辉三角的第二行
所以 L = [L[i - 1] + L[i] for i in range(2)]
这里是列表生成式的计,for 循环,当
i = 0, L[0-1] + L[0] = 1
i = 1, L[1-1] + L[1] = 1
所以L = [1, 1]  计算结果,即为杨辉三角的第二行
接下来进入下一个while循环,遇到yield L,则输入杨辉三角第二行
接下来准备计算第三方,重复以上。
  • 方法2:
def method2():
    pass   # 占位

你可能感兴趣的:(Python【习题】杨辉三角:生成器)