Python break 與 continue

breakcontinue 用來控制迴圈的執行流程。

break

break 用來立即跳出整個迴圈,不再執行剩餘的迭代:

for i in range(10):
    if i == 5:
        break
    print(i)

print("Loop ended")

輸出:

0
1
2
3
4
Loop ended

break 在 while 迴圈中

count = 0

while True:  # 無窮迴圈
    print(count)
    count += 1
    if count >= 5:
        break  # 跳出迴圈

print("Done")

輸出:

0
1
2
3
4
Done

break 在巢狀迴圈中

break 只會跳出最內層的迴圈:

for i in range(3):
    for j in range(3):
        if j == 2:
            break  # 只跳出內層迴圈
        print(f"({i}, {j})")
    print(f"End of inner loop for i={i}")

輸出:

(0, 0)
(0, 1)
End of inner loop for i=0
(1, 0)
(1, 1)
End of inner loop for i=1
(2, 0)
(2, 1)
End of inner loop for i=2

continue

continue 用來跳過當前這次迭代,直接進入下一次迭代:

for i in range(10):
    if i % 2 == 0:
        continue  # 跳過偶數
    print(i)

輸出:

1
3
5
7
9

continue 在 while 迴圈中

count = 0

while count < 10:
    count += 1
    if count % 2 == 0:
        continue  # 跳過偶數
    print(count)

輸出:

1
3
5
7
9

在 while 迴圈中使用 continue 時,要小心不要造成無窮迴圈:

# 錯誤示範 - 無窮迴圈!
count = 0
while count < 5:
    if count == 3:
        continue  # count 永遠是 3,無法繼續
    print(count)
    count += 1

正確做法

count = 0 while count < 5: count += 1 if count == 3: continue print(count)

break 和 continue 的比較

關鍵字作用
break完全跳出迴圈
continue跳過當前迭代,繼續下一次迭代
print("=== break ===")
for i in range(5):
    if i == 3:
        break
    print(i)
# 輸出: 0, 1, 2

print("=== continue ===")
for i in range(5):
    if i == 3:
        continue
    print(i)
# 輸出: 0, 1, 2, 4

實際範例

搜尋元素

numbers = [4, 7, 2, 9, 1, 8, 5]
target = 9

for i, num in enumerate(numbers):
    if num == target:
        print(f"Found {target} at index {i}")
        break
else:
    print(f"{target} not found")

過濾無效資料

data = ["apple", "", "banana", None, "orange", "", "grape"]
valid_items = []

for item in data:
    if not item:  # 跳過空值和 None
        continue
    valid_items.append(item)

print(valid_items)  # ['apple', 'banana', 'orange', 'grape']

驗證使用者輸入

while True:
    password = input("Enter password (at least 6 characters): ")
    
    if len(password) < 6:
        print("Password too short, try again.")
        continue
    
    if not any(c.isdigit() for c in password):
        print("Password must contain at least one digit.")
        continue
    
    print("Password accepted!")
    break

跳過特定檔案

files = ["data.csv", "readme.txt", ".gitignore", "script.py", ".env"]

for file in files:
    if file.startswith("."):  # 跳過隱藏檔案
        continue
    print(f"Processing {file}")

輸出:

Processing data.csv
Processing readme.txt
Processing script.py

找出第一個質數

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

numbers = [4, 6, 8, 9, 11, 12, 13, 14, 15]

for num in numbers:
    if is_prime(num):
        print(f"First prime found: {num}")
        break
else:
    print("No prime found")