Python实现杨辉三角,用python编写杨辉三角完整代码
当我在廖雪峰教程生成器中看到杨辉三角练习题时,我起初感到非常不安,而且毫无头绪。网上各种回答只是梳理了程序执行流程,并没有解决问题的抽象思路。
注意:阅读本教程前,请先学习生成器的原理和yield return的使用规则,否则可能会不知所措。
这里我根据自己的理解写下我的想法:
首先附上我们需要找到的杨辉三角:
[1][1,1][1,2,1][1,3,3,1][1,4,6,4,1][1,5,10,10,5,1][1,6,15,20,15,6,1][1,7,21,35,35,21,7,1][1,8,28,56,70,56,28,8,1][1,9,36,84,126,126,84
第一步:先找到规律,抽象出问题:
首先我们观察第一个行为[1],我们直接赋值一个变量:初始化序列p=[1]。其次,我们观察下面的每一行的开头结尾都是[1],那么我们可以推导出每一行的规律为:[1]+.........+[1]。然后,我们发现第三排中间的[2],第四排中间的[3,3],第五排中间的[4,6,4]等等就是我们需要的。
第一行:[1]设p=[1]
第二行:[1] [1]设p=[1,1]
第3行:[1] [2] [1]设p=[1,2,1]
第4行:[1] [3] [3] [1]设p=[1,3,3,1]
.
在寻找规则后,我们发现每个新列表的中间部分与前一个列表的中间部分相等:元素0、元素1、元素1、元素2、元素2、元素3、
加上头尾就是[1] [p [0] p [1]] [p [1] p [2]].[1]
比如上面第三行:p[0]=1,p[1]=2,p[2]=[1]
那么第四行就是:[1][1 2](# p[0]p[1])[2 1](# p[1]p[2])[1]
诸如此类。
由于核心点是去掉前两个[1]的这个中间部分:[p[0] p[1]] [p[1] p[2]] [p[2] p[3]].
我们可以很容易地得到规则:[p[i] p[i 1]]#对于范围(x)中的I
如果你还没看懂,你可以找一张纸,按照这个规则写下每一行:
P代表这一行列表的中间部分,P代表前一行的列表:
[1][1][1][1][2][1]new P=P[0]P[1]/I=0,1要求I在范围(1)# range(1)=0,根据[p[i] p[i 1]],P[0]P[0 1][1][3][1]new P=P[0]P[1],p [1] p [2]/I=0,1,2要求I在范围(p [1] p [2],p[2] p[3] /i=0,1,2
i的规律为上一行list元素个数-1,也就是len(p) - 1此时,可以得出推导结果:
[1][p[I]p[I 1]for I in range(len(p)-1)][1]
完整的程序代码:
def triangles():p=[1]while true:yield p #生成器函数与普通函数的区别:执行过程中,遇到yield就中断,继续执行p=[1][p[I]p[I 1]for I in range(len(p)-1)][1]n=0f或t in triangles():print(t)n=n1 if n==10:break结果:。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。