while
迴圈,當陳述的條件成立,便會一直執行的迴圈。
小心,別掉入無限迴圈。
while
陳述句(statement)所建立的迴圈不像for
迴圈,需要在一定的範圍內迭代;也不像if
陳述句,只存在執行一次或不執行的狀況。只要陳述的條件為真True
,while
迴圈就會持續到天荒地老,或者電腦當掉。
如果你對for
迴圈或if陳述句不熟悉,可以閱讀〈Python for 迴圈(loop)的基本認識與7種操作〉、〈Python if 陳述句的基礎與3種操作〉。
Python while 迴圈句基本認識
先來看一個簡單的while
迴圈。
例子是這樣的,你要用Python印出1到100。你可以設定一個變數i,並在while
後頭陳述符合需求的條件,條件是只要i小於101,就把i印出來。
i = 0
while i < 101:
print(i)
i = i + 1
執行程式碼,看到下方的結果(中間的結果省略,版面有限):
0
1
2
3
中間的數字省略
99
100
使用Python while 迴圈,必須包含以下元素:
while
- 陳述的條件
- 冒號
:
- 希望迴圈幫你完成的事,請縮排
以下我們依序來看這四個元素的說明。
while
編寫while
迴圈一定要寫上while
,記得w要小寫。程式語言沒有如同英文寫作的規矩,首個英文字母不用大寫,如果大寫就會變成While變數了。
如果你對while這個英文單字不熟悉,這邊我們稍微說明一下。
while有很多意思與用法,在Python世界中,while
的英文意思比較接近「當…的時候」,如果你對while的英文用法有興趣,可以參考空中美語製作的while三大用法懶人包。

