判斷 (if elif else)
判斷敍述 (if, elif, else)
1. 什麼是判斷敍述?
判斷敍述(Conditional Statements) 就是用來實現「決策」的語法。在 Python 中,我們主要使用 if、elif 和 else 這三個關鍵字來建構這些決策。
2. 核心基礎:布林值 (Boolean) 與運算子
語法:
if 布林值:
若布林值為 True 要執行的程式碼
在深入 if 語法之前,必須先理解 Python 如何判斷「True」與「False」。
2.1 布林值 (Boolean)
Python 有一個專門的型別叫做布林 (Boolean),它只有兩個值:
True(真 / 是)False(假 / 否)
if 敍述的核心就是去檢查一個 "值" 究竟是 True 還是 False。
2.2 比較運算式
比較運算式的運算是 True 或 False 的結果:
| 運算子 | 意義 | 範例 | 結果 |
|---|---|---|---|
== | 等於 | 5 == 5 | True |
!= | 不等於 | 5 != 3 | True |
> | 大於 | 5 > 3 | True |
< | 小於 | 5 < 3 | False |
>= | 大於等於 | 5 >= 5 | True |
<= | 小於等於 | 5 <= 3 | False |
2.3 邏輯運算式
當我們有多個比較運算式需要組合時,會使用邏輯運算子:
| 運算子 | 意義 | 範例 | 結果 |
|---|---|---|---|
and | 且 (兩邊都必須是 True) | (5 > 3) and (2 < 4) | True |
or | 或 (至少一邊是 True) | (5 > 3) or (2 > 4) | True |
not | 非 (反轉結果) | not (5 > 3) | False |
2.4 "Truthy" 與 "Falsy"
在 Python 中,if 不只認識比較運式與邏輯運算式的True 和 False。它會把某些值自動視為 False(稱為 "Falsy"),而把其他幾乎所有值都視為 True(稱為 "Truthy")。
Falsy (被視為 False) 的值:
None(空值)0(整數零),0.0(浮點數零)""(空字串),[](空list),{}(空dict),()(空tuple)
範例:
my_list = []
if my_list: # 這裡 my_list 是 Falsy,等同 if False
print("串列不是空的")
else:
print("串列是空的")
# 輸出: 串列是空的
3. 判斷敍述的各種變化
重要提示: Python 依靠縮排(Indentation)(Tab)來定義程式碼區塊。if、elif、else 下方的程式碼必須縮排,才代表它們屬於該條件。
3.1 變化一: if (單一條件)
如果...就...。當你「只需要在特定條件下才執行某件事,否則什麼都不做」。
score = 75
if score >= 60:
print("恭喜你,及格了!") # 條件成立,會執行
print("測驗結束。") # 無論是否及格,都會執行
練習 3.1.1 比較大的值
給定 2 個整數值, 輸出比較大的值。 例 1 輸入:3 5輸出:5例 2 輸入:-3 5輸出:5例 3 輸入:3 -5輸出:3
練習 3.1.2 最大值
給定 3 個整數值, 輸出最大值。 例 1 輸入:3 5 7輸出:7例 2 輸入:-3 5 -7輸出:5例 3 輸入:3 -5 -7輸出:3
練習 3.1.3 第幾個值最大
給定 3 個整數值, 輸出第幾個值最大。 例 1 輸入:3 5 7輸出:3說明: 第 3 個值最大 例 2 輸入:-3 5 -7輸出:2例 3 輸入:3 -5 -7輸出:1
練習 3.1.4 第幾個值最大, 該值為多少
給定 3 個整數值, 輸出第幾個值最大, 該值為多少。輸出的 2 個值用空格間隔。 例 1 輸入:3 5 7輸出:3 7說明: 第 3 個值最大, 該值為 7 例 2 輸入:-3 5 -7輸出:2 5例 3 輸入:3 -5 -7輸出:1 3
練習 3.1.5 第二大值
給定 3 個整數值, 輸出第二大值。 例 1 輸入:3 5 7輸出:5例 2 輸入:-3 5 -7輸出:-3例 3 輸入:3 -5 -7輸出:-5
3.2 變化二: if...else (二選一)
如果...就...,否則...。當你有兩段程式碼,其中一段一定要執行。不可以都執行,也不可以都不執行。
score = int(input())
isPass = False
if score >= 60:
isPass = True
if isPass:
print( "及格")
else:
print( "不及格")
3.3 變化三: if...elif...else (多選一)
如果...就...;要不然如果...就...;否則...。當你有 2 段以上的程式碼,只有其中一段要執行或全部不執行時。
score = int(input())
grade = ""
if score >= 90:
grade = "A"
elif score >= 80: # 來到這裡,隱含了 score < 90
grade = "B"
elif score >= 70: # 來到這裡,隱含了 score < 80
grade = "C"
elif score >= 60: # 來到這裡,隱含了 score < 70
grade = "D"
else: # 來到這裡,隱含了 score < 60
grade = "F"
print(score,"->",grade,sep=" ")
# 若輸入: 85, 輸出: 85 -> B。
score = int(input())
grade = "F"
if score >= 90:
grade = "A"
elif score >= 80: # 來到這裡,隱含了 score < 90
grade = "B"
elif score >= 70: # 來到這裡,隱含了 score < 80
grade = "C"
elif score >= 60: # 來到這裡,隱含了 score < 70
grade = "D"
print(score,"->",grade,sep=" ")
# 若輸入 85, 輸出: 85 -> B。
練習 3.3.1 奇數,偶數,零
給定 1 個整數,判斷此整數是奇數、偶數或零。若是奇數輸出 Odd,若是偶數輸出 Even,若是 0 輸出 Zero。 例 1 輸入:5輸出:Odd例 2 輸入:8輸出:Even例 3 輸入0輸出Zero
練習 3.3.2 奬金計算
大笨公司要發奬金,奬金發放方式為:奬金基數 * 年度營業額等級倍數。 年度營業額等級倍數表: 年度營業額 等級倍數 50000~ 6 10000~50000 5 5000~9999 4 2000~4999 3 1000~1999 2 0~999 1 給定 2 個整數,第 1 個整數為奬金基數,第 2 個整數為個人年度營業額,計算並輸出奬金。 例 1 輸入:5000 2500輸出:15000說明: 奬金基數為 5000, 個人年度營業額為 2500, 等級倍數為 3 奬金:5000 * 3 = 15000例 2 輸入:8000 60000輸出:48000例 3 輸入:6000 800輸出:6000
3.4 變化四: 巢狀 if (Nested if)
在一個 if 區塊中,再放入另一個 if 結構。
userName = input()
password = input()
if userName == "abcd" and password == "1234":
print("歡迎光臨!")
else :
print("使用者名稱不存在或密碼錯誤。")
userName = input()
password = input()
if userName == "abcd" and password == "1234":
print("歡迎光臨!")
elif userName == "abcd" and password != "1234":
print("密碼錯誤。")
elif userName != "abcd" :
print("使用者名稱不存在。")
userName = input()
password = input()
if userName == "abcd":
# 只有在使用者名稱正確時,才需要檢查密碼
if password == "1234":
print("歡迎光臨!")
else:
print("密碼錯誤!")
else:
print("使用者名稱不存在。")
3.5 變化五: 單行 if else
這是一種單行的 if else 寫法。
score = 80
#兩件事執行其中一件
print("及格") if score >= 60 else print("不及格")# 輸出: 及格
# 取兩個數中的其中一個
a = 10
b = 20
max_val = a if a > b else b
print(max_val) # 輸出: 20
4. and, or 的短程 (Short-Circuit) 特性
A and B:如果 A 是 False,Python 知道整個結果必定是 False,所以根本不會去檢查 B。
A or B:如果 A 是 True,Python 知道整個結果必定是 True,所以根本不會去檢查 B。
這個特性對於避免錯誤非常有用,特別是當後面的條件依賴於前面的條件時。
x = 0
y = 10
# 利用短程避免「除以零」的錯誤
if (x != 0) and (10 / x > 5):
# 因為 x != 0 是 False,Python 不會去執行 (10 / x > 5)
print("x 不是 0 且結果大於 5")
else:
print("x 是 0 或是結果不大於 5")
# 輸出: x 是 0 或是結果不大於 5
5. 總結
| 語法結構 | 使用時機 |
|---|---|
if | 單一條件:如果...就...。 |
if...else | 二選一:如果...就...,否則...。 |
if...elif...else | 多選一(互斥):分情況討論。 |
巢狀 if | 階層式判斷:先判斷外部,再判斷內部。 |
valA if cond else valB | 簡單二選一。 |
熟練這些判斷敍述的變化是學習程式設計的基石。請務必練習縮排的正確性,並嘗試使用不同的運算符號組合出你需要的條件。



留言
張貼留言