在 Python 程式設計中,流程控制 (flow control) 決定了程式碼執行的順序。透過流程控制,您可以讓程式根據不同的條件執行不同的程式碼區塊,或者重複執行某些程式碼區塊。Python 提供了三種主要的流程控制結構:
- if-else 條件判斷: 根據條件是否成立 (True 或 False) 來決定執行哪個程式碼區塊。
- for 迴圈: 重複執行程式碼區塊,通常用於遍歷 (iterate) 一個序列 (例如串列、元組、字串) 或產生一系列數字。
- while 迴圈: 當條件為真 (True) 時,重複執行程式碼區塊。
本文將詳細介紹這三種流程控制結構的用法,並提供豐富的範例程式碼。
1. if-else 條件判斷
if-else 語句用於根據條件的真假來執行不同的程式碼區塊。
基本語法:
if 條件:
# 如果條件為 True,執行這個程式碼區塊
# ...
else:
# 如果條件為 False,執行這個程式碼區塊
# ...
重要觀念
if
後面要加上條件 (通常是比較運算或邏輯運算)。- 條件後面的冒號 (
:
) 不能省略。 if
和else
下方的程式碼區塊必須縮排 (通常是 4 個空格)。else
是可選的 (可以只有if
,沒有else
)。
單向 if (只有 if):
age = 20
if age >= 18:
print("已成年")
雙向 if-else:
score = 75
if score >= 60:
print("及格")
else:
print("不及格")
多向 if-elif-else (巢狀 if):
score = 85
if score >= 90:
print("優秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("普通")
elif score >= 60:
print("及格")
else:
print("不及格")
注意事項:
elif
是 "else if" 的縮寫,可以用來檢查多個條件。elif
和else
都是可選的,但else
最多只能有一個,且必須放在最後面。- Python 沒有
switch-case
語句。
2. for 迴圈
for 迴圈用於重複執行程式碼區塊,通常用於遍歷序列 (例如串列、元組、字串、字典的key) 或產生一系列數字。
基本語法:
for 變數 in 可迭代物件:
# 對每個元素執行的程式碼區塊
# ...
遍歷串列 (list)、元組 (tuple)、字串 (string):
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print(fruit)
my_tuple = (1, 2, 3)
for num in my_tuple:
print(num)
message = "Hello"
for char in message:
print(char)
使用 range()
產生數字序列:
# range(start, stop, step)
# start: 起始值 (預設為 0)
# stop: 結束值 (不包含)
# step: 步長 (預設為 1)
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(1, 6): # 1, 2, 3, 4, 5
print(i)
for i in range(1, 10, 2): # 1, 3, 5, 7, 9
print(i)
for i in range(5, 0, -1): # 5,4,3,2,1
print(i)
搭配 enumerate()
取得索引:
fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits):
print(f"索引: {index}, 值: {fruit}")
搭配 zip()
同時迭代多個序列:
names = ['Alice', 'Bob', 'Charlie']
ages = [30, 25, 35]
for name, age in zip(names, ages):
print(f"{name} is {age} years old.")
注意事項:
- 如果在迴圈中修改正在迭代的串列,可能會導致不可預期的結果。如果需要修改,建議使用串列的拷貝或建立一個新的串列。
zip
以最短的iterable為主。
迭代字典
my_dict = {"a": 1, "b": 2, "c":3}
# 迭代 keys
for key in my_dict: # 預設是迭代 keys
print(key)
for key in my_dict.keys():
print(key)
# 迭代 values
for value in my_dict.values():
print(value)
# 迭代 items (key-value pairs)
for key, value in my_dict.items():
print(f"{key}: {value}")
3. while 迴圈
while 迴圈用於當條件為真 (True) 時,重複執行程式碼區塊。
基本語法:
while 條件:
# 當條件為 True 時,重複執行的程式碼區塊
# ...
count = 0
while count < 5:
print(count)
count += 1 # 重要:更新條件,避免無限迴圈
注意事項:
- 務必確保 while 迴圈的條件最終會變為
False
,否則會導致無限迴圈 (程式永遠不會停止)。
break
和 continue
break
: 立即跳出迴圈 (結束整個迴圈)。
continue
: 跳過本次迴圈的剩餘程式碼,直接進入下一次迴圈。
# break 範例
for i in range(10):
if i == 5:
break # 當 i 等於 5 時,跳出迴圈
print(i) # 0, 1, 2, 3, 4
# continue 範例
for i in range(5):
if i == 2:
continue # 當 i 等於 2 時,跳過本次迴圈
print(i) # 0, 1, 3, 4
else
子句 (for/while)
Python 的 for
和 while
迴圈可以有一個可選的 else
子句。 else
子句中的程式碼會在迴圈「正常結束」時執行 (也就是沒有遇到 break
語句)。
# for...else
for i in range(5):
if i == 10:
break
print(i)
else:
print("迴圈正常結束") # 會執行,因為沒有遇到 break
# while...else
count = 0
while count < 5:
if count == 7:
break
print(count)
count += 1
else:
print("迴圈正常結束") # 會執行,因為沒有遇到 break
使用情境:
else
子句常用於檢查迴圈是否「順利完成」(沒有被中斷)。
巢狀迴圈 (Nested Loops)
迴圈內可以包含另一個迴圈,稱為巢狀迴圈。 常見的應用是處理二維資料 (例如矩陣、表格)。
for i in range(3):
for j in range(2):
print(f"({i}, {j})")
# 輸出:
# (0, 0)
# (0, 1)
# (1, 0)
# (1, 1)
# (2, 0)
# (2, 1)
總結
Python 的流程控制結構 (if-else、for、while) 提供了強大的方式來控制程式碼的執行流程。 掌握這些結構的用法,並善用 break
、continue
和 else
子句,是 Python 程式設計的關鍵技能。