不間斷 Python 挑戰 Day 11 - while 迴圈

更新於 發佈於 閱讀時間約 7 分鐘

另一種迴圈的形式是while迴圈,和for迴圈常常可以達到相同的功能,差別在於for迴圈是在一定的範圍內迭代,例如從1到100,或是串列裡的每一個元素;而while迴圈是一個條件判斷的迴圈,當滿足這個條件就執行迴圈的內容,不滿足時就跳出迴圈。

while 迴圈

while迴圈的基本語法如下,只要滿足condition1條件,就重覆執行A區塊程式:

while condition1:
Do A

while迴圈和for迴圈常常是可以互相改寫,並沒有一定的寫作準則,例如以下的例子,想要印出從0到9的整數,使用for迴圈和while迴圈都可以達到一樣的目的。

使用for迴圈:

# for loop
for i in range(10):
print(i, end=" ")

使用while迴圈:

# while loop
i = 0
while i < 10:
print(i, end=" ")
i += 1

執行結果:

0 1 2 3 4 5 6 7 8 9

但在一些情況下,例如需要迭代的次數未知,或是某些條件是透過與使用者的互動才會產生,那使用while迴圈會更適合一些。

以下範例展示,假設我們在銀行存入10000元,年利率為1%,至少需要經過多少年才能將本金翻倍,由於「多少年」是未知數,但我們知道條件是「本金翻倍」,因此這裡適合使用while迴圈:

principal = 10000
year = 0
interest_rate = 0.01

while principal < 20000:
principal = principal * (1 + interest_rate)
year += 1

print(year)

執行結果顯示70年才能將本金翻倍。

70

另一個例子簡單展示一個和使用者互動的例子,當使用者輸入「q」時,跳出迴圈:

input_chr = ""
while input_chr != "q":
input_chr = input("輸入q結束:")

執行結果:

輸入q結束:a
輸入q結束:f
輸入q結束:e
輸入q結束:g
輸入q結束:q

巢狀while迴圈 (Nested while loop)

和for迴圈一樣,while迴圈也允許巢狀迴圈,其語法如下:

while condition1:
while condition2:
Do something

引用在進階for迴圈裡九九乘法表的例子,使用while迴圈我們也可以這樣寫:

i = j = 1
while i < 10:
while j < 10:
print("%d*%d=%-4d" % (i, j, i * j), end=" ")
j += 1
i += 1
j = 1
print()

無窮迴圈

無窮迴圈指的就是永遠不會停止的迴圈。使用無窮迴圈通常有其目的,例如程式要隨時監控外界訊號的中斷或使用者的輸入,來決定要做出什麼樣的反應,如果不是,常常是程式寫錯了,設定了一個永遠不會被違背的條件,讓程式永遠停在迴圈內無法往下執行,寫作時必須特別注意。

最簡單的一個無窮迴圈可以這樣寫,但我這邊加上註解,因為一旦真的這樣寫,程式就永遠卡住,必須試試「ctrl + C」或是停止編譯器來終止程式運行。

# while True:
# Do something

break指令

while迴圈和for迴圈一樣,也可搭配break指令來使用,其基本語法如下,表示在while迴圈內,當滿足了condition2的條件後,可以在執行完B區塊程式後直接跳出迴圈:

while condition1:
Do A
if condition2:
Do B
break
Do C

以前面和使用者互動的例子來說,結合無窮迴圈與break指令,我們也可以這樣寫:

input_chr = ""
while True:
input_chr = input("輸入q結束:")
if input_chr == "q":
break

continue指令

while迴圈也可以搭配continue指令來使用,其基本語法如下,表示當滿足了condition2的條件之後,可以在執行完B區塊程式後直接進入下一個迴圈,而不執行C區塊程式:

while condition1:
Do A
if condition2:
Do B
continue
Do C

基本for迴圈的continue指令段落,我們使用for迴圈和continue指令,來印出range()範圍內的奇數,同樣也可以用while迴圈來改寫:

i = 0
odd_list = []
while i < 10:
i += 1
if i % 2 == 0:
continue
odd_list.append(i)
print(odd_list)

執行結果:

[1, 3, 5, 7, 9]

else指令

else指令是使while迴圈在條件不滿足後,執行另一個程式區塊,其基本語法如下,當condition1滿足時,執行A區塊程式,一旦condition1條件不滿足後,就執行B區塊程式,再結束while迴圈:

while condition1:
Do A
else:
Do B

在上面continue指令的例子中,我們可以多加一個else指令,做為while迴圈結束時的提示訊息:

i = 0
odd_list = []
while i < 10:
i += 1
if i % 2 == 0:
continue
odd_list.append(i)
else:
print(f"End of counting odd number to {i-1}")
print(odd_list)

執行結果:

End of counting odd numbers to 9
[1, 3, 5, 7, 9]

程式範例

https://github.com/wjweng/marathon_python/blob/master/Day1_to_25/marathon_python_day11.py

