← 回首頁

🐍 第二堂課:清單、迴圈與函式

從變數到組合技 · 程式開始有結構
含語音講解(約 60 分鐘),附互動小測驗
← 第一堂 第二堂 第三堂(即將推出)

📖 第一階段:溫故知新 + 清單(約 20 分鐘)

1. 快速複習:第一堂課學了什麼?

⏱ 5 分鐘

第一堂課我們建立了程式設計的核心地基:

  • 變數:用名字存資料(age = 25
  • if/else:讓程式做決定(if age >= 18: ...
  • while 迴圈:重複執行直到條件不成立
  • 綜合實作:猜數字遊戲

如果你對這些還不熟,建議先回去複習第一堂課再回來。準備好了嗎?我們往下走!

2. 清單 list:一個盒子裝很多東西

⏱ 15 分鐘

問題來了:如果你要存全班 30 個人的成績,需要宣告 30 個變數嗎?

score1 = 85score2 = 92score3 = 78⋯⋯太累了!

清單(list)就是一個可以放很多東西的容器。用中括號 [ ] 包住,逗號分隔:

scores = [85, 92, 78, 95, 88]

# 拿取單一元素(從 0 開始數!)
print(scores[0])   # 85(第一個)
print(scores[2])   # 78(第三個)

# 新增元素
scores.append(90)  # 加在最後面

# 看有幾個元素
print(len(scores)) # 6
⚠️ 重點:清單的索引從 0 開始,不是 1。scores[0] 是第一個,scores[1] 是第二個。這是初學者最容易錯的地方!

清單可以放任何東西:數字、字串、甚至另一個清單:

menu = ["珍珠奶茶", "雞排", "大腸包小腸"]
print(menu[1])  # 雞排

mixed = [3.14, "哈囉", True, [1,2,3]]
print(mixed[3][0])  # 1(清單中的清單)

📖 第二階段:for 迴圈與函式(約 25 分鐘)

3. for 迴圈:更優雅的遍歷方式

⏱ 15 分鐘

第一堂課學了 while 迴圈,現在來學更常用的 for 迴圈。for 的邏輯是:「對清單中的每一項,做某件事」。

fruits = ["🍎 蘋果", "🍌 香蕉", "🍇 葡萄"]

for fruit in fruits:
    print(f"我喜歡吃 {fruit}")

# 輸出:
# 我喜歡吃 🍎 蘋果
# 我喜歡吃 🍌 香蕉
# 我喜歡吃 🍇 葡萄

for + range():想跑固定次數時,用 range()

# range(5) 會產生 0,1,2,3,4(共 5 個數字)
for i in range(5):
    print(f"第 {i+1} 次說哈囉!")

# 計算總分
scores = [85, 92, 78, 95, 88]
total = 0
for s in scores:
    total = total + s
print(f"總分:{total},平均:{total / len(scores)}")
💡 while vs for 何時用?
while:不知道要跑幾次時(如「猜到對為止」)
for:知道要跑幾次時(如「跑完這個清單的每一項」)

4. 函式 def:寫一次,用一百次

⏱ 15 分鐘

想像你寫了一個「計算 BMI」的程式碼,今天要用、明天要用、後天也要用。每次重寫嗎?太笨了!

函式(function)就是把一段程式碼打包起來,取一個名字,之後叫名字就能重複使用:

# 定義函式
def say_hello():
    print("哈囉!歡迎來到程式學習!")

# 呼叫函式
say_hello()  # 哈囉!歡迎來到程式學習!
say_hello()  # 哈囉!歡迎來到程式學習!

帶參數的函式:讓函式更靈活:

def greet(name):
    print(f"哈囉 {name},今天過得如何?")

greet("丁丁")   # 哈囉 丁丁,今天過得如何?
greet("小美")   # 哈囉 小美,今天過得如何?

def bmi(height_m, weight_kg):
    bmi_value = weight_kg / (height_m ** 2)
    return round(bmi_value, 1)

print(bmi(1.75, 70))  # 22.9

return 是把計算結果「吐出來」給外面用。沒有 return 的函式會回傳 None(空)。

🧠 函式的三大好處:
1. 不用重寫 — 定義一次,到處呼叫
2. 容易修改 — 改一個地方,所有呼叫都更新
3. 可讀性高calculate_bmi() 一看就知道在幹嘛

📖 第三階段:實戰專案 + 測驗(約 15 分鐘)

5. 綜合實作:簡易記帳機

⏱ 10 分鐘

結合清單 + for 迴圈 + 函式,寫一個簡易記帳機:

# 簡易記帳機
expenses = []  # 空的支出清單

def add_expense(item, amount):
    """新增一筆支出"""
    expenses.append({"項目": item, "金額": amount})
    print(f"✅ 已記錄:{item} ${amount}")

def show_report():
    """顯示記帳報告"""
    if len(expenses) == 0:
        print("📭 目前沒有任何支出記錄")
        return
    
    print("\n📊 ====== 記帳報告 ======")
    total = 0
    for i, e in enumerate(expenses):
        print(f"  {i+1}. {e['項目']}: ${e['金額']}")
        total = total + e['金額']
    print(f"  ──────────────")
    print(f"  💰 總支出: ${total}")
    print(f"  📌 共 {len(expenses)} 筆記錄")

# 使用
add_expense("珍珠奶茶", 55)
add_expense("雞排", 80)
add_expense("電影票", 320)
show_report()

執行結果:

✅ 已記錄:珍珠奶茶 $55
✅ 已記錄:雞排 $80
✅ 已記錄:電影票 $320

📊 ====== 記帳報告 ======
  1. 珍珠奶茶: $55
  2. 雞排: $80
  3. 電影票: $320
  ──────────────
  💰 總支出: $455
  📌 共 3 筆記錄
🎯 這個專案用到了:
清單 expenses = [] 存多筆資料
.append() 新增元素
for 迴圈 遍歷清單
函式 def add_expense() 打包邏輯
len() 取得清單長度
字典 dict {"項目": ..., "金額": ...} 存結構化資料

🧪 小測驗:你學會了嗎?

5 題選擇題,選完按「交卷」看成績
第 1 / 5 題
清單 fruits = ["蘋果", "香蕉", "葡萄"],請問 fruits[1] 的值是什麼?
第 2 / 5 題
for i in range(3): 這個迴圈會執行幾次?
第 3 / 5 題
以下哪一個不是使用函式的好處?
第 4 / 5 題
def 關鍵字的作用是什麼?
第 5 / 5 題
請問 len([10, 20, 30, 40]) 的結果是?
你的得分
0/5

🎯 第二堂課,你學會了什麼?

清單 list(一次存多筆)→ for 迴圈(優雅遍歷)→ 函式 def(打包重複邏輯)→ 綜合實作(簡易記帳機)

加上第一堂課的變數 + if/else + while,你已經掌握了程式設計六成的核心工具。接下來第三堂課,我們會學更進階的資料結構與檔案操作!