CodeSprout程式萌芽

CHAPTER 02 · PYTHON FOUNDATIONS

IF 條件判斷式

讓程式依資料選擇要做的事,分清楚條件、順序與邊界。

這一章學會
  • 用比較結果作為 True/False 條件
  • 正確寫出 if/elif/else 與縮排
  • 組合 and/or/not,檢查臨界值
先預測結果,再看輸出。

這裡的範例是可在 Python 3 執行的獨立小程式;輸出框是預先核對的結果。題庫作答時,請保留題目提供的 solve 與參數,使用 return 交回答案。模組章的雙檔範例會另外標明操作方式。

01|條件先得到 True 或 False

條件判斷從比較開始:== 相等、!= 不相等、< 小於、> 大於,<= 與 >= 則包含邊界。比較式的結果是 bool,Python 再根據它決定是否執行一個區塊。

PYTHON程式碼
score = 60
print(score >= 60)
print(score > 60)
print(score == 60)
print(score != 60)
預期輸出
True
False
True
False

02|if 與 else:兩條路選一條

if 條件後面加冒號,下一行縮排四個空格。條件為真時執行 if 區塊;否則執行 else 區塊。else 不需要再寫條件。區塊結束後回到原本縮排,後面的程式會繼續執行。

PYTHON程式碼
score = 58
if score >= 60:
    print("達到目標")
else:
    print("再練習一次")
print("繼續前進")
預期輸出
再練習一次
繼續前進

03|elif:依順序找第一個符合的條件

多種情況可用 elif 串起來。一組 if/elif/else 只會執行第一個符合的分支。若條件是分數門檻,要先檢查較高門檻,否則 95 分可能先被 60 分的條件接走。

PYTHON程式碼
score = 85
if score >= 90:
    level = "A"
elif score >= 75:
    level = "B"
elif score >= 60:
    level = "C"
else:
    level = "再練習"
print(level)
預期輸出
B

04|and、or、not 組合條件

and 要兩邊都成立,or 至少一邊成立,not 把真假反過來。組合條件時先用括號把意思寫清楚。Python 會短路判斷:and 左邊已是假、或 or 左邊已是真時,不需要再算右邊。

  • 判斷 x 是 1 或 2,寫 x == 1 or x == 2,不能寫 x == 1 or 2。
  • 先把每個小條件說成一句完整的話,再用 and/or 串接。
PYTHON程式碼
age = 14
has_ticket = True
is_closed = False
allowed = (age >= 12 and has_ticket) and not is_closed
print(allowed)
print(age < 12 or age >= 65)
print(12 <= age <= 18)
預期輸出
True
False
True

05|包含與空資料的判斷

in 可以檢查資料是否出現在清單或文字中。空字串、空清單、0 與 None 在條件位置會被當成假;非空字串通常為真,因此文字 "False" 並不是布林 False。初學時用明確比較較容易看出意思。

PYTHON程式碼
colors = ["blue", "green"]
print("green" in colors)
print("red" not in colors)
text = ""
if len(text) == 0:
    print("目前沒有文字")
print(bool("False"))
預期輸出
True
True
目前沒有文字
True

06|先檢查危險條件,再做計算

把不能計算的情況先處理掉,常能讓程式更清楚。下例先檢查數量是否為 0,避免除以 0;return 也會結束目前這次函式呼叫,後面的計算就不會繼續。

PYTHON程式碼
def average(total, count):
    if count == 0:
        return 0
    return total / count

print(average(18, 3))
print(average(0, 0))
預期輸出
6.0
0

WHEN SOMETHING GOES WRONG

遇到錯誤,先檢查這裡

漏掉冒號或縮排不一致

if、elif、else 的標頭後都需要冒號;同一區塊用相同縮排。先對齊區塊,再看比較式。

門檻差了一個等號

至少 60 是 >= 60,超過 60 才是 > 60。用 59、60、61 三個測資確認邊界。

用 is 比較一般數值或文字

本章的值是否相等使用 ==。is 用來判斷是否為同一個物件,常見的入門用法是 value is None。

PAUSE AND TRY

先不要急著看別人的寫法

  1. 將分級範例的 score 改成 90、75、60、59,先找出會進入哪個分支。
  2. 分別寫出『有票且已開門』和『有票或有邀請函』的條件。
  3. 一個規則寫『10 到 20,包含兩端』,最少應測哪些邊界值?

先用紙筆預測,再改動範例中的數字或文字。結果與預期不同時,找出最早開始不同的那一步。

把這幾件事帶走

  • 條件必須表達你想檢查的完整事實。
  • elif 按順序執行,第一個符合就停止選分支。
  • 每次都測試門檻剛好相等的情況。

FROM READING TO PRACTICE

用三道免費題,練習本章觀念

先做簡單題確認語法,再把幾個步驟組合起來。三題都來自本章主題的新版免費題庫,難度表示需要組合的基本概念。

延伸閱讀:Python 官方文件

以下是本章查證使用的官方資料。可以先完成入門練習,再回來查閱更完整的參數與說明。