Selection Structures¶
Introduction¶
在我們人生中,我們會面臨很多選擇,會根據當下的情況,做出不同的決定,而程式也是一樣,我們可以根據不同的情況,執行不同的程式碼,這稱為選擇結構(Selection Structures),是流程控制的一種。
例如,我根據學測成績,來決定要填哪些志願,或是我根據天氣,來決定要不要帶傘。
if ... elif ... else¶
在往下之前,請你先回想 Operators - Comparison Operators 的內容,我們可以透過比較運算子來得到一個布林值,而 if
會根據 True
或 False
來決定是否執行某段程式碼。
我們先來看一個簡單的例子:
輸入一個整數,輸出他的絕對值。
Ivan Torrent - "1984" Lyrics Video
邏輯很簡單,如果輸入的數字小於零,那麼就將他放上負號。提醒你一下,這裡的 -
與 not
一樣,都是一元運算子,
在這個例子中,我們只有用到 if
,接著我們有請 else
登場。
請看下一個例子,輸入一個整數,判斷他是奇數還是偶數。
這裡我們用到了 else
,當 if
的條件不成立時,就會執行 else
的內容。
我們再來看更複雜的例子,輸入你的分數,輸出你的評價,因為有很多種評價,所以需要用到 elif
。
當 if
的條件不成立時,就會檢查下面 elif
的條件,如果 elif
的條件成立,就會執行 elif
的內容,如果目前的 elif
的條件不成立,就會檢查下一個 elif
的條件,如果所有的 elif
的條件都不成立,就會執行 else
的內容。
這樣講或許有點繞口,你可以看看下面的程式碼,應該就能理解了。
接下來給你一個可能會疑惑的例子:
input | |
---|---|
ouput | |
---|---|
你可能會覺得奇怪,為什麼輸入 90
會印出 D
,而不是 A
,這是因為 if
的條件成立時,就會執行 if
的內容,就不會檢查 elif
的條件了。
所以,你在撰寫條件式的時候,要注意順序,以及確保每個條件是否是互斥的。
這樣就不會有問題了,但是,當我輸入超過 100
的分數時,是會印出 F
的,你該怎麼解決呢?
Nested if¶
if
的內容可以是另一個 if
,這種結構稱為巢狀條件式(Nested if)。
舉一個例子,如果你有三個整數 a, b, c
,請你輸出最大的那個數字。
想法很簡單,先讓 a, b
進行比較,得到較大的那個數字,再讓 c
與 max_one
比較,得到最大的那個數字。
這裡偷偷告訴你一個神奇妙妙工具,max()
,他會找出括號內的東西中最大的那個數字。
input | |
---|---|
ouput | |
---|---|
match ... case¶
在 Python 3.10 中,新增了 match ... case
,但遺憾的是一些古老的 Online Judge 的 Python 版本太舊不能用,但我還是想介紹給你。
我們先來看一個在 if ... elif ... else
中的例子:
再來看看 match ... case
的版本:
是不是很簡潔呢?如果你有學過其他像是 C, C++, Java
等語言,你可能看過 switch .. case
,但是 match ... case
更強大!
關於 match ... case
我就介紹到這裡,更重要的是,你要知道 if ... elif ... else
的用法。
@EditTime : 2024-01-29 12:32
Practice¶
Itsa - [C_MM09-易] 計算 i 次方的值
Reference code
Itsa - [C_MM13-易] 停車費計算
Reference code
Itsa - [C_MM15-易] 判斷座標是否在正方形的範圍內
Reference code
Assignment¶
Itsa - [C_MM16-易] 判斷座標是否在圓形的範圍內
Itsa - [C_MM19-易] 電話費計算
Itsa - [C_MM24-易] 計算薪水
Itsa - [C_MM32-易] Armstrong數
Itsa - [C_MM35-易] 平、閏年判定
Itsa - [C_MM36-易] 季節判定
Itsa - [C_MM37-易] 判斷座標位於何處
Itsa - [C_MM38-易] 判斷3整數是否能構成三角形之三邊長
Itsa - [C_MM39-易] 判斷是何種三角形
Itsa - [C_MM46-易] 複數運算
Itsa - [C_AR36-易] 星座查詢
@EditTime : 2024-01-29 14:38