為什麼要有迴圈?
原因只有一個,那就是人類很懶,假設今天要輸出 100 萬筆資料,我們需要一筆一筆手刻出來嗎?在被主管開除之前,我們應該會先無聊到開始裸奔吧。
這個時候善用迴圈,用一組程式碼就能搞定大量的重複工作:
for i in range(0, 1_000_000):
print(i)
拆解 for 迴圈運作流程
上面以 for
關鍵字起頭的迴圈被稱為 for 迴圈,除了 Python 之外,Golang、JavaScript 等等眾多程式語言也都有類似的語法。本篇文章就以 Python 為例,拆解 for 迴圈的運作流程。
- 迴圈從 i 等於 0 啟動 ->
i in range(0)
- 檢查若 i 不少於 1,000,000 就跳出迴圈運作 ->
range(0, 1_000_000)
,否則繼續執行以下動作:- 列印出 i 變數 ->
print(i)
- i 變數值加一 (
range
預設會加一) - 回到第二步驟檢查 i 是否不少於 1,000,000
- 列印出 i 變數 ->
最後我們會看到 0 ~ 999,999 列印出來。
在 Python 中,
range(a, b)
會包含a
但不包含b
。所以range(0, 1_000_000)
才不會列印出 1,000,000。
Python 的空格很重要!
雖然可以靠 IDE 的自動矯正功能避免,但 Python 由於語法特定,for 迴圈的執行程式碼需要做好空格 (indentation)。我自己是習慣按 tab 鍵一次空四格。也要注意,執行程式碼每一行都要空一樣的格數,否則編譯器會顯示錯誤!
range
的第三個參數 - step
前面提過 range
會預設給計數器加一,但其實透過 step 參數,我們可以指定每次遞迴要加上去的數目。
for i in range(0, 10, 2):
print(i)
# prints:
# 0
# 2
# 4
# 6
# 8
除了正數一路往上加之外,若帶入負數的話,等於每次遞迴都減去固定的數目。
for i in range(3, 0, -1):
print(i)
# prints:
# 3
# 2
# 1
While 迴圈
Python 除了 for 迴圈之外,還提供了另一種迴圈叫做 while。我們會給 while 迴圈一個條件,只要該條件滿足 True
,那迴圈就會持續執行下去,所以務必要小心陷入無限迴圈,就像我們的焦慮。
while 1:
print("1 evaluates to True")
# prints:
# 1 evaluates to True
# 1 evaluates to True
# (...無限輪迴)
所以通常 while 迴圈的條件會是比較算式或變數,再次提醒,條件將影響到 while 迴圈何時結束,或是陷入無限輪迴當中。以下範例中,我們用變數當作計數器,並且在每次符合條件的遞迴中更新計數器變數,確保程式最終能脫離迴圈。
num = 0
while num < 3:
num += 1
print(num)
# 1
# 2
# 3
# (因為 num >= 3,不符合條件,迴圈終止)