這個主題考什麼
- 預測 range 和 while 迴圈會執行多少次。
- 一步一步構造總和或篩選後的列表。
- 有意識地使用 break 和 continue,而不是用它們掩蓋不清楚的條件。
常見錯誤
- 以為 range(1, 5) 包含 5。結束值不包含在內。
- 忘記更新 while 條件使用的變數。
- 在走訪列表時修改它,導致跳過元素。
範例題
從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。
-
1. 小明給第 2-5 號桌發優惠券,range(2, 6) 生成哪些桌號?
顯示答案
答案
B. 2,3,4,5解析: range(start, stop) 含起點不含終點,所以是 2、3、4、5。把 stop 當成閉區間才會多出 6。
-
2. 🧋 小明給指定桌號發優惠券,range(10, 0, -1) 生成什麼?
顯示答案
答案
A. 10,9,8,...,1解析: 負步長向下計數,終點同樣被排除,0 不會出現;range(10, 0, -1) 到 1 為止。想含 0 要寫 range(10, -1, -1)。
-
3. 🧋 小明把奶茶名和價格配對顯示,zip([1,2,3], ['a','b']) 生成幾個對?
顯示答案
答案
B. 2個解析: zip 在最短的可迭代物件耗盡時停止,多出的 3 被丟棄且不報錯。zip_longest 會用填充值保留它。
-
4. 要依次處理串列裡的每一筆訂單,最直接的迴圈是?
顯示答案
答案
C. for order in orders解析: for 直接走訪可迭代物件,耗盡即停;while True 則需要手動索引、退出判斷和 break,程式碼更短也更安全。
-
5. 小明把奶茶名和價格配對顯示,同時走訪兩個串列用 ___(names, prices)
顯示答案
答案
zip解析: zip 按位置並行走訪兩個可迭代物件,每次產出一個元組供迴圈解包。它在較短的一方停下,長度不等會悄悄丟資料。
-
6. 🧋 小明給指定桌號發優惠券,range(3) 生成 ___ 個元素
顯示答案
答案
3解析: range(3) 產出 0、1、2,共三個值,從 0 開始;新手常按 1 到 3 去數而答成 2,差別就在起點。
-
7. 哪個內建函式能為 for 迴圈生成整數序列?
顯示答案
答案
range解析: range 是惰性產生等差序列的內建函式,不會在記憶體裡建串列;套上 list() 才會把值實體化,大範圍也不怕。
-
8. 小明把 range 轉成串列,下面程式碼會列印什麼?
print(list(range(2, 6)))顯示答案
答案
[2, 3, 4, 5]解析: list() 把 range 的每個值實體化;6 是終點不會出現。range 本身是惰性的,直接列印只會顯示 range(2, 6)。
-
9. 標牌把 "go" 的字母大寫並連續列印。螢幕顯示什麼?
for ch in "go": print(ch.upper(), end="")顯示答案
答案
GO解析: 走訪字串得到單個字元,upper() 逐個轉大寫;end='' 去掉換行,字母之間沒有分隔符,所以連著列印,結果就是 GO。
-
10. `factors(12)` 回傳什麼?
def factors(value): factor_list = [] divisor = 2 while value > 1: while value % divisor == 0: factor_list.append(divisor) value /= divisor divisor += 1 return factor_list print(factors(12))顯示答案
答案
[2, 2, 3]解析: 12 分解為 2、2、3;內層先把 2 除盡,divisor 才移到 3。divisor 只增不減,所以結果升序。
常見問題
什麼時候用 while 而不是 for?
走訪已知集合或範圍時用 for;只知道停止條件時用 while。
break 會跳過 else 嗎?
會。迴圈的 else 只在沒有 break 正常結束時執行。
繼續保持練習節奏。
完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。