本文 AI 產出,尚未審核

Python 課程 – 運算子(Operators)

主題:比較運算子(== != > < >= <=


簡介

在程式語言中,比較運算子是最常用的工具之一,幾乎所有的條件判斷、迴圈控制與資料篩選都離不開它。
Python 以直覺且易讀的語法提供了六種基本的比較運算子:==(等於)、!=(不等於)、>(大於)、<(小於)、>=(大於等於)以及 <=(小於等於)。正確掌握這些運算子的行為,不僅能寫出正確的邏輯,更能避免常見的錯誤與效能問題。

本篇文章針對 初學者到中級開發者,從概念說明、實作範例、常見陷阱到最佳實踐,完整闡述比較運算子的使用方式,並提供實務上常見的應用情境,讓你在寫程式時能更得心應手。


核心概念

1. 基本比較運算子

運算子 語意 範例 結果
== 等於 5 == 5 True
!= 不等於 5 != 3 True
> 大於 7 > 4 True
< 小於 2 < 9 True
>= 大於等於 6 >= 6 True
<= 小於等於 3 <= 5 True

注意:比較運算子回傳的永遠是布林值 TrueFalse,而非數字 10(除非自行轉型)。


2. 物件比較的原則

Python 允許比較不同類型的物件,但 比較的意義必須明確

  • 數值類型int, float, bool)可以直接比較。
  • 字串 依照 Unicode 編碼逐字比較。
  • 容器類型list, tuple, dict)比較時會逐元素或鍵值對比。
  • 自訂類別 若未實作比較魔法方法(__eq____lt__…),比較會以 物件的身份(id) 為基礎,通常得到 False

3. 鏈式比較

Python 支援 鏈式比較,如 a < b < c,等價於 a < b and b < c,且只會 一次 評估中間變數 b,提升效能且語意更清晰。

age = 25
if 18 <= age <= 30:
    print("符合成年且在 18~30 歲之間")

程式碼範例

以下範例皆以 Python 為語言,使用 ```python 標記。

範例 1:基本比較與條件判斷

# 判斷使用者輸入的年齡是否符合投票資格(年滿 18 歲)
age = int(input("請輸入年齡: "))

if age >= 18:
    print("你可以投票!")
else:
    print("未達投票年齡")

說明>= 用於比較 age 是否 大於或等於 18,結果為布林值,直接供 if 判斷。


範例 2:字串比較與大小寫敏感

password = "OpenAI2025"

# 使用者輸入的密碼
user_input = input("請輸入密碼: ")

# 直接比較(大小寫必須完全相同)
if user_input == password:
    print("登入成功")
else:
    print("密碼錯誤")

提醒:字串比較是 大小寫敏感 的,若想忽略大小寫,可使用 .lower().casefold()


範例 3:列表(List)元素的比較

# 兩個排序好的列表
list_a = [1, 3, 5, 7]
list_b = [1, 3, 5, 9]

# 直接比較會逐元素比對,若任一位置不同則回傳 False
print(list_a == list_b)   # 輸出: False

# 想比較是否為「子集合」可使用 all() 搭配生成式
is_subset = all(item in list_b for item in list_a)
print(is_subset)          # 輸出: True

重點== 針對容器會檢查 長度與順序 是否完全相同。


範例 4:自訂類別的比較

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    # 定義等於運算子
    def __eq__(self, other):
        if not isinstance(other, Point):
            return NotImplemented
        return self.x == other.x and self.y == other.y

p1 = Point(2, 3)
p2 = Point(2, 3)
p3 = Point(5, 1)

print(p1 == p2)   # True,因為座標相同
print(p1 == p3)   # False

說明:若要讓自訂物件支援 ==,必須實作 __eq__ 方法;同理,<> 需要實作 __lt____gt__ 等。


範例 5:鏈式比較的實務應用

# 判斷一個數字是否在 0~100 之間(含端點),同時不是 50
num = int(input("請輸入一個整數: "))

if 0 <= num <= 100 and num != 50:
    print(f"{num} 符合條件")
else:
    print(f"{num} 不符合條件")

技巧:將條件寫成 0 <= num <= 100,比 num >= 0 and num <= 100 更簡潔且可避免重複計算。


常見陷阱與最佳實踐

陷阱 描述 解決方式
比較不同型別 1 == True 會回傳 True(因為 True 轉為 1 盡量在比較前顯式轉型或使用 isinstance 檢查型別
字串大小寫 "Python" == "python"False 比較前使用 .lower().casefold()
浮點數精度 0.1 + 0.2 == 0.3 會得到 False 使用 math.isclose() 或設定容差
使用 is vs == is 比較物件身份,== 比較值 只在需要檢查同一個物件(如 None)時使用 is
鏈式比較中的副作用 func() < 5 < func2() 會呼叫兩次函式 若函式有副作用,請先將結果存變數再比較

最佳實踐

  1. 保持型別一致:在比較前先確保兩側的型別相同,避免隱式轉型帶來的意外。
  2. 使用 in 取代多重 or:如 x == 1 or x == 2 or x == 3x in (1, 2, 3)
  3. 善用 any() / all():對容器內的多重條件判斷更具可讀性。
  4. 避免硬編碼:將比較值抽成常數或設定檔,提升維護性。
  5. 測試邊界值:特別是 >=<=,務必驗證等於端點的情況。

實際應用場景

  1. 表單驗證
    • 檢查使用者年齡、密碼長度、字元種類是否符合規範。
  2. 資料篩選
    • 在 Pandas、SQLAlchemy 等工具中,使用比較運算子建立過濾條件(如 df[df['score'] >= 80])。
  3. 遊戲開發
    • 判斷角色屬性是否達到升級門檻、碰撞盒是否相交(座標比較)。
  4. API 請求參數檢查
    • 確認分頁參數 page >= 1limit <= 100,防止惡意請求。
  5. 機器學習前處理
    • 把特徵值分箱(binning)時,用 <=> 劃分區間。

總結

比較運算子是 Python 程式設計的基礎且不可或缺 的工具。透過本文,你應已掌握:

  • 六大比較運算子的語意與回傳值。
  • 物件比較的原則與自訂類別的實作方式。
  • 鏈式比較的語法糖與效能優勢。
  • 常見的陷阱、最佳實踐以及實務應用情境。

在日常開發中,保持型別一致、善用鏈式比較與容器判斷,不僅能寫出更具可讀性與維護性的程式,也能減少潛在的錯誤。未來無論是寫簡單的條件判斷或是建構複雜的資料篩選邏輯,這些比較運算子都將是你最得力的助手。

祝你在 Python 的學習旅程中,比較順利、邏輯清晰! 🚀