iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
Python

從0開始學習Python-為未來學習AI奠定基礎系列 第 8

從0開始學習Python--- if 敘述的各種運用

  • 分享至 

  • xImage
  •  

if···elif···else 敘述

  • 有時需要在多個條件之間做選擇,此時 if···elif···else 結構就派上用場了!
    它會檢查多個條件,依據每個條件的結果,執行不同的程式碼區塊。語法如下:
if 條件一:
    程式碼區塊一
elif 條件二:
    程式碼區塊二
else:
    程式碼區塊三
  • 當條件判斷一為 True 時,將執行對應的程式碼區塊一,並結束條件判斷。
    若條件判斷一為 False,則繼續檢查條件判斷二。
    如果條件判斷二為 True,則執行程式碼區塊二,並結束判斷流程。
    如果所有條件都為 False,程式會繼續檢查下去,而 elif 判斷可以依需求增加更多條件。若所有條件都未滿足,最終將執行 else 中的程式碼區塊。
    下方的流程圖以兩個條件判斷為例,解釋這個 if...elif...else 的流程。
    https://ithelp.ithome.com.tw/upload/images/20240908/20168994426dkfwRwJ.png

if 敘述的綜合應用

將使用者輸入的整數轉成絕對值後輸出:

實作程式碼:
https://ithelp.ithome.com.tw/upload/images/20240907/201689945SiKcAoFjI.png

若輸入的數為正數,絕對值為本身,可以直接輸出;若輸入的數為負數,可用先前學過的 abs() 函數來求得負數的絕對值:

https://ithelp.ithome.com.tw/upload/images/20240907/20168994q5lddjysiU.png

設計一支能夠判斷輸入值是奇偶數的程式:

實作程式碼:
https://ithelp.ithome.com.tw/upload/images/20240907/20168994A0MDgcd81j.png

若某數除以2的餘數為0,則可被判斷為偶數;若餘數不為0,則可被判斷為奇數:

https://ithelp.ithome.com.tw/upload/images/20240907/201689947bhAYznrJ1.png

藉由上述的奇偶數特性,結合布林值的應用,餘數0的0會被視為False值,應被放在 else 的條件(此時為偶數);而餘數不為0則會被視為True值,應被放在 if 的條件(此時為奇數)。實作如下:

https://ithelp.ithome.com.tw/upload/images/20240908/20168994filzVYUlHr.png

輸出結果:

https://ithelp.ithome.com.tw/upload/images/20240908/20168994lUHDMx6uOG.png

測試某一年是否為閏年

條件一:可以被4整除。若條件一成立,還需要符合條件二:除以100時餘數不為0或除以400時餘數為0,兩個條件都符合才算是閏年。
以下是 20 世紀和 21 世紀所有閏年的表格:

20世紀閏年 21世紀閏年
1904 2000
1908 2004
1912 2008
1916 2012
1920 2016
1924 2020
1928 2024
1932 2028
1936 2032
1940 2036
1944 2040
1948 2044
1952 2048
1956 2052
1960 2056
1964 2060
1968 2064
1972 2068
1976 2072
1980 2076
1984 2080
1988 2084
1992 2088
1996 2092
2096

實作程式碼:

https://ithelp.ithome.com.tw/upload/images/20240908/2016899430uDuTV62w.png

題目寫得很清楚閏年的條件為何,第一個一定要遵守的規定是它是4的倍數,因此能理解為除以4的餘數為0。

第一個規定有遵守的話,按照題目需要再判斷是否不為100的倍數、或為400的倍數,若符合前述其中一種情況,則為閏年。需要注意的是還需要添加一個else條件,若它不符合[不為100的倍數、或為400的倍數]這個條件,比方說它為100的倍數,這樣就要輸出此年不為閏年。
我有因為忘記這個條件導致程式出現錯誤,所以需要特別注意所有可能發生的情況!

輸出結果:

https://ithelp.ithome.com.tw/upload/images/20240908/201689940y2pqnWWji.png

人體健康體重指數判斷程式

要求使用者輸入身高體重,然後計算BMI指數,並由BMI指數判斷體重是否正常。
(BMI = 體重(公斤) / 身高^2(公尺))

