歡迎來到程式中的「條件選擇」!

你有沒有想過,電腦遊戲是怎樣知道你贏了,或者問答應用程式是如何判斷你的答案是對還是錯?電腦雖然不會讀心術,但它們可以運用條件選擇(Selection)來做決定!

在這一章,你將會學懂如何賦予程式做決定的能力。學會「條件選擇」後,你就可以製作好玩的問答遊戲、互動遊戲,甚至可以控制真實的電子裝置!一開始如果覺得有點難,千萬不要擔心——我們會一步一步為你拆解每個概念。


甚麼是條件選擇?

在電腦程式編寫中,條件選擇是一種程式結構。電腦會根據某個條件是真(true)還是假(false),從而決定執行哪一部分的程式碼。它控制著程式的「流程」,讓程式可以在不同的動作之間作出選擇。

生活中的好例子

在日常生活中,你其實不知不覺地一直在運用條件選擇!想像一下早上準備上學的情況:

如果(If)外面下雨,那麼(then)你就會穿上外套。
否則(Else)(如果沒有下雨),你就不會帶外套出門。

你的大腦會先檢查天氣狀況,然後作出選擇。完全一樣地,條件選擇讓電腦可以檢查特定情況,再決定下一步要做甚麼!

重點筆記

條件選擇的意思就是:根據決定的結果,來選擇執行哪一段程式碼。


甚麼是條件?

每個決定的核心,都有一個條件(Condition)。條件就是一個檢查或問題,而且只有兩個可能的結果:必定是真(true)或必定是假(false)

讓我們看看在圖像化編程工具(例如 Scratch)中常見的條件例子:

• \( \text{answer} = \text{"Paris"} \)(輸入的答案是否等於 "Paris"?)
碰到鼠標?(touching mouse-pointer?)(角色現在有沒有碰到鼠標?)
• \( \text{score} > 5 \)(得分是否大於 \(5\)?)

如果條件與實際情況相符,電腦就會判定為真(true);如果不相符,電腦就會判定為假(false)

你知不知道?

將條件與結果連結起來的語句,稱為條件陳述式(Conditional statement)

重點筆記

條件就是一項測試,其運算結果必定是真(true)假(false)


在程式碼中運用條件選擇的兩種方式

在像 Scratch 這類的積木式編程中,我們通常會使用兩大類積木來建立條件選擇。

