歡迎來到 Python 編程世界!

你有沒有想過,電子遊戲是怎樣知道何時給你加分,或者手機應用程式(App)是如何做出決定的?電腦的運算速度快得驚人,但它們本身並不聰明。它們需要我們用一種它們能聽懂的語言,給出清晰、按部就班的指令。在這一章中,我們將會學習如何使用一種名為 Python 的文字式程式語言來編寫程式。

世界上每一個電腦程式——由簡單的計算機到龐大的電子遊戲——都是由三大核心結構建立而成的,我們稱之為「三大基本編程結構」

1. 順序結構(Sequence)(按順序執行任務)
2. 選擇結構(Selection)(進行判斷與抉擇)
3. 迭代結構(Iteration)(重複執行動作)

如果現在覺得概念有點多,不用擔心!我們會將每個概念拆解成淺顯易懂的小部分,並配合大量生活化的例子來學習。

---

基礎知識:數據類型與變量

在建立複雜的程式之前,電腦需要一種方法來儲存和記憶資訊。我們會使用變量(Variable)作為有名稱的容器或貼上標籤的盒子,用來儲存數據。

1. 基本數據類型

在 Python 中,不同類型的資訊會被歸類為不同的數據類型(Data Types)

整數(int,Integer): 沒有小數點的完整數字,例如 \(5\)、\(0\) 或 \(-2\)。
浮點數 / 實數(float,Float / Real): 帶有小數點的數字,例如 \(3.14\) 或 \(0.5\)。
字符串(str,String): 被引號包圍的文字或字詞,例如 "Hello World""Gamer123"
布爾值(bool,Boolean): 一種簡單的邏輯狀態,只可以是 True(真)或 False(假)。

2. 輸入與輸出

要與使用者溝通,程式必須能夠顯示訊息和提出問題:

輸出(print,Output): 在螢幕上顯示資訊。
例子: print("Welcome to the quiz!")

輸入(input,Input): 提示使用者在鍵盤上輸入內容。
例子: name = input("What is your name? ")

⚠️ 必須注意的常見陷阱(類型轉換 Type Casting):
input() 函數永遠會將使用者的回答儲存為文字(即字符串 String)。如果你要求使用者輸入一個數字並嘗試進行數學運算,Python 就會出現混亂!為了解決這個問題,我們可以使用 int()float() 將它轉換(Cast)為數字:

正確的數值輸入方法: age = int(input("Enter your age: "))

3. 使用算術運算符進行數學運算

電腦非常擅長計算。以下是可以在 Python 中使用的算術符號:

