第16期—楊輝三角


1 問題描述

楊輝三角是中國數學史上的一個偉大成就,最早由中國南宋末年的數學家、教育家楊輝在其著作《詳解九章算術》中提出的。在大約500年后的歐洲,法國數學家帕斯卡也發現了這一結論,因此楊輝三角又稱為帕斯卡三角。​

楊輝三角是一個無限堆成的數字金字塔,它的兩條斜邊都是由數字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

楊輝三角的性質:

  • 每行首尾的數字都是1
  • 每行中間的各數都是它肩上兩個數的和
  • 第n行的數字有n項
  • 第n行的項數總比n-1行多1個

請用戶輸入一個非負整數n, 用Python輸出楊輝三角前 n 行~

2 解題思路

  • 用input函數使用戶輸入行數
  • 創建兩個列表,一個用於輸出最后的結果,另一個輸出每一行的數字,並將其添加到第一個列表中
  • 根據楊輝三角形的特點輸出結果:每行首尾的數字都是1;每行中間的各數都是它肩上兩個數的和

3 解題方法

 
n = int(input("輸入需要打印的楊輝三角行數 :"))
assert n > 0, "請輸入正整數!"

list1 = []
for i in range(n):
    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)

space = len(list1[-1])
for i in list1:
    print(' ' * (space * 4 // 2), end='')
    for j in i:
        print(f"{j:<4}", end='')
    print()
    space -= 1
View Code

第1行: 用input函數獲取用戶輸入的行數,int函數將其轉化為整型,並賦值給變量 n
第2行: 用assert斷言函數限定變量 n 大於0,若大於0,執行后面的代碼,否則報錯“AssertionError: 請輸入正整數!”
第4行: 創建一個空列表list1,用於完成整個序列的循環,輸出楊輝三角
第5行: 用for循環控制輸出的行數
第6行: 創建另一個空列表list2,用於存儲每一行的數值
第7-8行: 第一次循環i == 0,輸出楊輝三角第一行
第9-10行: 第二次循環i == 1,輸出楊輝三角第二行
第11-12行: 接着輸出楊輝三角的其他行,變量 j 表示一行中的每一個元素,用for循環遍歷每一行中的每一個元素
第13-14行: 每行首尾的數字都是1,輸出每行首尾的數字 1,添加到列表list2
第15-16行: 每行中間的各數都是它肩上兩個數的和,通過對雙重列表的索引,獲取中間這個數肩上的兩個數,求和后將其添加到列表list2

以楊輝三角第3行為例
第3次循環時,i == 2, list1 = [[1], [1, 1]]
求第3行中間的數 2 時, j 進行到第二次循環,j == 1
2 等於第2行兩個數值的和,即 list1中位置1的列表元素和,通過列表的索引,這兩個元素分別是(list1[i - 1][j - 1] 和 list1[i - 1][j]

第17行: 將列表list2添加到列表list1
第19行: 為使楊輝三角每一行的數值能居中排列,設置每一行第一個數值前的空格數,用len函數獲取list1最后一行的長度
第20行: 由於list1是二維列表,用for循環遍歷list1,循環變量 i 為一維列表,即楊輝三角每一行的數值列表
第21行: 每個數值之間間隔4個空格,每一行第一個元素前的空格數為space * 4 // 2, 用end將結果輸出到同一行
第22行: 在第19行for循環的基礎上,嵌套一個for循環,獲取楊輝三角每一行中的每一個元素
第23行: 每個數值之間間隔4個空格,用end將結果輸出到同一行
第24行: 一行輸出后,用print()換行輸出下一行
第25行: 由於第n行的數值比n-1行多1個,所以在一次循環后,space在原有基礎上減 1
運行結果如下圖所示:
16-1 楊輝三角

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM