判斷 (if elif else)

判斷敍述 (if, elif, else)

1. 什麼是判斷敍述?

判斷敍述(Conditional Statements) 就是用來實現「決策」的語法。在 Python 中,我們主要使用 ifelifelse 這三個關鍵字來建構這些決策。

2. 核心基礎:布林值 (Boolean) 與運算子

語法:

if 布林值:
	若布林值為 True 要執行的程式碼

在深入 if 語法之前,必須先理解 Python 如何判斷「True」與「False」。

2.1 布林值 (Boolean)

Python 有一個專門的型別叫做布林 (Boolean),它只有兩個值:

  • True (真 / 是)
  • False (假 / 否)

if 敍述的核心就是去檢查一個 "值" 究竟是 True 還是 False

2.2 比較運算式

比較運算式的運算是 TrueFalse 的結果:

運算子意義範例結果
==等於5 == 5True
!=不等於5 != 3True
>大於5 > 3True
<小於5 < 3False
>=大於等於5 >= 5True
<=小於等於5 <= 3False

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 不只認識比較運式與邏輯運算式的TrueFalse。它會把某些值自動視為 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)來定義程式碼區塊。ifelifelse 下方的程式碼必須縮排,才代表它們屬於該條件。

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:如果 AFalse,Python 知道整個結果必定是 False,所以根本不會去檢查 B

A or B:如果 ATrue,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簡單二選一。

熟練這些判斷敍述的變化是學習程式設計的基石。請務必練習縮排的正確性,並嘗試使用不同的運算符號組合出你需要的條件。

留言

這個網誌中的熱門文章

目錄

Python IDLE 安裝與使用

Python 核心資料型態:數字、文字與邏輯