本文 AI 產出,尚未審核

Python 控制流程:if / elif / else 完全指南


簡介

在程式語言中,條件判斷是讓程式根據不同情況執行不同路徑的核心機制。Python 以其直觀、可讀性高的語法,讓 if / elif / else 成為新手第一個學會的控制結構。無論是檢查使用者輸入、決定程式流程,或是實作較複雜的商業規則,正確使用條件判斷都是不可或缺的基礎。

本篇文章將從 語法結構實作技巧常見陷阱 以及 實務應用 四個面向,深入探討 Python 的條件語句,幫助初學者快速上手,同時提供中級開發者可直接套用於專案的最佳實踐。


核心概念

1. 基本語法

if 條件式:
    # 當條件為 True 時執行的程式碼
    執行區塊
  • if 後面的 條件式 必須返回布林值 (True / False)。
  • 冒號 : 表示條件成立時要執行的 程式區塊,必須 縮排(建議 4 個空格)。

2. else:處理「其他」情況

if 條件式:
    執行區塊A
else:
    執行區塊B   # 當條件不成立時執行

else 永遠是 最後 的分支,沒有條件式,僅在前面的 ifFalse 時執行。

3. elif:多條件分支

if 條件式1:
    執行區塊1
elif 條件式2:
    執行區塊2
elif 條件式3:
    執行區塊3
else:
    執行區塊4
  • elifelse if 的縮寫)可以寫任意次數,讓程式在 多個互斥條件 中挑選第一個成立的分支。
  • 每個 elif 只會在前面的所有條件皆為 False 時才會被檢查。

4. 條件式的寫法

類型 範例 說明
比較運算子 a > bx == 10 ><>=<===!=
邏輯運算子 a > 0 and b < 5 andornot
成員測試 'admin' in roles innot in
空值測試 if value: 任何「空」的物件([]{}''0None)在布林環境下皆為 False

程式碼範例

範例 1:簡單的分數等級判斷

score = int(input("請輸入成績 (0~100):"))

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"你的等級是 {grade}")

說明:依序檢查分數區間,第一個符合的條件即決定 grade,其餘條件不再檢查,提升效能。


範例 2:使用 in 判斷使用者權限

user_role = "editor"

if user_role == "admin":
    print("你有全部權限")
elif user_role in ("editor", "author"):
    print("你可以編輯內容")
else:
    print("你只能檢視")

說明in 可直接檢查字串是否屬於指定集合,寫法比多個 or 更簡潔。


範例 3:結合 andor 的複雜條件

age = 25
has_id = True

if age >= 18 and has_id:
    print("可以進入酒吧")
elif age >= 18 and not has_id:
    print("需要出示身分證")
else:
    print("未滿法定年齡")

說明:利用 andnot 形成更細緻的判斷,避免寫成多層嵌套 if,提升可讀性。


範例 4:三元運算子(條件表達式)

num = -5
sign = "正數" if num > 0 else "負數" if num < 0 else "零"
print(f"{num} 是 {sign}")

說明:雖然不是 if / elif / else 區塊的寫法,但 Python 允許在單行內使用 條件表達式,適合簡短判斷。


範例 5:避免重複條件的寫法(使用字典映射)

day = "Saturday"

# 直接使用 if-elif-else
if day == "Monday":
    activity = "上班"
elif day == "Tuesday":
    activity = "上班"
# … 省略多餘的分支
else:
    activity = "休息"

# 改寫成字典映射
workdays = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}
activity = "上班" if day in workdays else "休息"
print(f"{day}:{activity}")

說明:當多個條件執行相同程式碼時,使用集合或字典可以大幅簡化 if 結構,減少維護成本。


常見陷阱與最佳實踐

陷阱 說明 改善方式
縮排錯誤 Python 完全依靠縮排決定程式區塊,混用 Tab 與空格會造成 IndentationError 統一使用 4 個空格,在 IDE 中設定自動轉換 Tab 為空格。
條件永遠為真/假 例如 if x = 5:(寫成賦值而非比較)或 if []:(空集合永為 False)。 使用比較運算子 ==!=,或先檢查變數是否為 None / 非空。
過度巢狀 多層 if 會讓程式難以閱讀。 可利用 早期返回 (return/break) 或 布林變數 把判斷抽離。
重複條件 多個 elif 檢查相同條件,浪費效能。 合併條件、使用集合或字典映射。
忘記 else 當所有 if/elif 都不成立時,程式可能無回應或拋出錯誤。 視需求加入 else,或在最後加上 raise ValueError("不支援的狀況")

最佳實踐

  1. 先寫最可能成立的條件if/elif 按機率排序,可減少不必要的比較。
  2. 保持條件簡潔:把複雜的判斷抽成函式或變數,提升可讀性。
  3. 使用 is 判斷單例:如 if obj is None:,比 == 更安全。
  4. 避免在條件裡執行副作用:條件式應只做判斷,相關的 I/O 或計算放在區塊內。
  5. 加入註解說明「為什麼」:特別是業務規則較複雜時,註解可防止未來誤改。

實際應用場景

場景 可能的 if / elif / else 實作
表單驗證 檢查必填欄位、格式正確性、字串長度,依不同錯誤類型回傳對應訊息。
API 回傳處理 根據 HTTP 狀態碼 (200, 404, 500…) 分別執行成功、未找到或錯誤重試的流程。
遊戲 AI 根據玩家位置、血量、時間等條件決定敵人的行動(攻擊、撤退、巡邏)。
資料清理 判斷欄位值是否為缺失、異常或正常,分別執行填補、剔除或保留。
多語系切換 依使用者的語言設定 (lang == "zh_TW""en"…) 載入不同的文字資源檔。

範例:簡易的 HTTP 狀態碼處理

status = 404

if status == 200:
    print("請求成功,處理回傳資料")
elif status == 404:
    print("資源未找到,請檢查 URL")
elif status == 500:
    print("伺服器錯誤,稍後再試")
else:
    print(f"未處理的狀態碼:{status}")

總結

  • if / elif / else 是 Python 中最基礎、也是最常用的 條件控制 結構。
  • 正確的 縮排布林運算條件順序 能讓程式既簡潔又高效。
  • 避免常見的縮排錯誤、冗餘條件與過度巢狀,採用 早期返回集合映射 等技巧,可提升可讀性與維護性。
  • 在實務開發中,從表單驗證到 API 錯誤處理,條件判斷無所不在,熟練掌握後即可快速構建可靠的業務邏輯。

掌握了 if / elif / else 的精髓,你就能在 Python 程式中自如地分支與決策,為接下來的迴圈、函式、類別等更高階的概念奠定堅實的基礎。祝你寫程式愉快,持續探索 Python 的無限可能!