2024-08-11|閱讀時間 ‧ 約 10 分鐘

📆從 閏年判斷 學 Python 的 if ... else ... 語法


在程式語言裡,對應到多重選擇路徑判斷的語法,
最通俗也最常見的就是if ... else ... 。

今天,我們將從最基本的 若A條件成立 則...否則 ... 的 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 ... 語法對應到的就是我們日常生活中的邏輯與條件判斷

讀者可以試著從生活中的範例開始練習,先歸納定義出明確的規則,接著寫幾個小程式測試一下是否與預期中的執行結果相符合。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.