昨天我們認識了 for 迴圈的基本操作,像是用range()跑數字,或者用來遍歷清單。
但實際寫程式時,光有基礎還不夠。今天,我們要更進一步認識迴圈控制(break、continue、pass),
巢狀迴圈、讓你的 for 迴圈寫起來更靈活、更聰明!
因為真實世界的需求常常不是「從頭跑到尾」就好,
有時候我們需要 中途跳出,或者 跳過不想處理的項目,
甚至只是佔個位子,程式還沒寫好先「空轉」。
白話:只要遇到條件成立,就馬上停止這個迴圈,不管還有多少沒跑完。
for num in range(1, 11):
if num == 5:
print("遇到 5,直接離開迴圈!")
break
print(num)
1
2
3
4
遇到 5,直接離開迴圈!
白話:這一圈我不想做了,直接跳到下一次迴圈。
for num in range(1, 6):
if num == 3:
print("跳過 3!")
continue
print(num)
輸出:
1
2
跳過 3!
4
5
白話:當程式還沒想好要寫什麼,但語法上需要一個「東西」,就用 pass 佔位。
for num in range(1, 4):
if num == 2:
pass # 先不做事,避免程式報錯
print("現在處理數字:", num)
輸出:
現在處理數字: 1
現在處理數字: 2
現在處理數字: 3
break
可以直接把整個程式停掉,但其實它只會「跳出當前的圈」。for num in range(5):
if num == 2:
print("遇到 2,break!")
break
print("現在的數字:", num)
print("迴圈結束,程式還在繼續跑喔~")
輸出:
現在的數字: 0
現在的數字: 1
遇到 2,break!
迴圈結束,程式還在繼續跑喔~
可以看到break,只是跳出這個for迴圈,程式後面還是繼續執行迴圈。
如果你以為break會把整個程式關掉,就會大錯特錯!
2. 亂用 continue
:
有時候新手會在「錯的地方」放 continue
,導致某些程式碼永遠沒機會執行。來看下面這題!
假設要列出 0~4,每次都要印出數字,然後說它是偶數還是奇數。
#錯誤示範
for num in range(5):
if num % 2 == 0:
continue # 小明以為這樣是"偶數時直接跳過 if 判斷"
print(num, "是偶數")
輸出:
1 是偶數
3 是偶數
結果 continue
把「偶數情況下的 print()」整個跳過了,導致偶數完全沒被印出,程式邏輯跑偏。
以下是有關break/continue的一些例子!可以跟著slide的練習一起做做看,
一起思考!
medicine = ["退燒藥", "止痛藥", "感冒藥", "維他命"]
for item in medicine:
print("找到:", item)
if item == "感冒藥":
print("✔️ 找到了感冒藥,結束搜尋。")
break
首先,我們利用一個list去存四種藥品,再利用for-loop去判斷「感冒藥」
是否在list中,找到的話就結束搜尋。
這邊可以看到我把break放在這個位置是想讓程式找到感冒藥就立馬離開迴圈,
那你可以想想看,如果沒有break會發生什麼事情?
這
邊
是
為
了
不
讓
你
直
接
看
到
答
案
好!來看答案!跟你心中是不是想的一樣呢?
如果沒有break的話,程式就又會再度進入for迴圈把剩下的藥品尋找完~
medicine = ["維他命", "過期藥品", "止咳藥", "退熱貼"]
for item in medicine:
if item == "過期藥品":
print("⚠️ 發現過期藥,跳過!")
continue
print("✔️ 檢查藥品:", item)
這題我們是在檢查藥品!需要把過期藥品找出來,並且跳過它!
這邊一樣用了list去存藥品們,再利用for迴圈把過期藥品找出來!
如果發現過期藥品就print(”發現過期藥,跳過!”)
然後「繼續」檢查List剩下的藥品~
這邊一樣請讀者想想,如果把continue省略呢?結果會改變嗎?
好這次不賣關子!
答案如下:
有發現嗎,在過期藥品那邊,會兩邊都print!
medicine = ["維他命", "過期藥品", "止咳藥", "退熱貼"]
for item in medicine:
if item == "過期藥品":
print("⚠️ 發現過期藥,跳過!")
print("✔️ 檢查藥品:", item)
巢狀迴圈的意思就是迴圈裡面再包迴圈,就像迴圈的套娃。(一層層的感覺)
常用在「組合、排列」或是「處理二維資料」。
for a in range(1, 10): # 讓 a 從 1 執行到 9
for b in range(1, 10): # 讓 b 從 1 執行到 9
print(f'{a}x{b}={a*b}',end=' ')# 使用格式化字串,印出產生對應的字串,最後加上 end=' '表示不換行
print('')# 內層迴圈執行結束後,執行 print('') 會換行顯示
輸出:
接下來,我們來看一下實戰範例!
情境說明:
老師想要幫班上每個學生計算三科總分與平均分數,並判斷是否及格(平均 ≥ 60 分)。
我們會用:
list
存資料、input()
收成績、if/else
判斷及格與否# 範例:班級成績判斷系統
students = [] # 存放學生姓名
all_scores = [] # 存放每位學生的各科成績
all_status = [] # 存放每位學生的及格/不及格狀態
num_students = int(input("請輸入班上學生人數: "))
num_subjects = int(input("請輸入每位學生科目數: "))
for i in range(num_students):
name = input(f"請輸入第 {i+1} 位學生姓名: ")
students.append(name)
scores = []
for j in range(num_subjects):
score = int(input(f"輸入 {name} 第 {j+1} 科成績: "))
scores.append(score)
all_scores.append(scores)
# 計算平均
average = sum(scores) / num_subjects
# 判斷及格與否
if average >= 60:
status = "及格"
else:
status = "不及格"
all_status.append(status)
# 顯示結果
print("\n=== 成績總表 ===")
for i in range(num_students):
print(f"{students[i]} 的成績: {all_scores[i]}, 平均: {sum(all_scores[i])/num_subjects:.2f}, 狀態: {all_status[i]}")
輸出:
哇!是不是有點暈頭轉向呢!
讓我來好好解釋這段程式碼吧~
巢狀迴圈 (nested loop):
利用if/else判斷status:
status
。list 的運用:
students
存名字。all_scores
存每位學生的各科成績。all_status
存每位學生的及格/不及格狀態。利用 sum(scores)/num_subjects
計算平均。
print("=============================")
print("公告:2025 IThome鐵人競賽第12天")
print("=============================")
balance = 10000 # 初始餘額
options = ["查詢餘額", "領錢", "存錢", "結束交易"]
print("=== 歡迎使用ATM ===")
# 外層 for 控制「交易次數」(假設最多可以做 5 次交易)
for t in range(5):
print("\n請選擇服務:")
for i, opt in enumerate(options, 1):
print(f"{i}. {opt}")
choice = int(input("請輸入選項 (1-4): "))
if choice == 1: # 查詢餘額
print(f"💰 目前餘額:{balance} 元")
elif choice == 2: # 領錢
withdraw = int(input("請輸入提款金額:"))
if withdraw > balance:
print("⚠️ 餘額不足,交易取消")
continue # 直接跳過這次,回到選單
balance -= withdraw
print(f"✅ 成功領取 {withdraw} 元,目前餘額:{balance} 元")
elif choice == 3: # 存錢
deposit = int(input("請輸入存款金額:"))
balance += deposit
print(f"✅ 成功存入 {deposit} 元,目前餘額:{balance} 元")
elif choice == 4: # 結束交易
print("👋 感謝使用,本次交易結束!")
break # 跳出外層迴圈,結束程式
else:
print("⚠️ 無效的選項,請重新輸入")
這邊讀者不用擔心,我會分成不同區塊做詳細的解釋!
這樣就可以更仔細的了解每個部分的程式邏輯~一起來看看吧!
(1)初始化:
list
存放四個選項,方便後面自動列印。balance = 10000
options = ["查詢餘額", "領錢", "存錢", "結束交易"]
(2)外層 for 迴圈:
t
只是次數的計數器,不特別使用。for t in range(5):
(3)內層 for 迴圈:顯示選單
enumerate(options, 1)
會同時回傳 索引值(從 1 開始)+ 選項內容。(這邊先埋個enumerate伏筆)
1. 查詢餘額
、2. 領錢
...(4)輸入選項+判斷
choice = int(input("請輸入選項 (1-4): "))
使用者輸入數字 → 用 if/elif/else 進行判斷
(5)選項 1:查詢餘額
if choice == 1:
print(f"💰 目前餘額:{balance} 元")
直接顯示目前餘額
(6)選項2:提款
elif choice == 2:
withdraw = int(input("請輸入提款金額:"))
if withdraw > balance:
print("⚠️ 餘額不足,交易取消")
continue # 跳過這次,回到選單
balance -= withdraw
print(f"✅ 成功領取 {withdraw} 元,目前餘額:{balance} 元")
這邊假設我輸入要提款6000,就可以看到它顯示餘額剩下4000元!
這邊要來好好解釋一下!
withdraw
continue
回到選單(這次交易結束)。balance -= withdraw
,並印出新餘額。(7)選項3:存錢
elif choice == 3:
deposit = int(input("請輸入存款金額:"))
balance += deposit
print(f"✅ 成功存入 {deposit} 元,目前餘額:{balance} 元")
deposit
。balance += deposit
。
這邊可以看到如果我們要存5000元,他的結果會是剛剛的餘額4000再加上現在存入的5000會變上9000元。
(8)選項4:結束交易
elif choice == 4:
print("👋 感謝使用,本次交易結束!")
break
使用者選擇「結束」時,印出提示並 break 跳出外層迴圈,結束整個程式。
(9)選項錯誤處理
else:
print("⚠️ 無效的選項,請重新輸入")
使用者如果輸入不是 1–4,就會提示錯誤,重新回到迴圈。
哇哇哇!今天也是一場硬戰!!辛苦啦~
昨天本來規劃今天會一起介紹zip(),enumerate()~
結果!!!
在break,continue,pass,巢狀迴圈的部分直接一發不可收拾,越打越多!!
所以只好把zip(),enumerate()放到明天了~請各位讀者見諒!!
今天我們從 break、continue、pass 玩到 巢狀迴圈,
還寫了班級成績統計、ATM提款機這些小範例。
其實這些看起來小小的技巧,卻能讓程式變得更聰明、更貼近真實需求。
break
:遇到條件就「我先走啦!」continue
:這一圈不玩了,直接跳下一圈pass
:暫時空著,先佔位搭配巢狀迴圈,你就能處理更複雜的邏輯,不用再傻傻從頭跑到尾。
今天學完,你已經能開始掌握迴圈流程了!直接level up!
明天我們要挑戰一些更進階的小技巧,讓你的 for 迴圈更強大:
明天學完這些,你的迴圈功力就又升級啦!
那麼我們就明天見啦!!