分類 BMI 範圍
體重過輕 BMI < 18.5
正常 18.5 <= BMI < 24
超重 24 <= BMI < 28
肥胖 BMI >= 28

實作程式碼:

https://ithelp.ithome.com.tw/upload/images/20240908/20168994WDBLsfSnUh.png

如果是要判斷是否正常,可以把條件分成正常和不正常。正常的情況只有一個,只需要查表確定範圍就好。不正常的情況是:體重過輕、超重、肥胖,但因為已經知道了正常的條件,所以不需要再把這三個不正常情況的範圍分別寫出來,僅需要當作正常條件的例外,放在else就可以輕鬆解決了!

輸出結果:

https://ithelp.ithome.com.tw/upload/images/20240908/201689945zfip6FP10.png

三角形的判斷:

讓使用者輸入三個邊長,判斷這三條邊是否能構成三角形。如果能,進一步判斷是正三角形、等腰三角形,還是一般三角形。(三角形成立的條件是任意兩邊之和大於第三邊。)

實作程式碼:

https://ithelp.ithome.com.tw/upload/images/20240908/20168994nHz7vBPuSV.png

這題主要是要判斷三邊是否能構成三角形的條件 該怎麼寫?因為三角形的成立條件是任意兩邊和>第三邊,所以要記得寫出a、b、c邊比大小的三種情況,我一開始只寫了 a + b > c 而已,導致後面判斷時會出現錯誤。

基於這個重點,等腰三角形也是需要寫三個條件的,同樣也是a、b、c邊兩腰互相等於的情況有三種,需要特別注意~

輸出結果:

https://ithelp.ithome.com.tw/upload/images/20240908/20168994ENaZgLhtn6.png

三數最大值和最小值:

讓使用者輸入三個數字,並找出這三個數中的最大值和最小值。
(不能使用內建的 max() 和 min() 函數。)

實作程式碼:

https://ithelp.ithome.com.tw/upload/images/20240908/20168994yUeRodMniy.png

這題我真的想很~~久,可能是因為它沒有題目上看起來得這麼簡單。最後我的方法是把條件
分為兩大部分,一個是找最大值、一個是找最小值。
首先是找最大值,從 a 開始,和 b、c 依序比大小,並且在條件裡面加入新的函數 max_val 來放入比大小勝出的數值。順序是 a、b 先比,再來比 a、c ,最後再比 b、c ,主要是需要思考 if 和 else 的條件要放什麼,而且所有情況都需要考慮到,經過比較過後是誰會被放到 max_val 裡,容易搞混,所以這時有體會到註解的重要性><

再來是找最小值,和找最大值的比較步驟一樣,是 a、b 先比,再來比 a、c ,最後再比 b、c ,因為在找最大數時試錯了好多遍,最後找出了不會出錯的方法,所以可以同樣套用在找最小值的判斷上,只需要把比較小的值放到 min_val 裡就好,是不是很簡單!不需要再用別的思路,只需要記得比大小的結果是選小的那個。

最後就會產生最大值 max_val 和最小值 min_val啦~然後再輸出就行了。

輸出結果:

https://ithelp.ithome.com.tw/upload/images/20240908/201689942Yc3AVGg00.png

結語

今天的話沒有學新的概念,倒是訓練了一波解題邏輯><
有別於平常用於理解概念的簡單練習題,為了更熟悉這種條件判斷的情境,今天選了書上的小專題來做。
我覺得每天的實作部分都特別有趣,不管是難度如何的題目。自己動腦寫完之後再透過文字紀錄學到的東西,
然後把自己寫的程式碼和執行結果截圖PO到網路上,因為會被其他讀者讀到所以感覺新奇又奇妙。
雖然我的學習進度很慢很慢,但每天都有更認識Python,之後應該也會保持這樣的步調(或速度更快一些)來學習,
希望我之後進入比較難的地方也可以學習的很順利!


上一篇
從0開始學習Python---關係運算子、if 條件判斷
下一篇
從0開始學習Python---串列(list)
系列文
從0開始學習Python-為未來學習AI奠定基礎27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言