【python系統學習09】while循環

while循環

和for一樣,while也是實現循環代碼的一種。

偽代碼

先來看一段while的偽代碼,了解下其語法格式。

1# 偽代碼  2while 條件語句:  3  條件成立執行的[while子句],位於縮進後邊  4else:  5  循環完畢執行的代碼塊,位於縮進後邊

學過js的能從上邊的代碼中看出來,這和js的while基本無差。 將代碼直譯過來都是:當XXX條件成立的時候,執行XXX語句。直到條件不成立,就跳過while語句。

只不過python的特色是循環語句最後都會有自己的else語句。 當while條件語句為「假」、循環執行完畢過後,流程都會走到else裡邊執行縮進後的任務。就好像出關口、必經之路的意思。

示例代碼

來看一段示例代碼

 1whileVal = 1   2while whileVal <= 3:   3  print('while子句:', whileVal)   4  whileVal += 1   5else:   6  print('while執行完畢,跳出循環後執行了我', whileVal)   7   8# 打印結果   9# while子句: 1  10# while子句: 2  11# while子句: 3  12# while執行完畢,跳出循環後執行了我 4

在上邊的代碼中,其執行流程大致如下:

whileVal變量一開始是1。while的循環條件是變量小於等於3。 此時1小於3條件成立,執行while子句的代碼。打印「while子句: 1」 然後變量whileVal遞增一位,變成2。

再次返回去判斷條件,2<=3條件成立,繼續執行while子句,打印「while子句: 2」 然後變量whileVal遞增一位,變成3。

再次返回去判斷條件,3<=3條件成立,繼續執行while子句,打印「while子句: 3」 然後變量whileVal遞增一位,變成4。

再次返回去判斷條件,4<=3條件不成立,不執行while子句結束循環並跳出

於是代碼向下,執行else里的代碼塊,打印「while執行完畢,跳出循環後執行了我 4」 並且我們可以通過打印明確得知,whileVal此時為4了。

和for循環的不同

while的知識點很簡單,應用起來也很簡單。 不過同樣作為循環,他和for循環有什麼不同的呢?語法里為什麼有了for還要有個while呢?

我們先來想想。上邊的代碼用for實現怎麼寫呢? 下邊是我的寫法

 1for forVal in range(1, 4):   2  print('for子句:', forVal)   3else:   4  print('for執行完畢,跳出循環後執行了我', forVal)   5   6# 打印結果如下:   7# for子句: 1   8# for子句: 2   9# for子句: 3  10# for執行完畢,跳出循環後執行了我 3

觀察發現,for最後的變量值為3。 也就是for在特定循環次數內,在你指定循環次數的情況下進行的迭代。

而while是你可以指定一個已經確定的臨界值,只要在臨界值裡邊的,都會執行while。即當while語句一直成立的時候,while子句就會一直執行。 而更厲害的是,這個臨界值可以是我們知道的(比如上邊限制小於等於3,就是我們設定的已知臨界值)。 當然,這個臨界值也可以是我們不知道的。比如讓用戶輸入的情況,也比如無限循環的情況。代碼分別如下。

根據用戶輸入判斷條件

以下代碼,是條件根據用戶輸入進行判斷的例子。

1myAge = input('請猜一下我的年齡:')  2while myAge != '20':  3  print('不對!')  4  myAge = input('請再猜一下我的年齡:')  5else:   6  print('猜對啦!恭喜你!')

我的人機對話過程

只要用戶輸入的不是20,這個循環中while子句的內容就會一直執行。

而當用戶輸入20時,條件不成立(myAge=20,而不是!=20),則跳出循環。執行else內容。

無限循環

利用while,我們還可以寫一段死循環代碼。

1# 請謹慎嘗試!  2while True:  3  print('我停不下來了~')

在條件語句那裡,可以填表達式,同樣也可以填寫布爾值。

當我們填寫布爾值True時,因為條件一直成立。循環永遠不停,就形成了我們常說的死循環代碼。

continue跳過本次循環

同for,continue語句在while中的使用作用一樣是跳出本次單輪的循環、繼續下次的循環。 不再贅述,直接上代碼:

 1continueVal = 1   2while continueVal <= 5:   3  continueVal += 1   4  if continueVal == 3:   5    print('if條件中')   6    continue   7  else:   8    print('continueVal的值:',continueVal)   9else:  10  print('循環結束')  11  12# 打印結果:  13# continueVal的值: 2  14# if條件中  15# continueVal的值: 4  16# continueVal的值: 5  17# continueVal的值: 6  18# 循環結束

跳過了==3時的循環, 並且打印了while語句所對應的else語句的內容。

break跳出循環

同for,break語句在while中的使用作用一樣是跳出循環。 不再贅述,直接上代碼:

 1breakVal = 1   2while breakVal <= 5:   3  breakVal += 1   4  if breakVal == 3:   5    print('if條件中')   6    break   7  else:   8    print('breakVal的值:',breakVal)   9else:  10  print('循環結束')  11  12# 打印結果:  13# breakVal的值: 2  14# if條件中

條件==3時,直接結束循環, 並且不再打印while語句所對應的else語句了。

練習題

實現1到10的數分別乘以100

分別用for循環和while循環倆種方案實現