專項練習 · 8 分鐘閱讀

Python while 迴圈練習:覆蓋大多數問題的 5 個模式

大多數 while 迴圈題都是五個基本模式的變體。先認出模式,再寫條件和更新語句,就不用憑感覺試。

模式 1:讓條件逐步變為假

先設定一個值,測試它,再在迴圈體裡修改它。更新語句不是可選項,它決定迴圈能否結束。執行前先預測輸出。

count = 3
while count > 0:
    print(count)
    count -= 1
print("Liftoff")

可預測的倒計時

模式 2:遇到哨兵值停止

哨兵值是一個表示「停止」的特殊值。同時檢查索引和值,避免迴圈越過序列末尾。這和「一直讀取輸入,直到使用者輸入 quit」是同一個思路。

commands = ["start", "check", "quit", "ignored"]
i = 0
while i < len(commands) and commands[i] != "quit":
    print(commands[i])
    i += 1

在哨兵值前停止

模式 3:用 break 提前退出

當停止條件寫在迴圈體裡更自然時,用 break。把退出語句放在觸發條件附近,讀者就不用到處尋找迴圈的出口。

prices = [3.0, 6.0, 4.5]
i = 0
while i < len(prices):
    if prices[i] > 5:
        print(prices[i])
        break
    i += 1

找到第一個比對項

模式 4:累加到上限

在迴圈前建立累加器,在迴圈內更新,在迴圈結束後列印。條件裡的上限可以避免意外地無限累加。先手算前兩次迭代,再相信結果。

total = 0
n = 1
while total < 10:
    total += n
    n += 1
print(total)

有上限的累加

偵錯死迴圈

如果迴圈永遠不結束,先在迴圈體頂部列印迴圈變數。檢查更新是否在迴圈內、條件運算子是否正確,以及某個分支是否跳過了更新。然後用小輸入重新執行。

n = 0
while n < 3:
    print("top", n)
    n += 1
print("done", n)

觀察變化中的值

你的練習清單

常見問題

什麼時候用 while 而不是 for?

重複次數未知時用 while,例如讀到哨兵值或反覆重試直到條件改變。已經有集合或已知範圍時,用 for。

為什麼我的 while 迴圈永遠不結束?

條件可能永遠不會變成假。檢查計數器更新、比較運算子,以及 continue 是否跳過了更新。

break 是不好的寫法嗎?

不是。break 能讓提前退出更清楚時就可以用。一個迴圈裡出現太多 break,通常說明應該拆成更小的步驟。

練習 while 迴圈

12 道題,覆蓋條件、計數器、break、continue 和安全退出。

打開練習

繼續閱讀: