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
第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
運行結果如下圖所示:
