← 返回大綱
總複習

第 1~5 章
綜合填空

先讀情境,再把程式積木拖進空格 —— 從簡單到難,共 24 題

怎麼玩

每一題都是一個生活情境

1. 先讀左邊的「情境」和「任務」

搞懂程式要幫誰、解決什麼問題,再看右邊的程式碼。對照「預期輸出」想想每一行在做什麼。

2. 把積木放進空格:用拖的,或先點積木再點空格

放錯了就點那個空格,積木會退回池子。填完按「執行看看 ▶」可以真的跑跑看,拼錯也能跑,看錯誤訊息一樣有收穫。

小心長得很像的積木

池子裡的積木比空格多很多,而且很多是故意放的「差一點點」: == 和 =、>= 和 =>、int 和 Int、append 和 add……
「執行看看」需要先在 Playground 設定過伺服器,設定會自動沿用到這裡。

難度地圖

不分章節,題目會混用前五章的觀念

暖身 ★

輸入輸出、運算、判斷
每題 3~5 格

基礎 ★★

迴圈、函式、list 入門
每題 3~5 格

進階 ★★★

迴圈 + 判斷 + 容器
每題 3~5 格

挑戰 ★★★★

全部觀念一起用
每題 4~7 格

暖身 ★

暖身

輸入輸出 · 運算 · 判斷

暖身 ★第 1 題

飲料店算總價

情境
你在飲料店打工,珍珠奶茶一杯 55 元。客人說要幾杯,收銀程式要馬上算出總價。
任務
讀入杯數 → 乘上單價 → 印出總價。

用到:input · int · 運算 · f-string

# 輸入 3 時: 總共 165 元
input() 拿到的永遠是字串,要先 int() 才能乘。
Python 大小寫有差:Int、Print 都不存在。乘法是 *,x 不是運算子、** 是次方。
price = 55 cups = (("要幾杯?")) total = price cups (f"總共 {total} 元")
x Input ** input echo print str * Print int Int float scan
暖身 ★第 2 題

電影分級檢查

情境
電影院在放一部保護級電影:滿 12 歲可以自己進場,未滿 12 歲要爸媽陪同。剛好 12 歲的小朋友來買票了。
任務
讀入年齡,判斷能不能自己看。

用到:if / else · 比較運算 · 冒號

# 輸入 12 時: 可以自己看這部電影
「滿 12 歲」包含 12,所以是 >=(寫法是大於在前、等號在後,=> 不對)。
if 和 else 後面都要接冒號 :,不是分號。else 不用條件,所以不能用 elif。
age = int(input("你幾歲?")) age 12 print("可以自己看這部電影") print("要找爸媽陪同")
elif => : =< if : > ; else for else if >= If
暖身 ★第 3 題

號碼牌分邊排隊

情境
夜市排隊人太多,老闆規定:號碼牌是偶數的去左邊排、奇數的去右邊排。你拿到 8 號。
任務
用「除以 2 的餘數」判斷奇偶。

用到:% 取餘數 · == 比較

# 輸入 8 時: 請到左邊排隊
% 是取餘數:8 % 2 得 0,7 % 2 得 1。
/ 是除法、// 是整數除法,都不是餘數。比較相等要用兩個等號 ==。
num = int(input("你的號碼牌:")) if num 2 : print("請到左邊排隊") else: print("請到右邊排隊")
0 != 1 = / % // == 2
暖身 ★第 4 題

出門前的天氣提醒

情境
手機的天氣小幫手:只要下雨、或者氣溫低於 15 度,就提醒你帶外套或雨具。今天 20 度,但正在下雨。
任務
設定今天的天氣,判斷要不要提醒。

用到:布林值 · and / or · else

記得帶外套或雨具!
布林值開頭要大寫:True / False。
「或者」是 or(|| 是別的語言的寫法);用 and 的話兩個條件都要成立,今天 20 度就不會提醒了。
temp = 20 is_raining = if temp < 15 is_raining print("記得帶外套或雨具!") : print("天氣不錯,出發吧")
False or Else || True : true elif else TRUE and ;
暖身 ★第 5 題

販賣機找零

情境
自動販賣機只有十元和一元硬幣可以找。你投了 100 元買一瓶 35 元的飲料。
任務
算出找零,再拆成幾個十元、幾個一元。

用到:- · // 整數除法 · % 取餘數

找零 65 元:6 個十元、5 個一元
65 元 → 65 // 10 = 6 個十元,65 % 10 = 5 個一元。
用 / 會得到 6.5,硬幣不會有半個。
pay = 100 cost = 35 change = pay cost tens = change 10 ones = change 10 print(f"找零 {change} 元:{tens} 個十元、{ones} 個一元")
- % + / ** * //
暖身 ★第 6 題

自我介紹小卡

情境
新學期第一天,老師請大家用程式做一張自我介紹小卡:輸入名字和年齡,印出「明年幾歲」。
任務
讀名字、讀年齡,在 f-string 裡算明年的年齡。

用到:input · int · f-string 大括號

# 輸入 小明、12 時: 我是小明,明年就13歲了
f-string 大括號裡放的是變數,不用加引號;加了引號就變成固定的文字。
年齡要先 int() 才能 +1,float 會印出 13.0。
name = input("名字:") age = (input("年齡:")) print(f"我是{},明年就{ 1}歲了")
"name" age - str Name "age" float + int name *
基礎 ★★

基礎

迴圈 · 函式 · list 入門

基礎 ★★第 7 題

操場跑步紀錄

情境
體育課要跑 5 圈操場,一圈 400 公尺。手錶每跑完一圈就顯示目前累計多少公尺。
任務
從第 1 圈印到第 5 圈的累計距離。

用到:for · range(開始, 結束) · 乘法

第 1 圈,累計 400 公尺 第 2 圈,累計 800 公尺 第 3 圈,累計 1200 公尺 第 4 圈,累計 1600 公尺 第 5 圈,累計 2000 公尺
range(1, 6) 會產生 1, 2, 3, 4, 5 —— 結束值不包含,所以要寫 6。
從 0 開始會多印一行「第 0 圈」。
for lap in (, ): print(f"第 {lap} 圈,累計 {lap 400} 公尺")
1 5 Range 0 + * range len ** list 6
基礎 ★★第 8 題

存錢買耳機

情境
你想買一副 1050 元的耳機,每週存 150 元零用錢。到第幾週才存得夠?
任務
一直存,直到存款到達 1050 元為止。

用到:while · 比較 · +=

第 7 週存到 1050 元
不知道要跑幾次、只知道「什麼時候停」→ 用 while。
存到剛好 1050 就夠了,所以條件是「還不到 1050 才繼續存」:<。<= 會多存一週。
=+ 是 week = +1,每次都設成 1,不是累加。
saving = 0 week = 0 saving 1050: saving += 150 week 1 print(f"第 {} 週存到 {saving} 元")
< += while saving <= =+ > "week" == if week for
基礎 ★★第 9 題

溫度換算器

情境
你要去美國玩,天氣預報都用華氏。寫一個函式把攝氏換成華氏:F = C × 9 / 5 + 32。
任務
定義函式、算出結果並交回。

用到:def · return · 運算順序

212.0 32.0
Python 定義函式用 def,最後要有冒號。
用 print 的話函式本身會印出數字,但交回的是 None,外面就會多印一行 None。
to_f(c) c 9 / 5 + 32 print(to_f(100)) print(to_f(0))
+ ** * function ; Def return def Return print :
基礎 ★★第 10 題

書店會員折扣

情境
書店會員平常打 9 折;今天是特價日,結帳時可以指定打 8 折。
任務
寫一個有預設折扣的函式。

用到:預設參數 · 小數 · int()

180 160
預設參數寫法:參數名=預設值,只用一個等號。
9 折是乘上 0.9,不是 9 或 90。
def discount(price, rate): return int(price rate) print(discount(200)) print(discount(200, ))
0.8 0.9 = * // 90 9 == : 80 8
基礎 ★★第 11 題

媽媽的購物清單

情境
媽媽傳來購物清單:牛奶、麵包、雞蛋。結果五分鐘後又打電話說「麵包家裡還有,不用買了」。
任務
建立清單、加東西、再刪掉麵包,最後數還剩幾樣。

用到:list · append · remove · len

['牛奶', '雞蛋'] 共 2 樣
list 加到最後面是 append(add 是 set 的、push 是別的語言的)。
依「內容」刪除用 remove;pop 要給的是位置,不是內容。數量用 len()。
cart = [] cart.("牛奶") cart.("麵包") cart.("雞蛋") cart.("麵包") print(cart) print(f"共 {(cart)} 樣")
append len size length remove append append insert delete add pop push
基礎 ★★第 12 題

賽跑排行榜

情境
運動會賽跑結束,名次照順序存在 list 裡。司儀要宣布冠軍、最後一名,還有前三名。
任務
用索引和切片取出名次。

用到:索引 · 負索引 · 切片

冠軍: 小美 最後一名: 胖虎 前三名: ['小美', '阿明', '小華']
索引從 0 開始,-1 是最後一個;只有 5 個人時 [5] 會超出範圍。
切片 [:3] 取索引 0、1、2,不含 3。
ranking = ["小美", "阿明", "小華", "大雄", "胖虎"] print("冠軍:", ranking[]) print("最後一名:", ranking[]) print("前三名:", ranking[])
6 1:3 :4 -1 :3 0 5 1 :2
進階 ★★★

進階

迴圈 + 判斷 + list / dict 混搭

進階 ★★★第 13 題

挑出及格的成績

情境
老師要把小考 60 分以上(含 60)的成績挑出來,放進及格名單,再算有幾個人及格。
任務
走過每個分數 → 及格的放進新清單 → 數人數。

用到:for · if · append · len

及格 3 人:[72, 60, 88]
for 變數 in 清單,用 in 不是 of。
60 分也及格,用 > 會把 60 漏掉。人數是 len,sum 會變成分數加總。
scores = [72, 45, 60, 88, 59] passed = [] s scores: if s 60: passed.(s) print(f"及格 {(passed)} 人:{passed}")
in For > of on for add >= insert append len while max => sum
進階 ★★★第 14 題

沒有 4 樓的電梯

情境
有些大樓忌諱「4」,電梯面板沒有 4 樓。這棟大樓最高只到 8 樓,程式從 1 數到 10,要印出面板上的按鈕。
任務
跳過 4 樓,數到超過 8 樓就停。

用到:for · if · continue · break

1 2 3 5 6 7 8
continue:這一圈不做了,跳到下一圈。break:整個迴圈直接結束。
pass 什麼都不做,4 還是會被印出來。8 樓要印,所以是遇到 9 才停。
for floor in range(1, 11): if floor 4: if floor == : print(floor, end=" ")
== break 8 != 10 = 9 pass return continue
進階 ★★★第 15 題

早餐店結帳

情境
早餐店的菜單用 dict 存價錢。客人點了一個漢堡和兩杯奶茶,要算總金額。
任務
照點餐清單一個一個查價錢,加起來。

用到:dict 查值 · for · +=

3 樣餐點,共 100 元
要照客人點的走訪,所以是 order;走 menu 會變成整份菜單各點一個。
dict 用中括號查值;["item"] 會去找名字叫 item 的那道菜,找不到。
menu = {"蛋餅": 35, "漢堡": 50, "奶茶": 25} order = ["漢堡", "奶茶", "奶茶"] total = 0 for item in : total menu print(f"{len(order)} 樣餐點,共 {total} 元")
(item) item ["item"] [item] menu order += == .item =
進階 ★★★第 16 題

班級飲料投票

