按照你的要求用字符串類型編寫的楊輝三角的Python程序如下
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供臨沂網(wǎng)站建設(shè)、臨沂做網(wǎng)站、臨沂網(wǎng)站設(shè)計(jì)、臨沂網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、臨沂企業(yè)網(wǎng)站模板建站服務(wù),十余年臨沂做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
def?printYangHui(n):
for?i?in?range(1,n+1):
if?i==1:
s="1"
if?i==2:
s="1,1"
if?i2:
s1=""
begin=0;
for?j?in?range(0,(i-3)+1):
begin1=s.find(",",begin)
begin2=s.find(",",begin1+1)
if?begin2==-1:
begin2=begin1+2
s1=s1+str(int(s[begin:begin1])+int(s[begin1+1:begin2]))+","
begin=begin2-(begin2-begin1-1)
s="1,"+s1+"1"
print(s)
n=int(input())
printYangHui(n)
源代碼如下(注意源代碼的縮進(jìn))
楊輝三角,是二項(xiàng)式系數(shù)在三角形中的一種幾何排列。
前提:每行端點(diǎn)與結(jié)尾的數(shù)為1.
每個(gè)數(shù)等于它上方兩數(shù)之和。
每行數(shù)字左右對(duì)稱,由1開始逐漸變大。
第n行的數(shù)字有n項(xiàng)。
第n行數(shù)字和為2n-1。
第n行的m個(gè)數(shù)可表示為
C(n-1,m-1),即為從n-1個(gè)不同元素中取m-1個(gè)元素的組合數(shù)。
第n行的第m個(gè)數(shù)和第n-m+1個(gè)數(shù)相等
,為組合數(shù)性質(zhì)之一。
每個(gè)數(shù)字等于上一行的左右兩個(gè)數(shù)字之和??捎么诵再|(zhì)寫出整個(gè)楊輝三角。即第n+1行的第i個(gè)數(shù)等于第n行的第i-1個(gè)數(shù)和第i個(gè)數(shù)之和,這也是組合數(shù)的性質(zhì)之一。即
C(n+1,i)=C(n,i)+C(n,i-1)。
(a+b)n的展開式中的各項(xiàng)系數(shù)依次對(duì)應(yīng)楊輝三角的第(n+1)行中的每一項(xiàng)。
將第2n+1行第1個(gè)數(shù),跟第2n+2行第3個(gè)數(shù)、第2n+3行第5個(gè)數(shù)……連成一線,這些數(shù)的和是第4n+1個(gè)斐波那契數(shù);將第2n行第2個(gè)數(shù)(n1),跟第2n-1行第4個(gè)數(shù)、第2n-2行第6個(gè)數(shù)……這些數(shù)之和是第4n-2個(gè)斐波那契數(shù)。
將各行數(shù)字相排列,可得11的n-1(n為行數(shù))次方:1=11^0;
11=11^1;
121=11^2……當(dāng)n5時(shí)會(huì)不符合這一條性質(zhì),此時(shí)應(yīng)把第n行的最右面的數(shù)字”1”放在個(gè)位,然后把左面的一個(gè)數(shù)字的個(gè)位對(duì)齊到十位…
…,以此類推,把空位用“0”補(bǔ)齊,然后把所有的數(shù)加起來,得到的數(shù)正好是11的n-1次方。以n=11為例,第十一行的數(shù)為:1,10,45,120,210,252,210,120,45,10,1,結(jié)果為
25937424601=1110。
完整代碼:
#!/usr/bin/python
#coding=utf-8
#
__author__
=
'cy'
#輸出楊輝三角數(shù)值表
def
triangle(num):
#初始表值為[1]
triangle=[[1]]
#添加i個(gè)值([1])至triangle表,eg:[1]*3,triangle=[[1],
[1],
[1]]
for
i
in
range(2,
num+1):
triangle.append([1]*i)
#改變triangle表的值,eg:
#當(dāng)num=5時(shí),i取5,j取3
#triangle[4][1]
=
triangle[3][1]+triangle[3][0]
#triangle[4][2]
=
triangle[3][2]+triangle[3][1]
#triangle[4][3]
=
triangle[3][3]+triangle[3][2]
#相當(dāng)于triangle表的第4位的值(這里的值為一個(gè)表)的第1,2,3位值等于第3位的值(這里的值也是一個(gè)表)的第1,2,3位值和0,1,2的值分別相加(即錯(cuò)位相加)。
for
j
in
range(1,
i-1):
triangle[i-1][j]
=
triangle[i-2][j]+triangle[i-2][j-1]
return
triangle
#格式化輸出(輸出的是一個(gè)表)
def
printtriangle(triangle,
width):
#列寬
column
=
len(triangle[-1])*width
for
sublist
in
triangle:
result
=
[]
for
contents
in
sublist:
#控制間距
result.append('{0:^{1}}'.format(str(contents),
width))
#控制縮進(jìn),{0:^{1}}:空格在兩邊補(bǔ)齊空位‘^’居中對(duì)齊,‘:’號(hào)后面帶填充的字符
print('{0:^{1}}'.format(''.join(result),
column))
#啟動(dòng)函數(shù)
if
__name__
==
'__main__':
#輸入整數(shù)
num
=
int(input('How
many
rows
do
you
want:'))
#打印信息
"The
triangle
rows
as
follows:"
triangle
=
triangle(num)
#列寬
width
=
len(str(triangle[-1][len(triangle[-1])//2]))+3
printtriangle(triangle,
width)
triangles里用到了yield,yield 的作用就是把一個(gè)函數(shù)變成一個(gè) generator,帶有 yield 的函數(shù)不再是一個(gè)普通函數(shù),Python 解釋器會(huì)將其視為一個(gè) generator,調(diào)用 triangles(5) 不會(huì)執(zhí)行 triangles函數(shù),而是返回一個(gè) iterable 對(duì)象!在 for 循環(huán)執(zhí)行時(shí),每次循環(huán)都會(huì)執(zhí)行 fab 函數(shù)內(nèi)部的代碼,執(zhí)行到 yield L 時(shí),triangles函數(shù)就返回一個(gè)迭代值,下次迭代時(shí),代碼從 yield L?的下一條語句繼續(xù)執(zhí)行,而函數(shù)的本地變量看起來和上次中斷執(zhí)行前是完全一樣的,于是函數(shù)繼續(xù)執(zhí)行,直到再次遇到 yield。
1?那個(gè)2去哪了
你看else語句?L1 = [1,1]每次L都是基于這個(gè)L1生成的 比如L=[1,2,1] 那么下一個(gè)L1就是[1,3,3,1],下一句L = L1 所以每次都是新的L1生成
2?畫紅圈的地方應(yīng)該是和L1.insert(i,L[i-1+i])意思一樣
不一樣,插入的值是兩個(gè)數(shù)的和
def?triangles(max):
L?=?[1]
n?=?0
while(nmax):
n?=?n+1
if(n?==?2):
L=[1,1]
yield?L
else:
i?=?1
L1?=?[1,1]
while(i=n-2):
L1.insert(i,L[i-1]+L[i])
i=i+1
L?=?L1
yield?L
for?n?in?triangles(5):
print?n
程序輸出需要實(shí)現(xiàn)如下效果:
[1]
[1,1]
[1,2,1]
[1,3,3,1]
......
方法:迭代,生成器
123456789101112131415161718192021
def triangles() L = [1] while True: yiled L L =[1] + [L[i] + L[I+1] for i in range(len(L)-1)] + [1] n = 0 for t in triangles(): print(t) n += 1 if n == 10: break
實(shí)現(xiàn)邏輯:
1.由于yield為生成器中斷輸出,所以有了第一個(gè)次輸出為[1]
2.繼續(xù)while下面的yield后的循環(huán),此時(shí)list長(zhǎng)度為1,將其代入L中的len(L),得出[L[i]+L[i+1] for i in range(1-1)]得出為空值,所以yield L輸出為[1,1]
3.此時(shí)len(L)值為2,代入得出[L[i]+L[i+1] for i in range(2-1)]為[L[i]+L[i+1] for i in range(1)],i能取值為0,代入后為[L[0]+L[1]],而L[0]和L[1]的值均為1(有上面結(jié)果可知),所以輸出結(jié)果為[1,2,1]
4.由第三條可知此時(shí)len(L)值為3,代入得出[L[i]+L[i+1] for i in range(2)],i取值為0和1,通過循環(huán)輸出有兩個(gè)值,均為3,分別由[L[0]+L[1]],[L[1]+L[2]]
以此類推即可
文章標(biāo)題:python函數(shù)楊輝三角,python求楊輝三角
本文地址:http://jinyejixie.com/article6/hsojog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、商城網(wǎng)站、網(wǎng)站排名、品牌網(wǎng)站設(shè)計(jì)、云服務(wù)器、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)