Python轻松学0001杨辉三角

北京中科皮肤病医院 http://pf.39.net/bdfyy/zjft/161225/5154126.html
习题:编写函数,接收一个整数t作为参数,打印杨辉三角形的前t行。简介:杨辉三角,是中国古代数学的接触研究成果之一,他把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。杨辉三角具有许多规律(想了解多一点的请问度娘~),但这道题我们需要知道的是以下几个规律:0.每行端点与结尾的数为1;1.每个数等于它上方两数之和;2.第n项的数字有n项,第n行数字之和为2n-1;3.第n行的m个数可表示为C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数;4.第n行的第m个数和第n-m+1个数相等,为组合数性质之一。5.每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即C(n+1,i)=C(n,i)+C(n,i-1)。6.(a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。性质0为规律前提,性质3和性质5是杨辉三角的基本性质。习题分析:#把每一行看作一个list,试写一个generator,不断输出下一行的list。对于每一行,list的第一个元素和最后一个元素是不变的。如果用空列表L=[]表示的话,L[0],L[n],是不变的,第一步:先找规律,抽象化问题:杨辉三角首先可以观察到,第一行为[1],我们直接赋给一个变量:初始化数列p=[1]其次我们观察到,下面的每一行的开头结尾都是[1],那么我们可以推导出每一行的规律为:[1]+.........+[1]那么我们发现,从第三行开始中间的[2],第四行中间的[3,3],第五行中间的[4,6,4]等等以此类推才是我们需要推导的部分第一行:[1]设p=[1]第二行:[1]+[1]设p=[1,1]第三行:[1]+[2]+[1]设p=[1,2,1]第四行:[1]+[3]+[3]+[1]设p=[1,3,3,1]经过找规律,可以发现,每一个新的list中间的部分,都等于上一行list的:第0个元素+第1个元素,第1个元素+第2个元素,第2个元素+第3个元素,.......加上头尾也就是[1]+[p[0]+p[1]]+[p[1]+p[2]].....+[1]比如上面第三行:p[0]=1,p[1]=2,p[3]=[1]那么第四行就是:[1]+[1+2]#p[0]+p[1]+[2+1]#p[2]+p[3]+[1]后面以此类推既然核心点是这个除去首位两个[1]的中间部分:[p[0]+p[1]]+[p[1]+p[2]]+[p[2]+p[3]]........我们很容易得到规律:[p[i]+p[i+1]]#foriinrange(x)理解性较好,代码量较少的实现方式如下:杨辉三角的Python程序杨辉三角的结果附编程(自己打字才能练编程哦):defyanghui(t):#打印第一行和第二行print([1])line=[1,1]print(line)#打印从第三行开始的其他行foriinrange(2,t):r=[]#按规律生成该行除两端以外的数字foriinrange(0,len(line)-1):r.append(line[i]+line[i+1])#把两端的数字连上line=[1]+r+[1]print(line)#测试,打印杨辉三角形的前6行yanghui(6)


转载请注明:http://www.aierlanlan.com/rzdk/9042.html