在程式語言裡,對應到多重選擇路徑判斷的語法,
最通俗也最常見的就是if ... else ... 。
今天,我們將從最基本的 若A條件成立 則...否則 ... 的 if ... else ...開始講起,
搭配幾個範例做說明,最後以一個經典的閏年判定最為結尾的Demo
口語的說法
若 A 條件成立
則
....做A條件成立時要做的事情
否則
....A條件不成立時,要做的事情
if 條件A:
...做A條件成立時要做的事情
else:
...A條件不成立時,要做的事情
假如是晴天,則可以曬衣服。
否則,不是晴天,則只能用烘衣機。
對應的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 條件成立
....做A條件成立時要做的事情
若 B 條件成立
....做A條件成立時要做的事情
否則
....做A條件 與 B條件都不成立時,要做的事情
if 條件A:
...做A條件成立時要做的事情
elif 條件B:
...做B條件成立時要做的事情
如果有好多個條件,可自行串接
else:
...A條件 和 B條件都不成立時,要做的事情
如果您以前學過C/C++ 請記得 python 的 else if 語法略有不同
C/C++ 的else if 在python 叫做 elif
假如溫度是>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
正常穿搭
當條件比較複雜時,可以多層嵌套組合,表達不同的細部條件判斷。
我們可以結合剛剛範例1和範例2天氣和溫度的條件,做出更細緻的判斷。
站在人的視角,假設下列情況以及判斷依據
假如是晴天
則可以先把衣服拿去曬。
假如溫度是>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
只能用烘衣機
不方便出門
讀者可試著多執行幾次,觀察不同的隨機天氣與溫度對應到的邏輯判斷與輸出結果。
若年份逢4的倍數,則通常是閏年,但是有兩個特殊情況要處理。
如果是世紀年(100的倍數),則不是閏年,例如1700, 1800, 1900不是閏年。
如果是世紀年(100的倍數)而且又是400的倍數,則又恢復成閏年,例如2000年是閏年。
剩下情況都不是閏年。
如果是400年的倍數,則肯定是閏年。
如果不是400年的倍數,但是是100年的倍數(世紀年),則不是閏年。
如果不是上述兩種情況(不是400也不是100的倍數),但是是4的倍數,則肯定是閏年。
剩下情況都不是閏年。
如果一個是數字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的倍數。
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 ... 語法對應到的就是我們日常生活中的邏輯與條件判斷。
讀者可以試著從生活中的範例開始練習,先歸納定義出明確的規則,接著寫幾個小程式測試一下是否與預期中的執行結果相符合。