1. 單分支條件選擇(如果... 那麼 / if... then

這個結構只有一條程式碼分支:

• 電腦會檢查條件。
• 如果條件為,電腦就會執行包在裡面的特別積木。
• 如果條件為,電腦就會完全跳過那些積木,繼續執行程式的其餘部分。

例子:
如果 \( \text{score} > 10 \) 那麼
    說出「你獲得額外獎勵星星!」

2. 雙分支條件選擇(如果... 那麼... 否則 / if... then... else

這個結構為電腦提供了兩條明確的路徑以供選擇:

• 如果條件為,電腦會執行緊接在那麼(then)下方的積木。
• 如果條件為,電腦會跳過第一部分,改為執行否則(else)下方的另一條分支。

例子:
如果 \( \text{answer} = \text{"Canberra"} \) 那麼
    說出「答對了!做得好!」
否則
    說出「很抱歉,答錯了。再試一次吧!」

重點筆記

只有一種結果時,使用 如果... 那麼(if... then);需要處理兩種不同的結果時,使用 如果... 那麼... 否則(if... then... else)


輸入、輸出與問答程式

在製作像問答比賽這類互動程式時,我們經常會用到條件選擇。要讓問答遊戲運作,我們需要透過條件選擇將輸入輸出連接起來:

輸入(Input):由使用者提供給程式的資料(例如在 Scratch 的「詢問 [ ] 並等待」積木中輸入回答)。電腦會將這段文字儲存在名為答案(answer)的內建特別積木中。
條件檢查(Selection Check):電腦會使用等於運算符號來檢查是否 \( \text{answer} = \text{correct value} \)。
輸出(Output):由電腦產生的動作或結果(例如彈出對話框說出「答對了!」、播放慶祝音效或切換造型)。

重點筆記

程式接收輸入,透過條件選擇進行測試,然後產生相應的輸出


運用分支演算法進行規劃

在開始在螢幕上拼砌積木之前,最好先規劃好你的想法。演算法(Algorithm)就是一組按部就班的步驟指令。

當演算法包含做決定的步驟時,我們稱之為分支演算法(Branching algorithm)。你可以運用以下工具繪製分支演算法:

決策樹(Decision trees):分成不同分支以顯示各條路徑的圖表。
流程圖(Flowcharts):用箭頭連接不同形狀的圖表,根據答案是「是」(真)還是「否」(假)來顯示控制流程。

先做好規劃,有助你在編寫程式碼之前及早發現邏輯錯誤!

重點筆記

分支演算法是一種將決策點和不同路徑圖像化呈現的計劃藍圖。


實體運算中的條件選擇

條件選擇不只局限於電腦螢幕上!我們亦可以使用 BBC micro:bitCrumble 控制器等微控制器,透過條件選擇來控制實體裝置。

在實體運算(Physical Computing)中:

輸入可以來自實體開關、按鈕或光線感應器。
條件選擇用來測試按鈕是否被按下(例如:如果按鈕 A 被按下)。
輸出會觸發實體動作,例如啟動馬達或點亮色彩繽紛的 LED 燈(Sparkles)。

重點筆記

微控制器運用條件選擇,將現實世界中的感應器輸入轉化為燈光和動作等實體輸出。


持續檢查的秘密

對初學編程的同學來說,其中一個最大的難題就是如何讓條件選擇在遊戲進行期間「持續」運作。

常見陷阱:單次檢查

如果你把 如果... 那麼(if... then) 積木直接接在「當綠旗被點擊」下方,電腦只會在剛開始的一瞬間檢查一次。即使你一秒後點擊滑鼠,也不會有任何反應,因為程式早已執行完畢了!

解決方法:循環(Loops)

要讓電腦在整個遊戲過程中不斷檢查條件,你必須把條件選擇積木放進重複無限次(forever)循環(或重複積木)內。這就等於告訴電腦:「請不停重複檢查這個條件,不要停下來!」

重點筆記

互動條件(例如檢查角色是否碰到某個物件)必須放在循環內,才能進行持續檢查。


常見錯誤與避免方法

如果程式沒有馬上成功運作,千萬不要灰心!找出並修正錯誤的過程稱為除錯(Debugging)。以下是四個要留意的常見陷阱:

1. 問答中的拼字必須完全一致:
電腦會尋找完全相同的文字。如果你的程式碼檢查的是 \( \text{answer} = \text{"London"} \),但使用者輸入了結尾帶有多餘空格的 "london " 或打錯成 "Lodon",條件都會判定為假(false)

2. 混淆順序(Sequence)與條件選擇(Selection):
請記住,在 如果... 那麼... 否則(if... then... else) 積木中,電腦絕對不會同時執行兩條分支。它只會根據條件是真還是假,選擇其中一條分支來執行。

3. 混淆重複(Repetition)與條件選擇(Selection):
如果 [條件] 那麼 只會作出一次選擇
重複直到 [條件] 則會建立一個循環,不斷重複執行指令,直到情況改變為止。

4. 跳過規劃階段:
未先設計分支演算法就直接開始編程,容易寫出雜亂又令人困惑的程式碼。動手編程前,記得先畫出你的決策流程!


快速複習清單

在開始下一個編程項目之前,先複習一下這些核心概念吧:

條件選擇讓電腦能夠作出決定並引導程式的流程。
條件是一項檢查,結果只有
如果... 那麼(if... then)建立單一分支;如果... 那麼... 否則(if... then... else)建立兩條替代分支。
• 問答程式結合了輸入(使用者輸入的文字)、條件選擇(檢查答案)和輸出(回饋反饋)。
• 在遊戲中需要持續檢查時,記得將條件選擇語句放在重複無限次循環內。