〔程式教學〕Python 中的迴圈 (Loop) 觀念
前言
前一篇文章中,我們學習了如何在 Python 中撰寫流程控制的語法,透過 if、elif 與 else 關鍵字能夠在程式中加入「條件的判斷」,並執行相對應的程式碼。在本篇文章中,我們將延伸流程控制中「條件」的概念,來解釋程式中的「迴圈」(Loop) 。
迴圈 (Loop) 是什麼
在前一篇文章中,我們介紹過上篇這張圖。所謂的「流程控制」,就是由「條件」與條件成立時要執行的「任務」所組成。因此,電腦在執行此程式時,會先對條件進行判斷,依照判斷結果執行相對應的程式碼,整個程式才算是執行結束。
假如我們希望電腦在執行此程式時,可以「重複」進行條件的判斷呢?如下圖所示,在執行完相對應程式碼後,程式並沒有結束,而是「重新」回到條件的判斷。
你注意到了嗎?「重複」、「重新」或是「再一次」指的就是「迴圈」(Loop)。在程式的世界中,「迴圈」的概念相當常見,只要我們希望『符合某一條件,就「重複」執行某段程式碼』,就會透過迴圈的概念來實作。
Python 中的迴圈語法
如下方的列表所示,在 Python 與大多數的程式語言中,迴圈的語法通常會透過兩種關鍵字來實現,分別是「while」與「for」。兩種關鍵字所寫出來的迴圈,就稱為「while loop」與「for loop」。
- for → for loop
- while → while loop
其中,while loop 的觀念就是我們上面對迴圈的介紹,因此我們先從 Python 中的 while loop 語法開始介紹。
Python 中的 while loop
我們直接觀察以下的程式碼:
num = 0 while num < 3: print('number: ' + str(num)) num = num + 1
在程式碼中,我們使用了 while 關鍵字,並在關鍵字後方加上條件與冒號,滿足條件的程式碼則是換行並縮排。
下方為此程式的輸出,我們可以發現迴圈中的程式碼總共被執行了三次。
number: 0 number: 1 number: 2
我們必須注意到在上方程式碼中,一定是「先」確定條件成立,「後」執行迴圈內部的程式碼。接著,讓我們深入了解上述程式碼的執行流程:
第 1 個 Loop
- 判斷條件 num < 3。因為此時 num 為 0,故條件成立。
- 執行迴圈內的程式碼。「number: 0」被顯示出來,num 被加上 1,變成 1。
第 2 個 Loop
- 判斷條件 num < 3。因為此時 num 為 1,故條件成立。
- 執行迴圈內的程式碼。「number: 1」被顯示出來,num 被加上 1,變成 2。
第 3 個 Loop
- 判斷條件 num < 3。因為此時 num 為 2,故條件成立。
- 執行迴圈內的程式碼。「number: 2」被顯示出來,num 被加上 1,變成 3。
第 4 個 Loop
- 判斷條件 num < 3。因為此時 num 為 3,故條件不成立。
從上面的執行流程,我們可以清楚觀察到:「迴圈條件」被執行了 4 次;「迴圈內部的程式碼」被執行了 3 次。
接著,我們再透過一個程式範例,熟悉 while loop 的撰寫。下方的程式碼,透過 while loop 計算 1 到 100 的總和:
sum = 0 num = 1 while num <= 100: sum += num num += 1 print(f'sum: {sum}')
下方為程式實際的執行流程:
第 1 個 Loop
- 判斷 Loop 條件「num <= 100」。此時 num 為 1,故條件成立。
- 執行 Loop 程式碼「sum += num」,相當於「sum = sum + num」,此時 sum 為 1、num 為 2。
第 2 個 Loop
- 判斷 Loop 條件「num <= 100」。此時 num 為 2,故條件成立。
- 執行 Loop 程式碼「sum += num」,相當於「sum = sum + num」,此時 sum 為 1 + 2、num 為 3。
第 3 個 Loop
- 判斷 Loop 條件「num <= 100」。此時 num 為 3,故條件成立。
- 執行 Loop 程式碼「sum += num」,相當於「sum = sum + num」,此時 sum 為 1 + 2 + 3、num 為 4。
第 4 個 Loop
- 判斷 Loop 條件「num <= 100」。此時 num 為 4,故條件成立。
- 執行 Loop 程式碼「sum += num」,相當於「sum = sum + num」,此時 sum 為 1 + 2 + 3 + 4、num 為 5。
…
第 100 個 Loop
- 判斷 Loop 條件「num <= 100」。此時 num 為 100,故條件成立。
- 執行 Loop 程式碼「sum += num」,相當於「sum = sum + num」,此時 sum 為 1 + 2 + 3 + 4 + … + 100、num 為 101。
第 101 個 Loop
- 判斷 Loop 條件「num <= 100」。此時 num 為 101,故條件不成立。
由此我們可以清楚的觀察到 while loop 由 1 加到 100 的過程。
需要特別補充的是最後一行的 print() 函式。除了透過「字串加法」將字串與變數合起來之外,我們也可以透過 f string 的方式將變數插入到字串中。
# 字串加法: print('sum: ' + str(sum)) # f string print(f'sum: {sum}')
當我們使用 f string 的寫法時,需要在字串前方加上 f,並在字串中需要插入變數的地方透過{}將變數包起來。透過 f string 可以更簡單的將字串與變數和在一起。
break 與 continue
提到迴圈 (Loop) 的觀念時,break 與 continue 兩個角色一定會被介紹到。
- break:立即離開迴圈
當迴圈的條件成立後,電腦會執行回圈內部的程式碼。我們可以在迴圈內加上 break,當電腦執行到這一行時,就會直接離開迴圈。
sum = 0 num = 1 while num <= 100: sum += num num += 1 break print(f'sum: {sum}')
在上述的程式碼中,最終的 sum 會是 1。因為當電腦第一次進入迴圈後,遇到 break 時,就會馬上離開迴圈。如果直接在迴圈內部的程式碼加上 break 就會失去迴圈「重複」執行的目的。因此,我們通常會透過 if 進行判斷,如果條件滿足,才透過 break 離開迴圈。
sum = 0 num = 1 while num <= 100: sum += num num += 1 if sum > 1000: break print(f'sum: {sum}')
在上面這段程式碼中,我們判斷如果「sum > 1000」才執行 break。
- continue:直接回到迴圈條件判斷
當迴圈的條件成立後,電腦會執行回圈內部的程式碼。我們可以在迴圈內加上 continue,當電腦執行到這一行時,就會直接回到迴圈的條件進行判斷。
sum = 0 num = 1 while num <= 100: sum += num num += 1 print(f'sum: {sum}')
在上面這段程式碼中,每一次迴圈的最後都會將 sum 的數值顯示出來。但是如果我們希望只有當 sum > 4000 時才顯示,我可以透過 continue 直接忽略迴圈內剩下的程式碼,回到迴圈條件判斷的地方:
while num <= 100: sum += num num += 1 if sum < 4000: continue print(f'sum: {sum}')
只要 sum < 4000,電腦就會執行到 continue 這行程式碼,馬上結束這一個迴圈,回到迴圈條件判斷的階段。
這邊需要特別注意的是,break 與 continue 只能寫在迴圈內部,也就是只能用在 while loop 與 for loop 當中。
Python 中的 for loop
了解完 while loop 後,我們接著學習 Python 中的 for loop。如下圖所示,while loop 是以「條件」來決定目前的迴圈是否要執行;for loop 則是透過「次數」決定好要執行幾次迴圈。
在 Python 中,我們經常會透過 range() 函式,指定 for loop 要執行的次數。
for num in range(10): print('Hello World')
上方程式碼為 Python 中基本的 for loop 範例。Python 中 for loop 的語法通常由下列元素所組成:
- for 關鍵字
- 變數名稱 → 上方使用 num
- in 關鍵字
- 序列 (Sequence) 或可迭代的物件 (Iterable Object) → 上方使用 range(10)
「序列 (Sequence) 或可迭代的物件 (Iterable Object)」這一個名詞實在是看起來很可怕,但是對於初學著的我們而言,我們可以先把它想成「一連串的物件」。如下方列出很多「一連串的物件」:
- [1, 2, 3, 4, 5, 6, 7, 8]
- [“apple”, “orange”, “132”, “456”, “789”]
- [-1, -6, 65, 32]
- [2.5, 3.0, 5.2, 3.1]
因此,range(10) 我們可以先把它想成 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] (注意是 0 到 9,不是 1 到 10)。for num in range(10) 則變成 for num in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。按照字面上的意思,每一次的迴圈中 num 都會「依序」對應到 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 中的每一個數字。因此,透過 range(10) 指定迴圈總共執行 10 次。
for num in range(10): print(f'num: {num}')
上方程式碼直接將 num 每一次對應到的數字顯示出來。
我們一樣可以在 for loop 中使用 break 與 continue 等關鍵字:
for num in range(10): if num == 5: break print(f'num: {num}')
在上方程式碼中,如果 num 為 5 時,就直接離開迴圈。
接著,我們再透過一個程式範例,熟悉 for loop 的撰寫。下方的程式碼,透過 for loop 計算 1 到 100 的總和:
sum = 0 for num in range(101): sum += num print(f'sum: {sum}')
結語
在本篇文章中,我們學習了迴圈 (Loop) 的觀念,以及如何在 Python 中撰寫 for loop 與 while loop 的語法。此外,我們也學習到迴圈的好朋友「break」與「continue」的作用。在下一篇文章中,我們將會正式學習「函式」(Function) 的概念。
👣 👣 👣 我喜歡撰寫程式開發、資料科學領域相關的文章,希望可以透過簡單的文字解釋複雜的觀念!如果你也有興趣可以到我的其他平台逛逛哦!
👉🏻 DataSci Ocean
👉🏻 YouTube
👉🏻 Instagram
《Python 零基礎教學》系列文章
01 - Google Colaboratory 介紹
02 - Python 中的加減乘除
03 - Python 中的變數與資料類型
04 - 第一個 Python 程式
05 - Python 中的 Boolean Operator (1)
06 - Python 中的 Boolean Operator (2)
07 - Python 中的 IF, ELSE IF, ELSE