留言
avatar-img
留言分享你的想法!
avatar-img
Wei-Jie Weng的沙龍
48會員
36內容數
Wei-Jie Weng的沙龍的其他內容
2022/07/13
對於程式的初學者而言,理解程式的流程、迴圈的進行、或是變數的變化會需要一定程度將程式在腦中進行運算的能力,要一段時間熟悉與適應,尤其是當程式執行的結果不如預期時,往往是計算的過程和自己所想像的不同,這時又更難靠自己的能力找出錯誤。因此,這邊要介紹的這個工具可以將程式執行的過程逐行將變數的變化視覺化地
Thumbnail
2022/07/13
對於程式的初學者而言,理解程式的流程、迴圈的進行、或是變數的變化會需要一定程度將程式在腦中進行運算的能力,要一段時間熟悉與適應,尤其是當程式執行的結果不如預期時,往往是計算的過程和自己所想像的不同,這時又更難靠自己的能力找出錯誤。因此,這邊要介紹的這個工具可以將程式執行的過程逐行將變數的變化視覺化地
Thumbnail
2022/07/13
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
2022/07/13
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
2022/06/23
JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式。
Thumbnail
2022/06/23
JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
在流程控制中,最常用的就是for loop 或是 while loop 語法了。 最常見的場景就是根據條件判斷式,重複執行特定的指令。 如果要在python寫出類似C/C++ for loop,可以怎麼寫呢? 透過索引去進行迭代 for var in range( start=0, sto
Thumbnail
在流程控制中,最常用的就是for loop 或是 while loop 語法了。 最常見的場景就是根據條件判斷式,重複執行特定的指令。 如果要在python寫出類似C/C++ for loop,可以怎麼寫呢? 透過索引去進行迭代 for var in range( start=0, sto
Thumbnail
for 和 while 迴圈,回圈觀念就是重複,想像自己是一位跑者,需要繞操場十圈才能抵達終點,這十圈在同一個操場上奔跑,這個概念轉換回來解釋程式的回圈就是一直做重複的事情。 for 迴圈是 Python 中的一個迴圈控制結構,用於對集合(例如清單、字串、元組等)中的每個元素進行迭代操作
Thumbnail
for 和 while 迴圈,回圈觀念就是重複,想像自己是一位跑者,需要繞操場十圈才能抵達終點,這十圈在同一個操場上奔跑,這個概念轉換回來解釋程式的回圈就是一直做重複的事情。 for 迴圈是 Python 中的一個迴圈控制結構,用於對集合(例如清單、字串、元組等)中的每個元素進行迭代操作
Thumbnail
我們探討了while迴圈的使用,不同於for迴圈,while迴圈以條件式判斷為基礎,而非限定重複次數。我們介紹了使用break語句強制結束迴圈,以及使用continue語句跳過特定程式碼並返回迴圈開頭,同時,我們提及了無窮迴圈的概念,強調了在迴圈中必須更改迴圈變數的值,以避免無窮迴圈的發生。
Thumbnail
我們探討了while迴圈的使用,不同於for迴圈,while迴圈以條件式判斷為基礎,而非限定重複次數。我們介紹了使用break語句強制結束迴圈,以及使用continue語句跳過特定程式碼並返回迴圈開頭,同時,我們提及了無窮迴圈的概念,強調了在迴圈中必須更改迴圈變數的值,以避免無窮迴圈的發生。
Thumbnail
迴圈對象可以是列表或範圍,透過定義重複動作的內容,我們可以在迴圈中執行指定次數的操作。利用range函數,我們可以自訂重複執行的次數。同時,我們也介紹了break和continue的使用,以及巢狀迴圈的特性。
Thumbnail
迴圈對象可以是列表或範圍,透過定義重複動作的內容,我們可以在迴圈中執行指定次數的操作。利用range函數,我們可以自訂重複執行的次數。同時,我們也介紹了break和continue的使用,以及巢狀迴圈的特性。
Thumbnail
在這篇Python學習筆記中,我們研究了條件判斷和迴圈,透過if、else、elif條件語句,我們能根據條件執行程式碼。使用for迴圈和while迴圈,我們可以重複執行程式碼塊。同時,我們還介紹了break和continue等控制流程的使用方法。這些概念將幫助你寫出更靈活和有趣的程式!
Thumbnail
在這篇Python學習筆記中,我們研究了條件判斷和迴圈,透過if、else、elif條件語句,我們能根據條件執行程式碼。使用for迴圈和while迴圈,我們可以重複執行程式碼塊。同時,我們還介紹了break和continue等控制流程的使用方法。這些概念將幫助你寫出更靈活和有趣的程式!
Thumbnail
什麼是迴圈?就是不停地、不斷地在做同樣的事,所以才稱「重複性迴圈」,因為一直再輪迴,那麼像上一篇的例子,不到60分就要一直補考是要怎麼用呢?重複性迴圈主要有for迴圈、while迴圈、do...while迴圈,有何不一樣?接下來就來介紹一下它們? 一、for迴圈 這一個會運用到初始值、繼續執行的條件
Thumbnail
什麼是迴圈?就是不停地、不斷地在做同樣的事,所以才稱「重複性迴圈」,因為一直再輪迴,那麼像上一篇的例子,不到60分就要一直補考是要怎麼用呢?重複性迴圈主要有for迴圈、while迴圈、do...while迴圈,有何不一樣?接下來就來介紹一下它們? 一、for迴圈 這一個會運用到初始值、繼續執行的條件
Thumbnail
C# 迴圈(C# 教學) – for loop 可以說是程序編寫的基本功. 運用LOOPING可以減少程式碼, 只需透過for內的BLOCK, 就可把程式碼重用, 避免要不停把程序碼重覆. 以下我會介紹迴圈的結構, 運行方式, 如何離開迴圈, 以及迴圈的種類. 2) 迴圈的種類 3) 迴圈的用法
Thumbnail
C# 迴圈(C# 教學) – for loop 可以說是程序編寫的基本功. 運用LOOPING可以減少程式碼, 只需透過for內的BLOCK, 就可把程式碼重用, 避免要不停把程序碼重覆. 以下我會介紹迴圈的結構, 運行方式, 如何離開迴圈, 以及迴圈的種類. 2) 迴圈的種類 3) 迴圈的用法
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News