陳述的條件
前面的例子中,陳述的條件是i < 101
,用這個條件來讓Python知道它執行迴圈時,以什麼做依據,如果條件不成立它就會停止。
生活化一點的聯想就是,當你擁有100萬美元的時候,你就要退休了,不工作了!你要停止起床、上班、加班、下班、追劇或打遊戲、睡覺的迴圈。
在這個聯想中,你的條件為是否擁有至少100萬美元資產,當你的資產超過100萬美元,你就會離開迴圈,在此之前,你仍然會持續著上班族的迴圈。
Python預設while
陳述句的條件為真時,才會執行縮排的工作內容。
陳述的條件你可以搭配比較運算子(==
、!=
、<
、<=
、>
、>=
)、布林運算子(and
、or
、not
) 或是成員運算子in
來使用。
你可能常看到使用布林值True
當作條件。
while True:
這是一個會一直持續下去的循環,通常會搭配break
陳述句使用,來控制迴圈。
陳述的條件很多元,不僅止於這邊提到的,端看你的需求來訂出條件。
冒號:
while
陳述句的最後一定要加上冒號,當你加上冒號,Python解譯器會幫你在下一行縮排,如果沒有,請檢查一下你是不是忘記冒號:
了,這個重要的小螺絲釘。
希望迴圈幫你完成的事
while
陳述句冒號後的下一行,就是你希望進行迴圈的工作,例子中我們希望Python幫我們把1到100印出來,所以使用print()
函式印出i
,並在印出i之後,幫i加1,隨著迴圈一直跑,i
就會持續的累加,直到不符條件,不再小於101便會停止。
i = 0
while i < 101:
print(i)
i = i + 1
如果你對i
這個變數感到困惑,正在思考它與while
迴圈的關係,其實i
這個變數就只是一個載體的概念,幫助Python把0到100印出來的工具,否則,如果沒有變數你要讓Python印出什麼呢?
好的,有了上述這些概念,你已經學會Python while迴圈的基礎知識了。
如果還是不太清楚,沒關係下方的影片可以幫助你理順思緒。
這是CS101:Introduction to Computer Science的教學片段,課程的每個段落都有練習,推薦利用此課程學習程式語言,是免費的課程。
登入Udacity點選連結才會到此課程,未登入的使用者Udacity會將你導向另一個課程。
CS101:Introduction to Computer Science<-點此看如何上到這門課的教學
while迴圈的3種操作
while
迴圈的多元變化在於你要迴圈執行的事,所以基本的操作相對單純。
這個段落,我們介紹while
迴圈的3種操作:
- break
- else
- continue
使用break跳出迴圈
在迴圈中,只要碰到break
就會跳出迴圈,無論是while
或for
迴圈都會馬上跳出。
使用break
陳述句,你只需要打上break
,不須加其他東西。
來看個例子吧,假設你有個問安機器人,你只要啟動它,它就會向你問安How is your day?
while True:
print('How is your day?')
your_reply = input()
if your_reply == 'quit':
break
print('good bye')
執行程式碼,電腦會問你今天如何?無論你回答good、fine、great它仍會重複問你,除非你回答quit,電腦才會停止詢問。
因為我們在if
陳述句中列出了條件,當回答是quit時,就跳出迴圈,電腦跟你說完good bye便停止詢問。恩…有點煩人的問安。
How is your day?
good
How is your day?
fine
How is your day?
great
How is your day?
quit
good bye
使用else讓你知道while迴圈停止了
假設你正在教一個小小孩數字,因為還小所以只會數到5,超過5就會喊「我只會數到5」(I can only count to 5)
num = 1
while i < 6:
print(i)
i += 1
else:
print('I can only count to 5.')
執行程式的結果:
0
1
2
3
4
5
I can only count to 5.
你也可以使用else
檢查break
是否執行,不過這樣的檢查,會是在while
迴圈有被限定在一定的範圍中的時候,當while
能判斷的標的都跑完了,仍然沒遇到break
來跳出迴圈,else
就會被執行。
如果對else
如何檢查break
可以參考《精通Python》這本書,或是查看〈Python for 迴圈(loop)的基本認識與7種操作〉這篇文章的「使用else陳述句檢查break是否被呼叫」段落。
使用continue跳過這次,並繼續下一個迴圈
在英文世界裡,continue 代表繼續的意思;Python 世界中, continue
是停止執行接下來的的程式碼,返回到迴圈的開頭,重頭再執行迴圈。
continue
陳述句的用法相對 break
陳述句複雜了一點,break
很單純,就是跳出迴圈,但continue
則會進行兩個動作:
- 遇到
continue
就停住,不執行其後的程式碼。 - 跳到迴圈的開頭,再繼續執行程式碼。
帳號密碼的輸入很適合用while
與continue
的來運作。
下方的程式碼就運作了一個簡單帳號密碼機制,運用input()
函式,讓程式與使用者互動,使用者可以輸入資料與電腦互動。
詢問帳號時,如果名稱不等於'success'
字串,便會再回到while
迴圈的開頭,再問一下Account name:,不執行接下來的程式碼。
而當你輸入正確的帳密後,便會執行break
,跳出while迴圈印出'Welcome to Self Learning Success!'
while True:
print('Account name:')
name = input()
if name != 'success':
continue
print('Password, please:')
password = input()
if password == 'selflearning':
break
print('Welcome to Self Learning Success!')
你可以試著把程式碼複製到你的解譯器中(可以自己練習打最好),貼上後注意一下縮排有沒有跑掉,確認縮排正確後按下執行,就成功透由自行編寫的程式碼與電腦互動了。
進入無限迴圈要怎麼離開?
首先不用慌張,電腦不受控制的行為讓你很緊張,這個時候,你只需要按下Ctrl 與 C 鍵,同時按,或先按Ctrl 再按 C 鍵,都可以讓電腦停止無限迴圈。
又或者,你按下解譯器的停止按鈕即可,再不行就把解譯器關了,如果真的當機了,就重開機吧,沒事的。
何時使用for,何時使用while?
Python中有while
迴圈及for
迴圈,何時該使用for
迴圈 ? 何時使用while
迴圈呢?
由於上for
迴圈會在一個範圍內迭代,所以假如你的資料結構有個很明確的範圍,通常偏好使用for
迴圈。
而while
迴圈的特色在於它可以判斷條件,True
就執行迴圈,False
便跳出迴圈,所以當你需要迴圈的狀況,是你有個情境需以條件判斷的方式進行,如此便會偏好while
迴圈。
如何使用並沒有一個硬性的規定或準則,只要你能夠讓程式碼很清楚明瞭、易於理解,又可以達到簡潔的呈現就可以了。
書籍推薦
while
迴圈是你編寫程式語言的得力助手,有了while
迴圈你可以讓Python依照你設定的條件執行指定的事。
對初學者而言,while
迴圈可能不是很好懂的語法,透過實作練習觀念才會慢慢融會貫通,如果想透由小型專題練習,熟悉Python while 迴圈,推薦使用《Python 自動化的樂趣(第2版)》,在學習如何設計猜數字、剪刀石頭布的遊戲的過程中,弄懂while
迴圈。
如果你想學習while
迴圈與串列(list)或字典(dictionary)的搭配運用,推薦使用《Python程式設計的樂趣(第2版)》,書中結合串列與字典的操作示範,讓迴圈發揮更大的功用。
希望本文對學習Python while
迴圈的朋友們有所幫助,讓你可以進入好的學習迴圈,跳脫苦惱不解的撞牆期。
延伸閱讀:
很多問題看其他網站都看不懂,就看到這個網站才看懂的
許多書籍介紹while的時候,都鮮少解釋i = i + 1 的邏輯,導致新手就算了解了迴圈的意義,卻不了解運算過程,有學等於沒學,畢竟令人困惑的工具很難相信,但這篇文章中講解得相當仔細,是很棒的新手教學文。
很開心對您學習while迴圈有幫助!
0
1
2
3
4
5
I can only count to 5.
這裡是否只會出現1-5因為num 從1開始?
實際操作也不會印1-5
因為 i 沒有給定值