〔程式教學〕Python 中的迴圈 (Loop) 觀念

緯緯道來
·
·
IPFS
·
新的一年,新的開始。先從搞懂程式中的迴圈 (Loop) 觀念開始吧!

前言

前一篇文章中,我們學習了如何在 Python 中撰寫流程控制的語法,透過 ifelif 與 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 則是透過「次數」決定好要執行幾次迴圈。

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


CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

緯緯道來研究所學生,主修資訊工程,熱衷於深度學習與機器學習。初期先以基本的程式教學為主,希望我的文章能夠幫助到你!(https://linktr.ee/johnnyhwu)
  • 来自作者
  • 相关推荐

Python 中 if __name__ == “__main__” 有什麼用處

近期的心情寫照

Python Module 觀念解析