加法: +(例如 \(5 + 3\))
減法: -(例如 \(10 - 4\))
乘法: *(例如 \(4 \times 2\) 會寫成 4 * 2
除法: /(例如 \(8 / 2\))
整數除法(向下取整): //(相除後捨去所有小數部分,例如 \(7 // 2 = 3\))
求餘數(取模): %(找出除法後的餘數,例如 \(7 \% 2 = 1\))

學習重點: 變量用來儲存數據,print() 對使用者「說話」,input() 聆聽使用者的「回答」,而使用 int() 進行類型轉換則讓我們可以對使用者輸入的數字進行數學運算。

---

結構一:順序結構(Sequence,按部就班)

順序結構是指電腦由上至下、嚴格按照行與行的順序來執行指令。

日常生活比喻:焗蛋糕

想像一下跟隨食譜做蛋糕。如果你在將材料混合之前就把麵糰放進焗爐,蛋糕就會失敗!先後次序非常重要。

Python 範例:

score = 0
score = score + 10
print(score)

在這個順序中,Python 先建立變量 score,然後為它加上 \(10\),最後印出 10。如果我們把第 3 行搬到最頂部,電腦就會報錯,因為當時 score 根本還未存在!

學習重點: 順序結構是程式運作的自然流程。改變程式碼行的先後次序,就會改變程式的執行結果。

---

結構二:選擇結構(Selection,做出決定)

選擇結構讓程式能夠根據條件是 True(真)還是 False(假),來決定走哪一條程式碼路徑。

日常生活比喻:看天氣出門

想像一下早上望出窗外:「如果(IF)下雨,就帶雨傘;否則(ELSE),就戴太陽眼鏡。」 你的大腦正在進行選擇結構的邏輯判斷!

1. 比較運算符

為了檢查條件,Python 會使用以下符號來比較數值:

==(等於): 檢查兩個值是否相等。
!=(不等於): 檢查兩個值是否不相同。
>(大於)<(小於)
>=(大於或等於)<=(小於或等於)

⚠️ 常見錯誤:=== 的分別
• 單一個 = 用於賦值(Assignment)(將數據存入變量中:score = 10)。
• 雙等號 == 用於比較(Comparison)(提出疑問進行比較:if score == 10:)。

2. 邏輯運算符

你可以使用以下運算符來組合多個條件:

and(而且): 兩個條件都必須成立(True)。
or(或者): 只要其中一個條件成立(True)即可。
not(相反 / 非): 反轉結果(True 變成 False,False 變成 True)。

3. 三種選擇結構類型

單分支選擇(if

if score >= 50:
    print("You pass!")

雙分支選擇(if ... else

if score >= 50:
    print("You pass!")
else:
    print("Try again!")

多分支選擇(if ... elif ... else

當你有超過兩個選擇時,可以使用 elif(即 "else if" 的縮寫):

if score >= 80:
    print("Grade: A")
elif score >= 50:
    print("Grade: B")
else:
    print("Grade: C")

嵌套選擇(Nested Selection)

嵌套選擇是指將一個 if 語句放在另一個 if 語句之內,用來進行更具體、更深層的條件檢查。

Python 規則:冒號與縮進

有沒有注意到選擇結構每行的結尾都有一個冒號(:)?這是用來告訴 Python 一個新的程式碼區塊即將開始。緊接在下面的各行程式碼必須縮進(Indented,通常向內縮進 4 個空格),以表示它們屬於該決策區塊的一部分。

學習重點: 選擇結構讓程式能根據布爾值(True/False)條件,使用 ifelifelse 作出相應的決策。

---

結構三:迭代結構(Iteration,循環與重複)

迭代結構是指重複執行同一段程式碼多次。我們不需要把同一行程式碼手動輸入 \(100\) 次,只需寫一個循環(Loop)即可!

1. 計數控制迭代(確定性計數循環)

當你預先知道程式碼需要重複執行的具體次數時,請使用計數控制循環(即 for 循環)。

例子:
for i in range(4):
    print("Hello!")

⚠️ range() 的運作規則:
Python 預設由 \(0\) 開始計數。函數 range(start, stop) 運行至 \(stop - 1\) 就會停止。
range(4) 會產生數值:\(0, 1, 2, 3\)(總共執行 \(4\) 次)。
range(1, 5) 會產生數值:\(1, 2, 3, 4\)(不包含 \(5\))。

2. 條件控制迭代(非確定性條件循環)

當你希望程式碼持續重複執行,直至特定條件變成 False 為止時,請使用條件控制循環(即 while 循環)。

例子(猜密碼遊戲):
secret = "python"
guess = input("Enter password: ")
while guess != secret:
    print("Incorrect!")
    guess = input("Try again: ")
print("Access granted!")

⚠️ 小心無限循環(Infinite Loops)!
如果 while 循環內的條件永遠都不會變成 False(例如循環內的變量從未更新過),循環就會永無止境地運行下去,導致你的程式凍結當機。

學習重點: 當明確知道重複次數時使用 for 循環;當需要重複執行直到條件改變時則使用 while 循環。

---

使用追蹤表(Trace Tables)進行除錯

追蹤表是一種在紙上按步驟手動模擬並測試演算法的工具(稱為「乾跑」或手工測試,Dry Run)。它可以記錄每一行程式碼執行時變量值的變化和輸出結果,幫助我們找出邏輯錯誤(Logic Errors)。

追蹤表示範

讓我們一起追蹤以下這段程式碼:

total = 0
for count in range(1, 4):
    total = total + count
print(total)

步驟追蹤表:

步驟 / 行號 count total 條件判斷結果(True/False 輸出
第 1 行 - \(0\) - -
第 2 行(循環 1) \(1\) \(1\) True (\(1 < 4\)) -
第 2 行(循環 2) \(2\) \(3\) True (\(2 < 4\)) -
第 2 行(循環 3) \(3\) \(6\) True (\(3 < 4\)) -
第 2 行(結束) \(4\) \(6\) False(循環結束) -
第 4 行 - \(6\) - 6
---

快速溫習:常見錯誤檢查清單

在執行程式之前,不妨檢查一下有沒有初學者常犯的疏忽:

1. 遺漏冒號: 是否在每個 ifelifelseforwhile 語句的結尾都加上了 : 呢?
2. 縮進問題: 循環和選擇結構下方的程式碼行是否有整齊地向內縮進?
3. 賦值 vs 比較: 進行兩者比較時有沒有使用 ==,並只在設定變量值時才使用 =
4. 文字 vs 數字: 在需要進行數學計算時,有沒有用 int() 包裹著 input() 呢?