介紹條件控制流程,包含組成它的比較運算子、條件運算式、條件語句。
繼講解完邏輯運算之後,我們終於要開始認識控制流程的其中之一:條件(Condition)。
如同在程式的邏輯思維中介紹到的,我們需要決定問題為 True 需要執行什麼,反之又要執行什麼。這些路徑的選擇便是由條件控制流程所實現。
下面我會先介紹條件運算,包括很常見的比較運算子。接著再進入到 Python 的條件控制流程語法,另外會補充說明運算式(Expressions)與語句(Statements)的差別。
如果您沒有閱讀過上一篇,或是忘記上次的內容,可以先回顧一下: 【程式教學 Programming Tutorials】Python 的邏輯運算
條件運算式 Conditional Expressions
條件運算式出來的結果與邏輯運算式一樣會是布林值(True or False),那要如何結果才會是 True 呢?顧名思義,是要符合某個條件。
算式運算式有數學運算子、邏輯運算式有邏輯運算子.條件運算式會有配合的運算子嗎?當然有!
比較運算子 Comparison Operators
在 Python 當中有以下幾種比較運算子:
==
:是否等於
- 請注意!在多數程式語言中,
==
才是符合我們一般認知的「等於」,而=
則是一種指派運算子(Assignment Operators),意即把 A 賦值給 B。
!=
:是否不等於
>
:是否大於
<
:是否小於
>=
:是否大於等於
<=
:是否大於等於
條件運算式 Conditional Expressions
再重複一次,條件運算式出來的結果與邏輯運算式一樣會是布林值(True or False)。
再者,條件運算式與邏輯運算式常常合併一起用,最常見就是好幾個條件運算式,用邏輯運算子連起來,例如:(a >= b) and (a > 0)
。
提醒一下,不要忘了在上一篇邏輯運算當中有介紹到,Python 有短路運算(Short-Circuit)的設計。
and
:只要檢查到有一個條件為 False,整個運算式便結束。or
:只要檢查到有一個條件為 True,整個運算式便結束。
條件語句 Control Statements
不用想得很困難,其實條件語句就是一種句子,一種達到條件控制的句子。
給他的材料就是:條件控制語法(Syntax) + 條件運算式。
接下來我會介紹 Python 當中條件控制的語句。
運算式 Expressions vs. 語句 Statements
怕有人混淆了,這裡補充一下運算式與語句的差別。
- 運算式:會產出一個結果值出來。
- 語句:發生一件事情,不一定有產出。
if
語句
直接上例子,今天你下單做多單,假如到達止損點要出場了,要怎麼表達?
if price <= stop_point:
end_order()
...
...
...
先不管出場這個動作怎麼寫(這裡先用 end_order()
表達),我們要檢查價格的條件運算是就是:price <= stop_point
。
而 Python 的 if
語句語法就是一個 if
後面接你的條件運算式,要記得在最後面加上一個 :
。
再來要介紹一個觀念為 Block。程式撰寫過程中,常常用一塊一塊的 Block 區隔語句結構。在 Python 裡面,Block 是透過縮排達成,個人是習慣用 4 個空白格當作縮排。要注意,Tab 與 Space 的空白是不一樣的,但為了方便快速,你可以在你的編輯器設定裡面,將 Tab 鍵設定為等於 4 個 Space 的空白。
當檢查完接在 if 後面的條件運算式之後,如果為 True 就會進入屬於 if 的 block 執行裡面的程式碼。直接完畢就是結束這個 block,繼續執行在 if 語句後面的程式碼。
畫成流程圖會像以下這樣:
if-else
語句
比起 if
語句,if else 是多一個 else
的 Block,也就是當你的條件運算式為 False 的時候要做什麼。
if price <= stop_point:
end_order()
...
...
else:
...
...
...
一樣要記得縮排還有加上 :
。
if-elif-else
語句
如果你有多種條件要判斷,你可以使用 if-elif-else 語句。
除了一樣要注意縮排跟加上 :
之外,要注意你撰寫的邏輯,因為它會依序往下判斷,所以常常發生一個邏輯錯誤是:你心中想的是,假如同時有兩個條件運算式正確時,你需要它做不同的事情,但它卻因為已經在前面其中一個運算式是 True
了,而直接執行那個 Block 了。這時程式不會顯示錯誤,但實際上已經造成邏輯錯誤。所以當你有這樣的需求時,應該將兩個條件同時判斷,而且要放在更前面進行判斷。
if 優先級比較高的條件判斷式:
...
...
elif 優先級第二高的條件判斷式:
...
...
elif 優先級第三高的條件判斷式:
...
...
# ...(看你需要幾個 elif)...
else: # else 不是必須的,看需求
...
...
PS. #
是 Python 當中寫註解(Comments)的語法,接在 #
的字是寫給人看的,程式不會去執行。強烈建議,寫程式要習慣寫註解,有助於提醒自己以及團隊合作。
match-case
語句
在 Python 新的 3.10 版本裡面(如果你的版本不是 3.10 以上,你寫不出這個語句),出現新的條件控制語句,如果你有寫過其他程式語言,認識過 switch-case 語句的話,在 Python 裡面就是叫做 match-case 語句。
它與上一個 if-elif-else 有很像的功能,只是不用每次都寫一遍條件運算式,當找到某一個 case 是符合的值的時候,才會是 True。
match 要比對的值:
case 第一個選項值:
...
...
case 第二個選項值:
...
...
case 第三個選項值:
...
...
# ...(看你需要幾個 case)...
case _:
如果上面的 case 都失敗,就會做這個 block
後集待續與結語
介紹完條件控制的語句後,下次可以來介紹迴圈了。
其實語法的部分不會太困難,但寫條件控制語句最考驗的是你安排優先級的順序。
後續: