這個主題考什麼
- 逐行追蹤變數,而不是憑程式碼形狀猜答案。
- 注意函式或方法是否原地修改了物件。
- 作答前檢查空格、換行、引號和 print 分隔符。
常見錯誤
- 只讀最後一個表達式,忽略前面某一行的修改。
- sep 或 end 改變後,仍以為 print 會加空格。
- 寫的是你期望的值,而不是 Python 實際輸出的字元。
範例題
從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。
-
1. 小明寫了下面這行,猜猜會列印出什麼?
print(f"奶茶{3+5}元")顯示答案
答案
奶茶8元解析: 花括號裡是表達式而不是文字:Python 先把 3+5 算成 8 再插入,杯貼上的字就是 Milk tea 8 yuan,不是 Milk tea 3+5 yuan。
-
2. `decode('zmlyhgzxovrhlugvmzhgvkkrmthglmv')` 回傳什麼?
from string import ascii_lowercase BLOCK_SIZE = 5 trtbl = str.maketrans(ascii_lowercase, ascii_lowercase[::-1]) def base_trans(text): return ''.join([character for character in text if character.isalnum()]).lower().translate(trtbl) def encode(plain): cipher = base_trans(plain) return ' '.join(cipher[idx:idx + BLOCK_SIZE] for idx in range(0, len(cipher), BLOCK_SIZE)) def decode(ciphered): return base_trans(ciphered) print(decode('zmlyhgzxovrhlugvmzhgvkkrmthglmv'))顯示答案
答案
anobstacleisoftenasteppingstone解析: 沒有空格時整串就是一整塊。逐字母鏡像後,33 個字元正好讀作 an obstacle is often a stepping stone。
-
3. 三杯咖啡的價格總和是多少?
prices = [18, 22, 15] total = 0 for price in prices: total += price print(total)顯示答案
答案
55解析: 迴圈把 18、22、15 累加進 total,列印 55。total 必須先初始化為 0,否則第一次 += 會拋 NameError。
-
4. 集合裡最大的元素是多少?
s = {3, 1, 2} print(max(s))顯示答案
答案
3解析: max 掃描集合併回傳最大值 3;集合沒有順序也不影響,因為 max 比較的是值而不是位置,和順序無關。
-
5. `rebase(10, [5], 2)` 回傳什麼?
def from_digits(digits, base): return sum(number * base ** idx for idx, number in enumerate(reversed(digits))) def to_digits(number, base_to): result = [] while number > 0: result.append(number % base_to) number //= base_to if result: return result[::-1] # list(reversed(result)) return [0] def rebase(from_base, digits, to_base): if from_base < 2: raise ValueError("input base must be >= 2") if to_base < 2: raise ValueError("output base must be >= 2") if any(True for idx in digits if idx < 0 or idx >= from_base): raise ValueError("all digits must satisfy 0 <= d < input base") return to_digits(from_digits(digits, from_base), to_base) print(rebase(10, [5], 2))顯示答案
答案
[1, 0, 1]解析: 5 的二進位是 4 + 1,從高位到低位寫作 1、0、1;函式不斷取餘並收集這些數字,最後把結果倒序輸出。
-
6. 子類覆蓋會員總價方法,輸出什麼?
class Order: def __init__(self, price): self.price = price def total(self): return self.price class MemberOrder(Order): def total(self): return round(self.price * 0.9, 2) print(MemberOrder(18).total())顯示答案
答案
16.2解析: 重寫的方法把單價乘 0.9 並保留兩位:18 × 0.9 = 16.2,會員價取代基礎價,呼叫點完全不變。
-
7. 營收降序、店名升序,列印什麼?
rows = [('Hubin', 1800, 'B'), ('Hubin', 1500, 'A'), ('Gaoxin', 1800, 'C')] print(sorted(rows, key=lambda r: (-r[1], r[0])))顯示答案
答案
[('Gaoxin', 1800, 'C'), ('Hubin', 1800, 'B'), ('Hubin', 1500, 'A')]解析: -1800 排在 -1500 前,兩行 1800 因此靠前,同額時由店名決定,Gaoxin 在 Hubin 之前。
-
8. 統計「拿鐵」出現次數,輸出什麼?
print('拿鐵拿鐵美式'.count('拿鐵'))顯示答案
答案
2解析: count 數的是不重疊出現次數,這句話裡 'latte' 出現兩次。count 區分大小寫,'Latte' 不會計入這兩次。
-
9. 海象運算子賦值後參與比較,輸出什麼?
if (n := 5) > 3: print(n)顯示答案
答案
5解析: 海象運算子在條件裡把 5 賦給 n 並回傳這個值,5 > 3 成立,進到函式體時 n 已經有值;省掉的就是前面那行賦值。
-
10. 對重複標題去重並保持順序,輸出什麼?
titles = ['新品', '會員日', '新品', '排行'] seen = [] for title in titles: if title not in seen: seen.append(title) print('|'.join(seen))顯示答案
答案
新品|會員日|排行解析: 迴圈只在標題未出現過時追加,第二個「新品」被丟棄,剩「新品|會員日|排行」,原有順序不變;用 set 就不保證順序。
常見問題
輸出預測如何判分?
練習器會比較去掉首尾空白後的完整文字,包括大小寫、空格和換行。
為什麼有些答案是多行的?
程式可能列印多行。這些題目使用文字框,要求按順序輸入完整輸出。
繼續保持練習節奏。
完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。