Python while 迴圈

Python while 迴圈(loop)基本認識與3種操作

while迴圈,當陳述的條件成立,便會一直執行的迴圈。

小心,別掉入無限迴圈。

while陳述句(statement)所建立的迴圈不像for迴圈,需要在一定的範圍內迭代;也不像if陳述句,只存在執行一次或不執行的狀況。只要陳述的條件為真Truewhile迴圈就會持續到天荒地老,或者電腦當掉。

如果你對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陳述句的條件為真時,才會執行縮排的工作內容。

陳述的條件你可以搭配比較運算子(==!= <<=>>=)、布林運算子(andornot) 或是成員運算子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就會跳出迴圈,無論是whilefor迴圈都會馬上跳出。

使用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則會進行兩個動作:

  1. 遇到 continue 就停住,不執行其後的程式碼。
  2. 跳到迴圈的開頭,再繼續執行程式碼。

帳號密碼的輸入很適合用whilecontinue的來運作。

下方的程式碼就運作了一個簡單帳號密碼機制,運用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 迴圈的朋友們有所幫助,讓你可以進入好的學習迴圈,跳脫苦惱不解的撞牆期。

延伸閱讀:

自學Python爬蟲課程-超過10堂線上課程教你爬蟲應用

5本Python書推薦,強化你的程式語言觀念

12個入門Python線上課程:讓你快速學會寫程式

學Python可以做什麼:9個Python應用報你知

Python觀念,從 = 開始

Python for 迴圈(loop)的基本認識與7種操作

Python if 陳述句的基礎與操作

Python字串基礎與20種常見操作

Python串列(list) 基礎與23個常用操作

Python有了串列(list),為何還要有元組(tuple) ?

Python字典(dictionary)基礎與16種操作

Python正規表示式:不一定要會,但會了超省力

在〈Python while 迴圈(loop)基本認識與3種操作〉中有 3 則留言

  1. 許多書籍介紹while的時候,都鮮少解釋i = i + 1 的邏輯,導致新手就算了解了迴圈的意義,卻不了解運算過程,有學等於沒學,畢竟令人困惑的工具很難相信,但這篇文章中講解得相當仔細,是很棒的新手教學文。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *