【Python實作】直式與橫式九九乘法表|練習for迴圈

這篇要用 Python 實作九九乘法表,練習重點是 for 迴圈與巢狀迴圈。九九乘法表很適合初學者練習,因為它剛好需要「外層控制被乘數、內層控制乘數」。

📘 Python 實作|九九乘法表的寫法與解析

練習目的

這次的練習目標,是透過九九乘法表熟悉 for 迴圈,以及迴圈中再放一個迴圈的巢狀結構。

  • 練習使用 for 迴圈。
  • 練習使用 range() 產生數字範圍。
  • 練習巢狀迴圈的執行順序。
  • 練習使用 f-string 組合輸出文字。
  • 練習使用 end="\t" 製作橫式輸出。

關於 for 迴圈的基本觀念,可以參考: 【Python自學】for迴圈的基本觀念

🧭 題目說明

使用 Python 印出九九乘法表,範圍從 1 x 19 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 會依序變成 19

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,把 iji * 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 = 1j = 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

所以如果要印九九乘法表的 19,就要寫成 range(1, 10)

如果寫成 range(1, 9),只會產生 18,不會包含 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

留言

這個網誌中的熱門文章

麻將新手必看!不知道聽什麼牌怎麼辦?超多種實戰聽牌範例,教你怎麼判斷胡牌機會

麻將教學懶人包|從規則到牌理的完整觀念整理(附實戰心得)

【新訓入伍】義務役新兵必看!入伍報到必備清單整理|2026年更新