杨辉三角(Python)
楊輝三角性質:
?解題思路:
打印前兩行:
num=int(input("請輸入您需要打印的楊輝三角的層數:")) list1=[] for i in range(num):list2=[]if i==0:list2=[1]elif i==1:list2=[1,1]else:passlist1.append(list2) print(list1)在if和elif條件判斷中,但i等于0或1即第一層和第二層時直接打印;然后每判斷一個判斷后,都會將list2添加到list1中.
請輸入您需要打印的楊輝三角的層數:2 [[1], [1, 1]]請輸入您需要打印的楊輝三角的層數:5 [[1], [1, 1], [], [], []]打印num行:
num=int(input("請輸入您需要打印的楊輝三角的層數:")) list1=[] for i in range(num):list2=[]if i==0:list2=[1]elif i==1:list2=[1,1]else:for j in range(i+1):if j==0 or j==i:list2.append(1)else:list2.append(list1[i-1][j-1]+list1[i-1][j])list1.append(list2)#每存一行的數據(每執(zhí)行一次判斷后),便添加到list1 print(list1)?在else判斷中(打印其他層)創(chuàng)建一個for循環(huán),變量j是為了這一層里面的各個元素,或者說j的索引范圍,而這也就是參數i+1的原因.好吧我知道你不理解,假設此時需要打印第四層,i即=3,而且第四層的元素有4個,在列表中的索引值j為0,1,2,3。而i的索引范圍卻只有0,1,2,因此i+1的目的就是為了匹配j的索引.
在循環(huán)中的if判斷,當j的取值等于0或i時,即這一層的列表的第一個或最后一個時,將1添加到list2中(參考性質1);在else判斷中,將上一層即i-1中的元素取出相加(參考性質2)。
好吧,我知道你還是沒有看明白,換個說法:
為什么是i-1:因為i-1是這一層的上一層;假設當前是第3層,則i=2,那么上一層就是i=1即第2層.但是存放第三層楊輝三角的列表是[[1],[1,1],[? ]].而我們要先獲取上一層即第二層,即i=1即(i-1)的數據(list1[1])
# 假設當前是第4層,則i=3, 但是列表是[[1], [1, 1], [1,2,1],[? ]].而我們要先獲取上一層即第三層, 即i=2j即(i-1)的數據(list1[2]),以此類推
為什么是j-1:此時這個索引是為了獲得一層中的各個元素值,而j的定義就是用來表示這一行里面的各個元素值!假設當前是第3層,j的取值范圍是0,1,2;此時列表為[[1], [1, 1], [1,2,1]]; 要索引[1,1],但是這索引的這個列表范圍是0,1,而剛好要索引的列表范圍比j的范圍小1
# 假設當前是第4層,j的取值范圍是0,1,2,3;此時列表為[[1], [1, 1], [1,2,1],[1,3,3,1]];要索引[1,2,1],但是這索引的這個列表范圍是0,1,2;而且第四中的list2中的第一個元素3是第三層的第1個元素(list1[2][0])和第二個元素(list1[2][1])相加而得,以此類推!
#list1(二維列表) [[1] 第一層(i=0) [1, 1] 第二層(i=1) [1, 2, 1] 第三層(i=2,j=0,1,2) [1, 3, 3, 1] 第四層(i=3,j=0,1,2,3) [1, 4, 6, 4, 1]] 第五層(i=4,j=0,1,2,3,4)請輸入您需要打印的楊輝三角的層數:4 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]]請輸入您需要打印的楊輝三角的層數:6 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]?打印楊輝三角(直角三角形):? ? ? ?
for i in list1:#print(i)for j in i:print("{:<4}".format(j),end="")print()#每輸出一行的元素后就換行首先遍歷list1,因為list1是個二維列表,所以遍歷的結果是list1中的各個元素(list1中的小列表),因為print輸出默認換行(不換行:print(i,end=""))。此時接著遍歷i,然后格式化,左對齊,兩個字符之間的寬度為4(寬度自己定義,建議是偶數);print()是每次打印一個列表(list1中的一個元素)后換行,例如打印完第三層后,換行打印第四層,否則都會在同一行。
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 #print(i)的結果 [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1]#print(i,end="")的結果 [1][1, 1][1, 2, 1][1, 3, 3, 1][1, 4, 6, 4, 1]居中楊輝三角:
這次相對上文直角形三角僅僅多了三行,而如何居中,無非就是在每一行的起始數前面空你所需要的長度;
首先引用了一個變量space,他是求list1中的最后一個元素的長度,即最后一層的長度,假設有5層,list1最后一個元素就是[1,4,6,4,1],所以他的長度就是5.至于為什么還要在所求長度后面減一這個不重要,當然你也可以減2,或者不減,重要的是輸出調試時看是否對稱美觀,同時還要參考對應兩個字符之間的長度例如格式化方法中的長度4;同時在最后一行的space-=1的作用和當前是一樣的,而這也就是為什么可以減也可以不減的原因!
其次,也是本文最難理解的一步.為什么引用space,因為每行前面的空格不是固定的,這是一個動態(tài)的效果,因此得需要的一個變量表示,而不是一個固定的數值;同樣為什么space要利用最后一層的長度,沒有什么別的,主要就是為了美觀,不至于出現(xiàn)擁擠,或者不對稱的現(xiàn)象!
同樣為什么所需空格長度是space*4//2,舉例證明:首先在當前直角型楊輝三角中因為相鄰兩值的長度為4,那么在五層楊輝三角中的最后一行長度(加上空格)就是16,因此第一行所需空格長度為8(因為第一行前面空格的長是最后一行的長度的一半).到了這個時候可能就就有人疑問為什么不直接用16/2呢,這是因為16和8都是你自己數出來的.計算機是不會數的!
在五層楊輝三角中,最后一行的元素有5個,所以space為4;兩個數字之間的空格長度也是4,但是要怎么湊出8(用space加上兩個數字之間的空格長度的想法是不嚴謹的)呢?4*4//2=8;公式為(列表長-1)*兩數之間的空格長度//2.
?
space=len(list1[-1])-1 for i in list1:print(space*4//2*" ",end="")for j in i:print("{:<4}".format(j),end="")print()space-=1完整版:
num=int(input("請輸入您需要打印的楊輝三角的層數:")) list1=[] assert num>0,"請輸入一個正整數!" for i in range(num):list2=[]if i==0:list2=[1]elif i==1:list2=[1,1]else:for j in range(i+1):if j==0 or j==i:list2.append(1)else:list2.append(list1[i-1][j-1]+list1[i-1][j])list1.append(list2) print(list1) space=len(list1[-1])-1 for i in list1:print(space*4//2*" ",end="")for j in i:print("{:<4}".format(j),end="")print()space-=1 請輸入您需要打印的楊輝三角的層數:9 [[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 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注意事項:?
總結
以上是生活随笔為你收集整理的杨辉三角(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 天思 erp win7安装提示服务器上没
- 下一篇: python数字雨_用Python实现黑
