還在一行行 print()
重覆貼嗎?把「切菜到沒有食材為止」這種日常流程,換成程式語言就是:初始化 → 重複 → 結束條件。
這一篇用生活比喻帶你入門迴圈,分清楚何時用 定迭代的 for
(已知要跑幾次),何時用 不定迭代的 while
(條件成立就一直跑),寫出可擴充、可維護、也不怕清單變長的程式。

什麼是迴圈(Loops)?
在日常生活中,我們傾向於重複許多過程而不自覺。就像我們在烹飪時,需要準備食材並將它們切成小塊。我們不斷地切,直到所有食材都達到合適的大小,這時我們才停止切菜。
初始化
我們準備好烹飪,有一堆需要切的食材。我們從第一個食材開始。
重複
我們持續切菜。我們在每個食材上重複進行切菜的動作,一次處理一個食材。
結束條件
當我們發現沒有更多食材需要切時,我們停止切菜。
在程式設計中,使用初始化、重複和結束條件的這個過程被稱為迴圈。在迴圈中,我們執行迭代(重複任務)的過程。
為什麼需要迴圈?
讓我們探討一下如果不能使用迴圈,程式設計會是什麼樣子。
假設我們有一個食材列表,並且我們想打印列表中的每一個元素:
ingredients = ["milk", "sugar", "vanilla extract", "dough", "chocolate"]
不使用迴圈
print(ingredients[0])
print(ingredients[1])
print(ingredients[2])
print(ingredients[3])
print(ingredients[4])
問題
- 代碼冗長
- 難以維護
- 無法適應不同大小的列表
- 容易出錯
如果我們的列表有10個、24601個或者100,000,000個元素呢?寫出所有的print語句將會非常耗時,而且我們最終可能仍然會有不一致和錯誤。
迴圈可以幫助我們用少量的代碼處理任意大小的數據集合,提高代碼的可讀性和可維護性。

Python中的迴圈類型
不定迭代
迴圈執行的次數取決於條件被滿足的次數。這類迴圈在執行前無法確定具體的執行次數。
例如:搜尋直到找到特定元素為止。
在Python中使用while迴圈實現
定迭代
迴圈將執行的次數在執行前就已經定義(通常基於集合大小)。
例如:處理列表中的每個元素。
在Python中使用for迴圈實現
通常,我們會發現迴圈被用來迭代一個集合中的項目。在上面的切菜例子中,我們可以將要切的食材視為我們的集合。這是一種定迭代形式,因為我們事先知道我們的集合有多長,因此知道我們需要迭代多少次來處理所有食材。
無論是處理短字串這樣的小集合,還是處理從1到10,000,000的數字範圍這樣的大集合,迴圈都能幫助我們高效地處理資料。
For迴圈:基本介紹
For迴圈是一種定迭代,它在集合上進行操作。我們事先知道迴圈需要迭代多少次,因為我們將處理一個預定義長度的集合。
For迴圈的結構
for <臨時變數> in <集合>:
<動作>
組成部分
- for 關鍵字:表示for迴圈的開始
- 臨時變數:用於表示迴圈當前處理的集合元素值
- in 關鍵字:分隔臨時變數和用於迭代的集合
- 集合:要迭代的集合,例如列表
- 動作:在迴圈的每次迭代中要做的事情
範例
ingredients = ["milk", "sugar",
"vanilla extract", "dough",
"chocolate"]
for ingredient in ingredients:
print(ingredient)
輸出:
milk
sugar
vanilla extract
dough
chocolate
For迴圈:注意事項
臨時變數名稱
臨時變數的名稱是任意的,不需要事先定義。但最佳實踐建議我們使用具有描述性的臨時變數名稱。
for i in ingredients:
print(i)
for item in ingredients:
print(item)
由於每次迭代都在訪問一個食材,所以將臨時變數命名為ingredient比i或item更有意義。
縮排
注意在所有這些示例中,print語句都是縮排的。for迴圈聲明後同一縮排級別的所有內容都包含在迴圈體中,並在迴圈的每次迭代中運行。
for ingredient in ingredients:
# 這個縮排級別的任何代碼
# 都將在迴圈的每次迭代中運行
print(ingredient)
如果我們忘記縮排,我們將得到IndentationError或意外的行為。
While迴圈:基本介紹
在Python中,for迴圈並不是唯一的迴圈類型。另一種類型的迴圈稱為while迴圈,它是一種不定迭代形式。
While迴圈在給定條件為真時執行一組指令。
While迴圈的結構
while <條件語句>:
<動作>
範例
count = 0
while count <= 3:
# 迴圈體
print(count)
count += 1
輸出:
0
1
2
3
運作原理
- count初始定義為0。while迴圈中的條件語句是count <= 3,在迴圈的初始迭代中這是真的,所以迴圈體執行。在迴圈體內,count被打印然後增加1。
- 當迴圈的第一次迭代完成後,Python返回到迴圈頂部並再次檢查條件。第一次迭代後,count等於1,所以條件仍然評估為True,迴圈繼續。
- 這一過程持續直到count變數變為4。此時,當條件被測試時,它將不再為True,迴圈將停止。
While迴圈:注意事項
縮排
注意在我們的示例中,迴圈聲明後的代碼是縮排的。與for迴圈類似,while迴圈聲明後同一縮排級別的所有內容都在條件為真的情況下在迴圈的每次迭代中運行。
while count <= 3:
# 迴圈體
print(count)
count += 1
# 這個縮排級別的任何其他代碼
# 都將在條件為真的情況下
# 在迴圈的每次迭代中運行
如果我們忘記縮排,我們將得到IndentationError或意外的行為。
和for迴圈一樣,單行while迴圈適用於簡單的程序,但對於複雜的邏輯,使用傳統的多行形式會更清晰。