這篇要用 Python 實作九九乘法表,練習重點是 for 迴圈與巢狀迴圈。九九乘法表很適合初學者練習,因為它剛好需要「外層控制被乘數、內層控制乘數」。
📘 Python 實作|九九乘法表的寫法與解析
練習目的
這次的練習目標,是透過九九乘法表熟悉 for 迴圈,以及迴圈中再放一個迴圈的巢狀結構。
-
練習使用 for 迴圈。
-
練習使用 range() 產生數字範圍。
-
練習巢狀迴圈的執行順序。
-
練習使用 f-string 組合輸出文字。
-
練習使用 end="\t" 製作橫式輸出。
關於 for 迴圈的基本觀念,可以參考:
【Python自學】for迴圈的基本觀念
🧭 題目說明
使用 Python 印出九九乘法表,範圍從 1 x 1 到 9 x 9。
這題會示範兩種寫法:
-
直式九九乘法表:每一個算式獨立印在一行。
-
橫式九九乘法表:同一個被乘數的算式排在同一列。
核心邏輯:
外層迴圈控制 i,也就是被乘數。
內層迴圈控制 j,也就是乘數。
每一次都印出 i x j = i*j。
🧪 寫法一:直式九九乘法表
第一種寫法會讓每一個乘法算式各自換行顯示。
# 程式開始
for i in range(1, 10): # 外層:控制「被乘數」
for j in range(1, 10): # 內層:控制「乘數」
print(f"{i} x {j} = {i * j}")
print() # 換行,讓每個 i 結束後空一行
# 程式結束
🖥️ 直式九九乘法表執行結果
執行後會從 1 x 1 一直印到 9 x 9。
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
🔎 直式九九乘法表程式說明
這段程式的核心是兩層 for 迴圈。外層控制 i,內層控制 j。
1. 外層迴圈:控制被乘數
for i in range(1, 10):
這裡的 i 會依序變成 1 到 9。
range(1, 10) 會產生:
1
2
3
4
5
6
7
8
9
所以外層迴圈負責控制九九乘法表中的第一個數字,也就是被乘數。
2. 內層迴圈:控制乘數
for j in range(1, 10):
當外層的 i 固定時,內層的 j 會從 1 跑到 9。
例如當 i = 1 時,內層會依序產生:
j = 1
j = 2
j = 3
...
j = 9
所以會印出:
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
...
1 x 9 = 9
3. 使用 f-string 印出算式
print(f"{i} x {j} = {i * j}")
這一行使用 f-string,把 i、j 和 i * j 組合成完整的乘法算式。
如果 i = 3,j = 4
print(f"{i} x {j} = {i * j}")
輸出:
3 x 4 = 12
4. 使用 print() 讓每組乘法表中間空一行
print()
當內層迴圈跑完後,代表某一個被乘數的 1~9 都已經印完。
這時候使用 print() 空一行,可以讓不同組的乘法表比較好閱讀。
💡 巢狀迴圈執行邏輯
巢狀迴圈最重要的觀念是:外層跑一次,內層會完整跑一輪。
當 i = 1 時,j 會從 1 跑到 9。
當 j 跑完後,外層才會進到 i = 2。
接著 j 又會重新從 1 跑到 9。
i = 1 → j = 1, 2, 3, 4, 5, 6, 7, 8, 9
i = 2 → j = 1, 2, 3, 4, 5, 6, 7, 8, 9
i = 3 → j = 1, 2, 3, 4, 5, 6, 7, 8, 9
...
i = 9 → j = 1, 2, 3, 4, 5, 6, 7, 8, 9
也就是說,外層 i 每變一次,內層 j 都會完整跑完一輪。
🧪 寫法二:橫式九九乘法表
第二種寫法會把同一個被乘數的算式排在同一列,讓整個九九乘法表看起來更像表格。
# 程式開始
for i in range(1, 10):
for j in range(1, 10):
print(f"{i} x {j} = {i * j:2}", end="\t") # 不換行,用 \t 對齊
print() # 每列結束後換行
# 程式結束
🖥️ 橫式九九乘法表執行結果
橫式版本會把同一個 i 的所有乘法結果排在同一行。
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 1 x 4 = 4 1 x 5 = 5 1 x 6 = 6 1 x 7 = 7 1 x 8 = 8 1 x 9 = 9
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 3 x 6 = 18 3 x 7 = 21 3 x 8 = 24 3 x 9 = 27
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20 4 x 6 = 24 4 x 7 = 28 4 x 8 = 32 4 x 9 = 36
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45
6 x 1 = 6 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36 6 x 7 = 42 6 x 8 = 48 6 x 9 = 54
7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63
8 x 1 = 8 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64 8 x 9 = 72
9 x 1 = 9 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81
🔎 橫式九九乘法表程式說明
橫式九九乘法表的邏輯和直式版本幾乎一樣,差別主要在 print() 的輸出方式。
1. 使用 end="\t" 讓結果不要換行
print(f"{i} x {j} = {i * j:2}", end="\t")
平常 print() 印完後會自動換行。
但這裡希望同一個 i 的算式都排在同一列,所以使用 end="\t"。
\t 是 tab,效果類似加入一段對齊用的空白距離。
end="\t" 的意思:
印完這個算式後,不要換行,
而是在後面加上一個 tab 空格。
2. 使用 :2 讓數字寬度比較整齊
{i * j:2}
這裡的 :2 是格式化語法,意思是讓輸出的數字至少佔 2 個字元寬度。
因為九九乘法表的結果有些是一位數,有些是兩位數,如果沒有做一點格式控制,畫面可能會比較不整齊。
例如:
1 x 1 = 1
1 x 9 = 9
2 x 5 = 10
9 x 9 = 81
一位數前面會多留一點空間,讓整體比較容易對齊。
3. 每列結束後使用 print() 換行
print()
當內層迴圈把 j = 1 到 j = 9 都印完後,就代表同一列已經完成。
接著用 print() 換到下一行,讓下一個 i 的乘法結果從新的一列開始。
🧭 執行流程整理
用表格整理九九乘法表的程式結構,會更容易看懂外層與內層迴圈各自負責什麼。
| 程式碼 |
負責內容 |
作用 |
| for i in range(1, 10) |
外層迴圈 |
控制被乘數,也就是每一組乘法表的開頭數字。 |
| for j in range(1, 10) |
內層迴圈 |
控制乘數,讓每個被乘數都乘上 1 到 9。 |
| i * j |
乘法運算 |
計算每一組乘法的結果。 |
| f"{i} x {j} = {i * j}" |
格式化輸出 |
把算式組成可讀性較高的文字。 |
| end="\t" |
橫式排版 |
讓同一列的算式不要換行,並用 tab 分隔。 |
| print() |
換行 |
每一組乘法表結束後,換到下一列。 |
💡 小補充:為什麼 range(1, 10) 只到 9?
Python 的 range() 有一個很重要的特性:包含起始值,但不包含結束值。
range(1, 10)
這段會產生:
1, 2, 3, 4, 5, 6, 7, 8, 9
所以如果要印九九乘法表的 1 到 9,就要寫成 range(1, 10)。
如果寫成 range(1, 9),只會產生 1 到 8,不會包含 9。
✅ 小結
九九乘法表是練習 for 迴圈和巢狀迴圈很經典的題目,因為它的結構很清楚:一個數字固定,另一個數字從 1 跑到 9。
-
外層迴圈:控制被乘數 i。
-
內層迴圈:控制乘數 j。
-
i * j:計算乘法結果。
-
f-string:把算式與結果組合成文字。
-
print():控制換行。
-
end="\t":讓橫式九九乘法表排在同一列。
-
:2:讓數字輸出寬度比較整齊。
簡單記法:
外層固定一個數字,內層從 1 跑到 9,每次印出 i x j 的結果。
外層 i = 1 → 內層 j 跑 1~9
外層 i = 2 → 內層 j 跑 1~9
...
外層 i = 9 → 內層 j 跑 1~9
留言
張貼留言