情境
班上要團購飲料,大家投票選口味。每張票寫一種飲料,要統計每種得幾票。
任務
每看到一張票,就把那種飲料的票數 +1,最後全部印出來。

用到:dict 更新 · for · .items()

珍奶:3 票 紅茶:1 票 綠茶:1 票
votes[b] += 1:用目前這張票的飲料名稱當 key,票數加 1。
用 = 的話每種都只會是 1 票。要同時拿到名稱和票數 → .items()。
votes = {"珍奶": 0, "紅茶": 0, "綠茶": 0} ballots = ["珍奶", "紅茶", "珍奶", "綠茶", "珍奶"] for b in ballots: votes for drink, count in votes.(): print(f"{drink}:{count} 票")
["b"] += keys 0 [b] [0] values 1 == items = item b
進階 ★★★第 17 題

動物園全家門票

情境
動物園門票:未滿 6 歲免費、65 歲以上敬老票 150 元、其他人全票 300 元。一家四口分別是 5、6、30、65 歲。
任務
寫票價函式,再用迴圈把全家的票價加起來。

用到:def · if / elif / else · for · +=

全家門票共 750 元
「未滿 6 歲」不含 6 → <;「65 歲以上」含 65 → >=。
Python 寫 elif,不是 else if。呼叫時要傳這一個人的年齡 a。
def ticket(age): if age 6: return 0 age 65: return 150 else: return 300 ages = [5, 6, 30, 65] total = 0 for a in ages: total ticket() print(f"全家門票共 {total} 元")
= elseif >= a age elif else if += <= =+ < > ages
進階 ★★★第 18 題

提款機密碼

情境
提款機最多讓你輸入 3 次密碼,輸對了就登入,輸錯會告訴你還剩幾次。這次你前兩次都打錯,第三次才打對。
任務
最多試 3 次,輸對就立刻離開迴圈。

用到:while · input · == · break · +=

# 輸入 0000、1111、1234 時: 密碼錯誤,還剩 2 次 密碼錯誤,還剩 1 次 登入成功 謝謝使用
密碼存成字串 "1234",input() 拿到的也是字串,直接用 == 比就好。
輸對要整個迴圈結束 → break;用 continue 會回到迴圈開頭繼續要你輸入密碼。
PASSWORD = "1234" tries = 0 while tries 3: pw = ("請輸入密碼:") if pw PASSWORD: print("登入成功") tries 1 print(f"密碼錯誤,還剩 {3 - tries} 次") print("謝謝使用")
input += < continue =< pass break > =+ = == Input print -=
挑戰 ★★★★

挑戰

函式 + 迴圈 + 判斷 + 容器全部一起來

挑戰 ★★★★第 19 題

找出第一名

情境
期末考成績存在 dict 裡(名字 → 分數)。班導要找出最高分的同學,名字和分數都要記下來。
任務
先假設最高分是 0,一個一個比,遇到更高的就更新。

用到:dict 走訪 · if · 記錄目前最大值

第一名是 小美,92 分
起始值要比所有分數都低,所以是 0;設 100 的話永遠不會更新。
比的是「這次的分數」和「目前最高分」。更新時分數和名字都要記。
scores = {"小明": 78, "小美": 92, "阿華": 85} best_name = "" best_score = for name, score in scores.(): if score : best_score = best_name = print(f"第一名是 {best_name},{best_score} 分")
> < == 100 items "name" name keys score values 0 best_name best_score
挑戰 ★★★★第 20 題

一週步數報告

情境
手環記錄了你這 5 天的步數。App 要算出平均步數,還有幾天達到 8000 步(含)的目標。
任務
一個迴圈同時做兩件事:加總、數達標天數。

用到:for · += · if · / · len

平均 8400.0 步,達標 3 天
平均 = 總和 ÷ 天數,天數是 len(steps);sum(steps) 是總步數。
除法是 /;% 是取餘數,不是除法。
steps = [6500, 8200, 10300, 7900, 9100] total = 0 good_days = 0 for s in steps: total s if s 8000: good_days 1 avg = total (steps) print(f"平均 {avg} 步,達標 {good_days} 天")
<= >= =+ sum len += => -= * / max += %
挑戰 ★★★★第 21 題

