尚未建立名稱
能量:0
我的帳號中心
問 學Bot 任何問題!
首頁&搜尋
最愛&收藏
所有課程
分享資源
帳號設定
關於學呀
線上募款
Python中的while迴圈
編輯章節
EDU-MD
Google 教室
加至書籤
# while 迴圈 在上一個章節中,我們學習了可以將列表一項一項跑過的 **[for 迴圈](/view/99027b856f?subj=python)**,但是在 Python 中,迴圈可不只 for 迴圈一種。回想一下 for 迴圈的語法,我們必須先有一個**列表**,像是: ``` names = ["Bob", "Amy", "Dan"] for name in names: print(name) ``` 或是我們要事先知道迴圈執行幾次,接著使用 `range()`,像是: ``` for i in range(0, 5): print(i) ``` 然而,如果我們今天沒有一個確定的列表,也沒有一個確定的執行次數,那麼我們要怎麼進行迴圈呢?想像一下,假設你要設計一個網站,會不停跳出問題來,直到使用者回答問題為止。既然我們不知道使用者要在問題出現幾次之後才會回答問題,因此迴圈得要能夠一直執行,並且沒有次數限制。 這樣的迴圈,for 就比較不適合使用,因為我們沒有辦法在一開始就確定迴圈執行的總次數。在這種情況下,**while 迴圈**就派上用場了。 ## while 迴圈 還記得當初我們學習過的 **[if 判斷式](/view/9c4261eaf9?subj=python)** 嗎?讓我們用簡單的例子來複習一下: ``` a = 3 if a > 2: print("a大於2") else: print("a不大於2") ``` if 判斷式後的程式只有在條件為 True 時才會執行,像是在這個例子中,因為 `a > 2` 的條件為真,因此程式被執行了。while 迴圈與 if 判斷式也有相同的邏輯,讓我們來看看下面這個例子: ``` a = 5 while a > 0: print(a) a -= 2 ``` 這段程式的執行結果為: ``` 5 3 1 ``` 為什麼呢?讓我們仔細地看看這段程式想要表達什麼吧!在第一行時,我們宣告了一個變數 a,並且將其值定義為 5。接著到了第二行,碰到了 while 迴圈了。回想一下剛剛說的,while 迴圈跟 if 判斷式一樣,只有在條件為 True 時才會執行。對於此時來說,我們的條件是 `a > 0`,而 a 等於 5,因此條件符合,程式執行。 進入迴圈後,電腦於螢幕上 `print` 出了變數 a,也就是 5。到了第四行,a 的值被減 2,因此現在 a 的值等於 3。此時,迴圈執行完了第一次,電腦會繼續嘗試執行第二次迴圈。因為這個迴圈的條件是 `a > 0`,而此時 a 等於 3,因此迴圈繼續執行。 電腦於螢幕上 `print` 出變數 a 後,將 a 的值再度減少 2。現在,a 等於 1。電腦繼續嘗試執行迴圈,發現 a 等於 1,因此 `a > 0` 的條件為 True,於是電腦印出變數 a,並且將 a 減 2 變成 -1。這圈迴圈執行完了,電腦繼續嘗試執行迴圈。 然而,現在 a 等於 -1,而我們的條件說只有在 `a > 0` 時才能繼續執行迴圈。因為條件並不符合,電腦便停止執行迴圈。讓我們用下面這張圖來總結一下剛剛的程式: ![](https://raw.githubusercontent.com/zetria-org/content/main/images/z3jj4q6df.jpg) ## continue 和 break 跟 **[for 迴圈](/view/99027b856f?subj=python)** 一樣的,while 迴圈中也可以使用 `continue` 和 `break` 關鍵字。讓我們再來複習一下:`continue` 可以讓電腦跳過這次迴圈,直接執行下一次迴圈;`break` 則是可以使電腦直接結束迴圈。 既然在 for 迴圈時我們已經學習過了 `continue` 和 `break`,在此我們就直接來看看範例程式吧!假設我們要寫一個程式,要求使用者輸入「a」這個字母,如果使用者輸入「a」以外的東西,就繼續提示使用者輸入「a」,直到使用者輸入「a」為止,那麼我們可以這樣做: ``` while True: val = input("請輸入字母 a :") if val == "a": break print("你輸入了 a !") ``` 試著執行一下程式,看看會發生什麼事情吧!第一行中的 `while True:` 確保了這個迴圈會一直**無窮地循環**下去,直到迴圈中有 `break` 關鍵字出現,迫使電腦結束迴圈為止。 接著我們來看看這個有關 `continue` 的例子,我們的目標是從 50 開始,以 7 作為遞減的公差,印出所有大於 0 而且不是 4 的倍數的數。我們可以使用 while 迴圈: ``` i = 50 while i > 0: if i % 4 == 0: continue print(i) ``` 這樣一來,我們可以得到以下的結果: ``` 50 43 29 22 15 1 ``` ## while-else 和 **[for 迴圈](/view/99027b856f?subj=python)** 一樣,while 迴圈後也可以加上 else,形成一個 while-else 的結構。 else 中的程式會在 while 迴圈結束之後執行,但是只有在 while 是自然結束的情況下才執行;倘若 while 迴圈是因為 `break` 而結束,else 中的程式則不會執行。讓我們看看這兩個範例: ``` i = 5while i > 0: print(i) i -= 2 else: print("迴圈結束") ``` 將會輸出: ``` 5 3 1 迴圈結束 ``` 另一個範例: ``` i = 5 while i > 0: if i == 1: break print(i) i -= 2 else: print("迴圈結束") ``` 將會輸出: ``` 5 3 ``` 看出差別了嗎?在第一個範例中,迴圈是自然地結束,因此 else 中的程式被執行了,螢幕上印出了「迴圈結束」的字樣。反觀第二個範例,迴圈因為 `break` 而被迫結束,因此 else 中的程式沒有執行。
複製內容