在程式語言裡,對應到多重選擇路徑判斷的語法,
最通俗也最常見的就是if ... else ... 。
搭配幾個範例做說明,最後以一個經典的閏年判定最為結尾的Demo
若 條件成立 則 ... 否則 ... 的口語與邏輯表達
口語的說法
若 A 條件成立
則
....做A條件成立時要做的事情
否則
....A條件不成立時,要做的事情
對應的python語法
if 條件A:
...做A條件成立時要做的事情
else:
...A條件不成立時,要做的事情
範例1: 根据天氣做出行動
假如是晴天,則可以曬衣服。
否則,不是晴天,則只能用烘衣機。
對應的python程式碼如下
import random
# 初學者可先跳過隨機數產生的細節。
# 用隨機數來決定是否為晴天
is_sunny = ( random.random() > 0.5 )
print(f"是晴天嗎? {is_sunny}")
if is_sunny:
print("曬衣服")
else:
print("用烘衣機")
輸出結果(晴天, is_sunny=True)
是晴天嗎? True
曬衣服
輸出結果(不是晴天, is_sunny = False)
是晴天嗎? False
用烘衣機
若 A 則 ... 若 B 則 ... 否則 ... 的口語與邏輯表達
口語的說法
若 A 條件成立
....做A條件成立時要做的事情
若 B 條件成立
....做A條件成立時要做的事情
否則
....做A條件 與 B條件都不成立時,要做的事情
對應的python語法
if 條件A:
...做A條件成立時要做的事情
elif 條件B:
...做B條件成立時要做的事情
如果有好多個條件,可自行串接
else:
...A條件 和 B條件都不成立時,要做的事情
如果您以前學過C/C++ 請記得 python 的 else if 語法略有不同
C/C++ 的else if 在python 叫做 elif
範例2: 根据溫度做出行動
假如溫度是>38度C,則不要出門。
假如溫度是<=38度C 而且 溫度是>30度C,則出門要撐陽傘。
剩餘情況則正常穿搭。
對應的python程式碼如下
import random
# 初學者可先跳過隨機數產生的細節。
# 用隨機數來決定溫度
degree = int( 25 + ( random.random() ) * 20 )
print(f"溫度 {degree}度C")
if degree >= 38 :
print("不要出門")
elif degree >30:
print("出門要帶陽傘")
else:
print("正常穿搭")
輸出結果(溫度>38度C的情況)
溫度 40度C
不要出門
輸出結果( 38度C >= 溫度 >30度C 的情況)
溫度 36度C
出門要帶陽傘
輸出結果( 溫度 <= 30度C 的情況)
溫度 25度C
正常穿搭
if ... elif ... else ...可以多層嵌套組合
當條件比較複雜時,可以多層嵌套組合,表達不同的細部條件判斷。
我們可以結合剛剛範例1和範例2天氣和溫度的條件,做出更細緻的判斷。
範例3: 根据天氣和溫度,做出不同的行動
站在人的視角,假設下列情況以及判斷依據
假如是晴天
則可以先把衣服拿去曬。
假如溫度是>38度C,則不要出門。
假如溫度是<=38度C 而且 溫度是>30度C,則出門要撐陽傘。
剩餘情況則正常穿搭。
否則,不是晴天
只能用烘衣機。
不方便出門。
對應的python程式碼
import random
# 初學者可先跳過隨機數產生的細節。
# 用隨機數來決定是否為晴天
is_sunny = ( random.random() > 0.5 )
print(f"是晴天嗎? {is_sunny}")
# 初學者可先跳過隨機數產生的細節。
# 用隨機數來決定溫度
if is_sunny:
degree = int( 25 + ( random.random() ) * 20 )
else:
degree = int( 15 + ( random.random() ) * 15 )
print(f"溫度 {degree}度C")
if is_sunny:
print("先把衣服拿去曬")
if degree >= 38 :
print("不要出門")
elif degree >30:
print("出門要帶陽傘")
else:
print("正常穿搭")
else:
print("只能用烘衣機")
print("不方便出門")
輸出結果(晴天 而且 溫度32度C的情況)
是晴天嗎? True
溫度 32度C
先把衣服拿去曬
出門要帶陽傘
輸出結果(晴天 而且 溫度43度C的情況)
是晴天嗎? True
溫度 43度C
先把衣服拿去曬
不要出門
輸出結果(非晴天 而且 溫度26度C的情況)
是晴天嗎? False
溫度 26度C
只能用烘衣機
不方便出門
讀者可試著多執行幾次,觀察不同的隨機天氣與溫度對應到的邏輯判斷與輸出結果。
Demo: 判定是否為閏年
口語表達的規則:
若年份逢4的倍數,則通常是閏年,但是有兩個特殊情況要處理。
如果是世紀年(100的倍數),則不是閏年,例如1700, 1800, 1900不是閏年。
如果是世紀年(100的倍數)而且又是400的倍數,則又恢復成閏年,例如2000年是閏年。
剩下情況都不是閏年。
重新整理過的判斷規則(優先處理特殊情況):
如果是400年的倍數,則肯定是閏年。
如果不是400年的倍數,但是是100年的倍數(世紀年),則不是閏年。
如果不是上述兩種情況(不是400也不是100的倍數),但是是4的倍數,則肯定是閏年。
剩下情況都不是閏年。
怎麼判斷是某個數字k的倍數?
如果一個是數字num是k的倍數,那麼 num 除以k得到的餘數一定等於零。
%在python裡面就是對某個數字做除法取餘數的意思。
例如:
# python 程式碼範例
print( num % 400 == 0 )
假如 num % 400 == 0 成立,
代表num 除以400得到的餘數是0,所以num 是 400的倍數。
同理類推
# python 程式碼範例
print( num % 100 == 0 )
假如 num % 100 == 0 成立,
代表num 除以100得到的餘數是0,所以num 是 100的倍數。
# python 程式碼範例
print( num % 4 == 0 )
假如 num % 4 == 0 成立,
代表num 除以4得到的餘數是0,所以num 是 4的倍數。
對應的python程式碼(不只一種寫法,這邊只是提供一個解答參考)
def is_leapyear(year):
if year % 400 == 0:
# 400年的倍數,則肯定是閏年。
return True
elif year % 100 == 0:
# 不是400年的倍數,但是是100年的倍數(世紀年),則不是閏年。
return False
elif year % 4 == 0:
# 不是上述兩種情況(不是400也不是100的倍數),但是是4的倍數,則肯定是閏年。
return True
else:
# 剩下情況都不是閏年。
return False
def check(year):
if is_leapyear(year):
print(f"{year} is a leap year.")
else:
print(f"{year} is NOT a leap year.")
return
year = int(input("Enter a year: "))
check(year)
輸出結果(2000年)
Enter a year: 2000
2000 is a leap year.
輸出結果(1900年)
Enter a year: 1900
1900 is NOT a leap year.
輸出結果(1996年)
Enter a year: 1996
1996 is a leap year.
輸出結果(2001年)
Enter a year: 2001
2001 is NOT a leap year.
結語
其實if ... elif ... else ... 語法對應到的就是我們日常生活中的邏輯與條件判斷。
讀者可以試著從生活中的範例開始練習,先歸納定義出明確的規則,接著寫幾個小程式測試一下是否與預期中的執行結果相符合。