[16] Python循環語句(三)

1. 概述

我們繼續來看循環語句,主要介紹break、contine和Python的do…while語句。

  • 計算機編程的原理簡要介紹
  • 集成開發環境PyCharm
  • 變數名、數字、字元串、列表
  • 句式、注釋
  • 輸入和輸出
  • 條件判斷語句
  • 循環語句
  • 各類數據結構
  • 函數
  • 模塊和引入

2. 用break語句終止循環

有時候我們循環著循環著,可能會從某個點開始,就不需要繼續下去了,比如我們需要用戶定義一個字元串,用「縮寫:解釋」的格式:

sentence = DRAM: Dynamic Random Access Memoryn

我們如果使用循環語句來解析用戶的輸入,比如一行一行,每行一個字母地輸出用戶輸入的縮寫,也就是冒號之前的那些內容,

for letter in sentence:n print(letter)n

我們會一下子把縮寫帶著冒號和解釋一下子全輸出。大家可以自行在PyCharm裡面運行,太長了我就不粘貼上來了。如果我們可以在循環里加上條件判斷語句,也就是每次循環的時候判斷一下,如果該字元是冒號了,我們就結束循環:

for letter in sentence:n if letter == ::n breakn print(letter)nprint(END)n

最後我們就只輸出四行,分別是D、R、A、M各一行,加上最後的END。我們可以看到,如果letter不是冒號的話,我們就繼續下去,也就是輸出letter所代表的字元,如果letter是冒號的話,直接用break終止循環,break往下在該循環中的、所有的代碼全部被打斷,直接運行整個for循環之後不在循環內的代碼,也就是END那一行。

for letter in sentence:n print(letter)n if letter == ::n breaknprint(END)n

如果我們交換輸出letter和break的if判斷,按照代碼從上到下運行的邏輯,我們會先輸出letter,再判斷是不是要終止循環,當letter代表的字元是冒號時,我們先輸出冒號,再判斷要不要break,由於if條件判斷為True,我們終止循環不再走sentence這個字元串了,直接跳出整個循環運行最後的代碼,輸出END。最後的結果比之前多一個冒號,輸出五行,D、R、A、M、:,加上最後的END。

3. 用continue語句跳出本次循環

break是用於滿足某條件後,終止循環、跳出整個循環、不再運行該循環,而同樣是跳出循環的continue則顯得溫柔多了,當滿足某一條件後使用continue可以忽略循環中接下來的代碼、跳出該次循環,回到所屬的for或者while那一行繼續下一次循環。

這麼說有點玄乎,看一個例子:

for num in range(1, 11):n if num % 2 == 0:n breakn print(num)n

從1開始不停加1直到10並輸出,如果是偶數的話,直接終止循環,用break的話,整個程序最後就輸出一個數字1。

for num in range(1, 11):n if num % 2 == 0:n continuen print(num)n

最後輸出的結果是1、3、5、7、9,可以看到如果數字是偶數的話,我就忽略continue下面循環中的所有代碼,到接下來一次循環中,總體上來說並不終止循環而是「選擇性執行」。

當num為1的時候,if判斷為False,不執行continue,輸出1;num接下來是2,if判斷為True,執行continue忽略下面的代碼,回到for這一行;num接下來是3……以此類推,直到for把整個range的數列都走完才完事。

4. 實現do...while語句

在其他的很多語言中,我們不僅有while還有do…while,比如C:

#include <stdio.h>nnint main () {n // do...while examplen int a = 10;n do {n printf("input the new value of a: ");n scanf("%d", &a);n }while(a < 10);n n // while examplen int b = 10;n while(b < 10) {n printf("input the new value of b: ");n scanf("%d", &b);n }n n return 0;n}n

簡要來說,就是我們現在有倆值a和b,默認為10,要求用戶賦予其新值,如果賦值小於10,則循環、要求用戶繼續賦值,如果大於等於10就結束循環。這裡的printf相當於Python的print,而scanf相當於input,掃描用戶輸入的數賦值給&後面的變數。

由於默認值就為10,處理b的while循環就一次也運行不起來,而do…while就至少能運行。也就是說do…while的特徵是至少運行一次,在最後判斷條件,如果滿足則繼續進行循環,直到最後的條件判斷為誤則結束。

但在Python中並沒有do…while,我們怎麼來實現它呢?我們在上面介紹了break,我們可以將其和while進行有機結合來進行使用,我們現在來試著把C中的do…while部分轉換為Python。

# Default value to 10na = 10n

由於至少要進行一次,我們就直接大膽一點,先弄個無限循環:

while True:n a = int(input(input the new value of a: ))n

這裡while後面可以不跟條件直接跟True或者False,因為原本跟在後面的條件判斷最後計算出的值也是True或者False。現在這個程序會不停地問你給a一個新值,給完再問,問完還問,因為是無限循環,這個程序會比自家小孩還煩。

但是這程序確保了至少問一次的原則,那麼接下來我們就加上break語句,如果輸入的a<10就繼續循環,那麼如果a>=10,循環就結束:

# Default value to 10na = 10nn# DIY a do...while loopnwhile True:n a = int(input(input the new value of a: ))n if a >= 10:n breakn

這樣就實現了do...while,是不是很暴力?如果我們輸入小於10的整數,循環繼續,繼續提問,如果輸入了10或者10以上的整數,循環就結束。可以說Python裡面的while+break可以整出一個do...while。

接下來我會介紹循環的嵌套、else語句、走場用pass語句,之後就介紹剩下的幾個數據結構類型:元組、集合和字典。


推薦閱讀:

傳統工科和計算機結合的行業是否具有發展的前途?
如今「雲計算」流行的今天,是否違背了計算機先驅們「去中心化」的理念?
有沒有哪個時刻讓你突然感覺到:「我的計算機專業白學了」?
[8] Python轉義字元和切片

TAG:Python | 计算机科学 | 编程 |