第四章3:while 循環(huán)
《Python projects for beginners》是我所見最友好的Python入門書,前段時間我組織并與幾位Python愛好者一起對此書翻譯為中文,特別感謝參與翻譯的這些小伙伴,你們辛苦了。我正在以推文形式連載出來,歡迎學習。
星期三:while循環(huán)
今天我們將討論另一種循環(huán)——while循環(huán)。昨天我們看到了循環(huán)的工作原理,以及為什么要使用for循環(huán)。當你需要根據條件而不是計數循環(huán)時,通常使用while循環(huán)。今天我們將討論基于條件的循環(huán)。
為了完成本課程,讓我們繼續(xù)從上一個筆記本文件“ Week_04”開始,并在下面添加一個標記為“ While 循環(huán)”的Markdown模塊。
編寫一個while循環(huán)
就像for循環(huán)一樣,while循環(huán)以關鍵字“ while”開始。之后,就像我們編寫一個if語句一樣,寫上一個相關的條件代碼。讓我們來看下面這個例子:
#?寫下你的第一個while循環(huán)
health?=?10
while?health?>?0:
????print(health)
????health?-=?1?#?丟失這一行將會使結果一直循環(huán)下去
#?health?-=1?等價于?health?=?health?-1
繼續(xù)運行這一代碼塊。這將會循環(huán)打印出變量health的值,直到數值不再滿足>0這一條件。在這種情況下,一旦變量health值不再大于零,while循環(huán)變會停止運行。在最后一行代碼中,我們將變量health值每次循環(huán)運行一次就會減1,直到變量health值接近于零。如果我們對變量health值不做任何修改,那么,整個while循環(huán)就會變成無限循環(huán)(遇到這種情況是極其糟糕的)。
While vs. For
雖然,我在之前已經多次解釋了我們使用每個循環(huán)類型的原因,但是,再次重申這些概念仍然是有必要的。當需要計數或迭代時,通常使用for循環(huán)。在執(zhí)行基于條件的操作時,通常使用while循環(huán)。當使用while循環(huán)時,通常會用到條件判斷的布爾值(True為符合條件,False為不符合條件)。每個循環(huán)都有他們的最適合的應用環(huán)境,但在實際操作中,在大多數情況都是看個人的喜好。一般的經驗法則是涉及到計數用for循環(huán),涉及到條件判斷則用while循環(huán)。
注意:pass、break和continue語句對于while循環(huán)也是同樣的工作原理。
無限循環(huán)
在之前的章節(jié)中,我曾提到無限循環(huán)是不好的。無限循環(huán)將使代碼持續(xù)運行直到程序中斷,或計算機關機或時間停止為止。知道了這些后,在我們創(chuàng)建項目時,請一定要避免創(chuàng)建無限循環(huán)的代碼塊。讓我們來看一個無限循環(huán)的例子:
game_over?=?False??#?等于布爾值False
while?not?game_over:??#?not?Fasle?=?True
????print(game_over)
如果你要在一個代碼塊中運行此程序,最終結果便是,你將不得不關閉Jupyter Notebook并重新啟動它(或至少重新啟動內核)。這是因為game_over變量從不變沒有變?yōu)門rue,while循環(huán)的條件一直符合并不斷運行,直到game_over變量變?yōu)門rue。在撰寫循環(huán)代碼的時候,我們一定要確保有退出循環(huán)的方法,無論是通過break中斷所有循環(huán),還是通過continue中斷當前條件而運行下一條件循環(huán)。
嵌套循環(huán)
一個循環(huán)內包含另一個循環(huán)的概念就是我們所說的嵌套循環(huán)。同時,循環(huán)概念仍然適用。使用嵌套循環(huán)時,只有內循環(huán)代碼完成運行后,外部的循環(huán)代碼才會運行。讓我們來看一個例子:
#?嵌套循環(huán)是使用兩個及以上的循環(huán)
for?i?in?range(2):??#?外循環(huán)
????for?j?in?range(3):??#?內循環(huán)
????????print(i,j)
繼續(xù)并運行這一代碼塊。一開始,這似乎有點令人困惑,因為這里有很多事情要做。讓我們用表4-4詳細說明輸出結果。
表4-4 跟蹤嵌套循環(huán)值
| 迭代 | i值 | j值 | 內循環(huán)值 | 外循環(huán)值 |
|---|---|---|---|---|
| 1 | 0 | 0 | 1 | 1 |
| 2 | 0 | 1 | 2 | 1 |
| 3 | 0 | 2 | 3 | 1 |
| 4 | 1 | 0 | 4 | 2 |
| 5 | 1 | 1 | 5 | 2 |
| 6 | 1 | 2 | 6 | 2 |
總的來說,從表4-4中可以看到,內部循環(huán)一共運行6次(3次在外循環(huán)為數值1時,3次是外循環(huán)數值為2時),外部循環(huán)運行2次。而i值也僅在外循環(huán)運行時才會遞增,直到內循環(huán)完成后才運行外循環(huán)。內循環(huán)必須每次從0到3(不包括3)計數才能運行下一個 外循環(huán)進行迭代。
星期三練習
1.用戶輸入:編寫一個while循環(huán),每次循環(huán)都會要求用戶輸入后才可運行,直到他們鍵入“quit”命令才會停止。
2.雙循環(huán):在while循環(huán)中編寫for循環(huán),從0到5進行計數,當循環(huán)到等于3時,所設條件變量game_over為True并中斷整個while循環(huán)。while循環(huán)只有在條件變量game_over為True時,才會停止循環(huán),而輸出結果只有0,1,2。
小提示:使用break語句,防止程序陷入無限循環(huán)。
今天是短短的一天,因為循環(huán)概念不論對于while循環(huán)還是for循環(huán)都是相同的。但請記住,while循環(huán)用于條件循環(huán),而for循環(huán)則用于進行計數/迭代。
