控制流 · 10 道範例題

Python 迴圈練習題與答案

迴圈讓程式開始重複工作。常見錯誤通常很機械:range 差一位、累加器沒有更新,或者 while 條件永遠不變成假。

61 道題在完整題庫中 · 16 道選擇 · 10 道填空 · 35 道輸出

這個主題考什麼

  • 預測 range 和 while 迴圈會執行多少次。
  • 一步一步構造總和或篩選後的列表。
  • 有意識地使用 break 和 continue,而不是用它們掩蓋不清楚的條件。

常見錯誤

  • 以為 range(1, 5) 包含 5。結束值不包含在內。
  • 忘記更新 while 條件使用的變數。
  • 在走訪列表時修改它,導致跳過元素。
範例題

範例題

10

從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。

  1. 選擇題q0305

    1. 小明給第 2-5 號桌發優惠券,range(2, 6) 生成哪些桌號?

    1. 2,3,4,5,6
    2. 2,3,4,5
    3. 2,4,6
    4. 0,1,2,3,4,5
    顯示答案

    答案

    B. 2,3,4,5

    解析: range(start, stop) 含起點不含終點,所以是 2、3、4、5。把 stop 當成閉區間才會多出 6。

  2. 選擇題q0317

    2. 🧋 小明給指定桌號發優惠券,range(10, 0, -1) 生成什麼?

    1. 10,9,8,...,1
    2. 10,9,8,...,0
    3. 0,1,...,10
    4. 空序列
    顯示答案

    答案

    A. 10,9,8,...,1

    解析: 負步長向下計數,終點同樣被排除,0 不會出現;range(10, 0, -1) 到 1 為止。想含 0 要寫 range(10, -1, -1)。

  3. 選擇題q0324

    3. 🧋 小明把奶茶名和價格配對顯示,zip([1,2,3], ['a','b']) 生成幾個對?

    1. 3個
    2. 2個
    3. 1個
    4. 報錯
    顯示答案

    答案

    B. 2個

    解析: zip 在最短的可迭代物件耗盡時停止,多出的 3 被丟棄且不報錯。zip_longest 會用填充值保留它。

  4. 選擇題q0355

    4. 要依次處理串列裡的每一筆訂單,最直接的迴圈是?

    1. match orders
    2. while True
    3. for order in orders
    4. if order in orders
    顯示答案

    答案

    C. for order in orders

    解析: for 直接走訪可迭代物件,耗盡即停;while True 則需要手動索引、退出判斷和 break,程式碼更短也更安全。

  5. 填空題q0307

    5. 小明把奶茶名和價格配對顯示,同時走訪兩個串列用 ___(names, prices)

    顯示答案

    答案

    zip

    解析: zip 按位置並行走訪兩個可迭代物件,每次產出一個元組供迴圈解包。它在較短的一方停下,長度不等會悄悄丟資料。

  6. 填空題q0319

    6. 🧋 小明給指定桌號發優惠券,range(3) 生成 ___ 個元素

    顯示答案

    答案

    3

    解析: range(3) 產出 0、1、2,共三個值,從 0 開始;新手常按 1 到 3 去數而答成 2,差別就在起點。

  7. 填空題q0336

    7. 哪個內建函式能為 for 迴圈生成整數序列?

    顯示答案

    答案

    range

    解析: range 是惰性產生等差序列的內建函式,不會在記憶體裡建串列;套上 list() 才會把值實體化,大範圍也不怕。

  8. 輸出預測q0306

    8. 小明把 range 轉成串列,下面程式碼會列印什麼?

    print(list(range(2, 6)))
    顯示答案

    答案

    [2, 3, 4, 5]

    解析: list() 把 range 的每個值實體化;6 是終點不會出現。range 本身是惰性的,直接列印只會顯示 range(2, 6)。

  9. 輸出預測q0331

    9. 標牌把 "go" 的字母大寫並連續列印。螢幕顯示什麼?

    for ch in "go":
        print(ch.upper(), end="")
    顯示答案

    答案

    GO

    解析: 走訪字串得到單個字元,upper() 逐個轉大寫;end='' 去掉換行,字母之間沒有分隔符,所以連著列印,結果就是 GO。

  10. 輸出預測q0347

    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 正常結束時執行。

繼續保持練習節奏。

完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。

開啟完整練習