一週氣溫的最低與最高

情境
氣象站記錄了幾天的氣溫。不能用內建的 min()、max(),要自己寫函式找出最低和最高溫,一次交回兩個值。
任務
先拿第一天當基準,逐一比較並更新。

用到:def · for · if · 回傳兩個值

最低 18 度,最高 31 度
list 取第一個用中括號 [0];4 個元素沒有 [4]。
找最低用 <、找最高用 >。外面的變數叫 lo、hi,函式裡的 low、high 在外面拿不到。
def find_range(nums): low = nums high = nums[0] for n in nums: if n low: low = n if n high: high = n low, high , = find_range([23, 31, 18, 27]) print(f"最低 {lo} 度,最高 {hi} 度")
[4] low == print [0] hi < (0) return high lo >
挑戰 ★★★★第 22 題

星星金字塔

情境
生日卡片上要印一座星星金字塔:輸入層數,第 1 層 1 顆星、第 2 層 2 顆……每層印完要換行。
任務
外層決定第幾層,內層印這層的星星。

用到:巢狀 for · range · end= · print()

# 輸入 4 時: ★ ★★ ★★★ ★★★★
第 i 層印 i 顆 → 內層 range(i)。end="" 讓星星黏在同一行。
最後的 print() 跟內層 for 對齊,代表「這層印完才換行」。
rows = int(input("要幾層?")) for i in range(1, rows 1): for j in (): print("★", end=)
break + j - range " " "\n" continue i print() "" len rows
挑戰 ★★★★第 23 題

文具店庫存

情境
文具店的庫存存在 dict 裡。客人要買東西時,庫存夠才賣(剛好等於也可以),賣出後要扣掉庫存。
任務
寫購買函式:判斷 → 扣庫存 → 交回結果訊息。

用到:def · dict · if / else · -= · return

購買成功 庫存不足 購買成功 {'鉛筆': 2, '橡皮擦': 0, '尺': 0}
剩 2 把尺、要買 2 把 → 夠,所以是 >=。
-= 扣庫存;=- 會變成「庫存 = 負的數量」。訊息要交給外面的 print,所以用 return。
stock = {"鉛筆": 5, "橡皮擦": 0, "尺": 2} def buy(item, qty): if stock qty: stock[item] qty "購買成功" else: return "庫存不足" print(buy("鉛筆", 3)) print(buy("橡皮擦", 1)) print(buy("尺", 2)) print(stock)
+= break return -= > (item) ["item"] >= print [item] <= =-
挑戰 ★★★★第 24 題

期末成績單

情境
每位同學有三科成績(存在 dict 裡,名字 → 成績 list)。要印出每個人的平均,平均未滿 60 的要列入補考名單。
任務
寫平均函式 → 走訪每位同學 → 判斷 → 收集補考名單。

用到:def · return · dict.items() · 巢狀 list · if · append

小明:平均 80.0 小美:平均 55.0 阿華:平均 61.3 需要補考: ['小美']
// 會把阿華的 61.33 變成 61.0。
要算這位同學的平均 → average(nums);avg 是存結果的變數,不是函式。
「未滿 60」→ <。
def average(nums): total = 0 for n in nums: total += n return total (nums) report = {"小明": [80, 70, 90], "小美": [55, 60, 50], "阿華": [65, 58, 61]} retake = [] for name, nums in report.(): avg = () if avg 60: retake.(name) print(f"{name}:平均 {avg:.1f}") print("需要補考:", retake)
// name add keys append push values len < nums count == % items > avg report average / sum

總複習完成!

完成 0 / 24 題

這些題目全部用拖的就能完成,但真正寫程式時是從一片空白開始。
挑兩三個情境到 Playground 自己從頭打一次,你會發現差別。

已完成 0 / 24 題