New to Busy?

[DA series - Learn Python with Steem #03] 邏輯判斷

35 comments

deanliu
76
last yearSteemit

[DA series - Learn Python with Steem] 是DA(@deanliu & @antonsteemit)關於「從Python程式語言實做Steem區塊鏈的入門」的系列,歡迎趕緊入列學習!

前情提要:[DA series - Learn Python with Steem #02] 變數與資料型態

新的一週開始了!讓我們繼續學習吧!

第#03堂課,今天我們來看一個相對簡單但非常重要的主題:邏輯判斷 吧!

Python的 If Else 邏輯判斷

邏輯判斷可以說是程式語言最古老的基本成份,也是程式中非常常出現的語法。看懂了if else之後,加上我們之前對於變數的理解,看一個陌生的簡易程式碼已經可以理解五六成了。

其實我相信很多人看到If else這些英文字,就已經可以猜到大概的意義了。沒錯,正如他們的中文翻譯,if就是「如果」的意思:如果符合這個情況(邏輯判斷)就執行下列程式;而else則是跟隨在if後面的,代表不符合if的其他情況下,就執行這些程式。所以整個if else,可以翻譯成中文的「如果...否則...」

我現在舉一個非常簡單的例子,懂了之後再來看看一些比較細項的規定:

執行程式:python tutorial_3.py
Output: You are not overweight!

注:本篇教學的程式碼可至GitHub/tutorial_3.py中參考或下載。

在Python語言中,所有的判斷式都是用冒號(:)並且加上換行縮排來表示邏輯的上下關係。由上面的程式碼中可以看出,縮排的(按tab,相當於在段落前增加一個大空格)的 print('You are not overweighted!')是屬於 if的範圍,因此在 if成立時會被執行。
else會跟if在同樣的水平位置,在else:的下一行也是一排經過縮排的內容,表示else成立的話,要執行的範圍。

關於判斷式

放在 if後面的 BMI>24是一個 Expression,也就是一個會回傳「True or False」的式子。這裡的「大於小於」判斷很好理解,如果正確就回傳True、錯誤就回傳False。比較要注意的事,如果要判斷相等的話要使用==兩個等號,因為一個等號在程式中是賦值的意思,兩個等號才是一個會回傳True or False的Expression。

你可能會想說,上次學到的布林值不是也是True or False嗎?沒錯!所以可以在if 之類的地方放上以前學過的布林值。例如:

is_married = True
if is_married:
    print('You are married')
else:
    print('blah blah blah')

關於縮排

這些縮排的規定是非常重要的,因為python中沒有使用任何括號來把if 的範圍刮起來,python完全是透過換行以及縮排來判斷要怎麼執行程式。如果你的換行與縮排有錯誤的話,會讓程式不知道何者屬於if的範圍,或何者屬於else的範圍。例如下面就是一個錯誤例子:

錯誤代碼如下:

  File "tutorial_3.py", line 7
    else:
       ^
SyntaxError: invalid syntax

我們可以來練習怎麼讀這些錯誤。他告訴我們是在第七行的else出了問題,而他會跳出錯誤正是因為所有else出現前,都應該先有個同縮排等級的if。不然沒有「如果」哪來的「否則」阿?

如果你在執行程式的時候發現IndentationError的錯誤,很可能是因為每次縮排的方式不同。在python中,縮排不只水平距離看起來要一樣,若是用空白鍵按很多次按出來的,跟使用tab鍵一次跳一大步跳出來的,儘管肉眼看起來好像一樣,在程式編譯(執行前準備)也是會被擋下來的。

多重判斷

如果只有ifelse的話,我們要撰寫一個判斷BMI是否正常的程式需要「兩層的if-else」。因為在確定沒有過胖的情況下,還要在透過一次if - else 確定也沒有過瘦,才算正常。因此我們的完整邏輯判斷會變成:

執行結果:You are just fit!

不過這種多重判斷是很常遇到的,我們通常會有很多的這種非類的情況,例如:假設我們要區分一個數字是位於0~10, 11~20, 21~30, 31~40 哪一個區間,如果只用單純的if - else的話,就需要四層判斷。當然我們的python不會讓我們這麼累啦!所以就發明了 elif的語法,意思就是 Else if,中文可以翻譯為「若不是,那如果...」

例如上面的BMI例子,就可以透過elif改寫如下:

所以這個程式會先判斷我的BMI是否大於24,若是,則輸出「You are overweight!」。
若不是,那如果 BMI < 18,就輸出「You are underweight」。而最後剩餘的情況,也就是 BMI介於18~24之間,就是屬於正常。這樣寫是不是很簡單阿!

讓程式變有趣的小撇步

今天最後來教大家一個很好用的功能:讀取使用者輸入的函式:input()
我們剛剛那些變數:my_weightmy_height都是在程式碼內自行輸入指定的,每次要測試不同的身高體重就要重新更改程式碼,要是可以在執行的時候手動輸入想要查詢的值就好了!因此有了input()這樣一個方便好用的函式。使用方式如下:

input()裡面放的字串是我們想要顯示在command line上的提示字元,在這裡就是詢問使用者,你的身高及體重為何。輸入完成後,這兩個值分別被存到my_height以及my_weight裡面。
但要注意的是,input()所讀進來的變數型態為字串,還記得我們前面說過,字串的加減乘除跟數字是不一樣的,其中乘法就會出錯。因此我們在使用這兩個變數計算BMI前,要把他們的資料型態由「字串」轉為「數字」。Python中我們可以直接用float(x)把一個x轉成 「有小數點的數字」,或是用int(x)把x轉成「正整數」。我們這裡兩個都是可以輸入小數點的,因此選擇用float()把讀到的字串轉成 float(這種有小數點的數字稱為浮點數)

執行結果如下:

是不是程式都變好玩了呀!

如你所見,input()可以幫助我們設計很多跟使用者互動的界面,大家也可以試著自己做做看一些簡單的「輸入並判斷」程式囉!

Homework time:練習題!

從這章節開始,我們都在文末來指派個小小練習題好啦!讓大家自己建立一點成就感。今天小小的練習題:

利用If-Else Statement,設計一個程式 要求使用者輸入三個數字,最後印出最大值:

範例輸入與輸出

參考解答:GitHub/@antoncoding

我們下篇文章再見囉~下課!

class-377117_1280.jpg
image - pixabay

Comments

Sort byBest