自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

值得收藏!16段代碼入門Python循環(huán)語句

開發(fā) 后端
本文重點講述for語句和while語句。for語句屬于遍歷循環(huán),while語句屬于當型循環(huán)。除了兩個循環(huán)語句外,還介紹了break、continue與pass三個用于控制循環(huán)結(jié)構(gòu)中的程序流向的語句。在此基礎(chǔ)之上,還介紹了列表推導式,這是一種特殊的循環(huán)語句。

 循環(huán)語句又稱為重復(fù)結(jié)構(gòu),用于反復(fù)執(zhí)行某一操作。面對大數(shù)量級的重復(fù)運算,即使借助計算機,重復(fù)編寫代碼也是費時的,這時就需要借助循環(huán)語句。使用循環(huán)語句一般要用到條件判斷,根據(jù)判斷式的返回值決定是否執(zhí)行循環(huán)體。

循環(huán)分為兩種模式,一種是條件滿足時執(zhí)行循環(huán)體;另一種則相反,在條件不滿足時執(zhí)行循環(huán)體。前者稱為當型循環(huán),后者稱為直到型循環(huán)。

在圖1中,虛線框內(nèi)是一個當型循環(huán)結(jié)構(gòu),此結(jié)構(gòu)包含判斷條件和循環(huán)體,以及連接各部分的流向線。程序執(zhí)行時,先判斷條件的真假。判斷為真時,則執(zhí)行循環(huán)體;判斷為假時,不再執(zhí)行循環(huán)體,循環(huán)結(jié)束。當型循環(huán)先進行條件判斷,如果滿足循環(huán)條件,再執(zhí)行循環(huán)體,因此又被稱為前測試型循環(huán)。

值得收藏!16段代碼入門Python循環(huán)語句

▲圖1 當型循環(huán)結(jié)構(gòu)

在圖2中,虛線框內(nèi)是一個直到型循環(huán)結(jié)構(gòu),此結(jié)構(gòu)包括判斷條件和循環(huán)體,以及連接各部分的流向線。程序執(zhí)行時,先執(zhí)行一次循環(huán)體,再判斷執(zhí)行循環(huán)的結(jié)果是否滿足判斷條件。滿足條件時,再次執(zhí)行循環(huán)體;不滿足條件時,不再執(zhí)行循環(huán)體。直到型循環(huán)在執(zhí)行判斷前先進入循環(huán)體運行,因此又被稱為后測試型循環(huán)。

值得收藏!16段代碼入門Python循環(huán)語句

▲圖2 直到型循環(huán)結(jié)構(gòu)

Python中主要有兩種循環(huán)語句,即for語句和while語句。前者采用遍歷的形式指定循環(huán)范圍,后者視判斷式返回值的情況而決定是否執(zhí)行。要更靈活地操縱循環(huán)的流向,就要用到break、continue和pass等語句。

01 for

for循環(huán)是迭代循環(huán),在Python中相當于一個通用的序列迭代器,可以遍歷任何有序序列,如str、list、tuple等,也可以遍歷任何可迭代對象,如dict。不同于C語言,Python中的for語句將遍歷系列中的所有成員,遍歷順序為成員在系列中的順序。需要注意,在for循環(huán)中改變?nèi)魏涡蛄械膬?nèi)容都是危險的!

for語句不屬于當型循環(huán)或直到型循環(huán),它遍歷序列對象內(nèi)的元素,對每個元素運行一次循環(huán)體,循環(huán)的步數(shù)在程序開始執(zhí)行時已經(jīng)指定,不屬于條件判斷。

在for語句中,for和in搭配組成for-in循環(huán)結(jié)構(gòu),for-in循環(huán)依次把list或tuple中的每個元素迭代出來。for語句的基本語法格式如下。

  1. for 變量 in 序列: 
  2.  操作語句 

for語句常用的語法格式及其參數(shù)說明如下所示:

  • 序列:接收序列,表示遍歷范圍。無默認值
  • 操作語句:接收操作語句,表示執(zhí)行一段代碼。無默認值

程序的執(zhí)行從“for變量in序列”開始,該語句把序列中的每個元素代入變量,執(zhí)行一遍操作語句1,重復(fù)的次數(shù)就是序列中元素的個數(shù)。

為了展示for循環(huán)的遍歷功能,依次打印list中的姓名,如代碼清單1所示。

代碼清單1:for語句遍歷提取str

  1. # 單純遍歷的for語句 
  2. names = ['Michael''Bob''Tracy'
  3. # 遍歷輸出names中的元素 
  4. for name in names: 
  5.  print(name)  

輸出結(jié)果:

  1. Michael 
  2. Bob 
  3. Tracy  

for語句同樣可以實現(xiàn)dict的遍歷方法,如代碼清單2所示。

  • 代碼清單2:for語句遍歷查詢dict
  1. dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 
  2. # 遍歷鍵值對 
  3. print('key_value:'end = ''
  4. for key, value in dic.items(): 
  5.  print(key, value, sep = ':'end = ' '
  6. # 遍歷鍵 
  7. print('keys:'end = ''
  8. for key in dic.keys(): 
  9.  print(keyend = ' '
  10. # 遍歷值 
  11. print('values:'end = ''
  12. for value in dic.values(): 
  13.  print(value, end = ' ')  

輸出結(jié)果:

  1. key_value:a:1 b:2 c:3 d:4 
  2. keys:a b c d 
  3. values:1 2 3 4 

從代碼清單2可以看到,for語句中用于遍歷的“變量”不僅可以是Python默認的指代詞,也可以是常規(guī)的變量。

和條件語句一樣,循環(huán)語句也可以使用嵌套,作用同樣是豐富程序的功能性。設(shè)計一個成績錄入系統(tǒng),就必然要錄入姓名和課程這兩類信息,僅靠一層循環(huán)是無法實現(xiàn)的,可使用兩層循環(huán)結(jié)構(gòu),如代碼清單3所示。

  • 代碼清單3:嵌套for語句
  1. students = ['小明''小紅'
  2. subjects = ['語文''數(shù)學']  
  3. sum1 = [] 
  4. avg = [] 
  5. for i in students:  
  6.  print ('開始錄入%s的考試成績!'%i)  
  7.  sum = 0 
  8.  for j in subjects:  
  9.  print('請輸入%s成績:'%j)  
  10.  score = int(input()) 
  11.  sum += score 
  12.  average = sum / 2 
  13.  avg.append(average) 
  14.  sum1.append(sum
  15. print(students, '的總分依次是', sum1, ',''平均分依次是'avg
  16. print('完成成績錄入!')  

輸出結(jié)果:

  1. 開始錄入小明的考試成績! 
  2. 請輸入語文成績: 
  3. 97 
  4. 請輸入數(shù)學成績: 
  5. 90 
  6. 開始錄入小紅的考試成績! 
  7. 請輸入語文成績: 
  8. 89 
  9. 請輸入數(shù)學成績: 
  10. 100 
  11. ['小明''小紅'] 的總分依次是 [187, 189] , 平均分依次是 [93.5, 94.5] 
  12. 完成成績錄入! 

理論上,for循環(huán)也可以無限嵌套,但并不推薦。

02 while

while語句是Python中最常用的遞歸結(jié)構(gòu)。區(qū)別于for循環(huán),while循環(huán)結(jié)構(gòu)包含條件判斷式,是一種條件循環(huán),屬于當型循環(huán)。

while語句最基本的形式包括一個位于頂部的布爾表達式,一個或多個屬于while代碼塊的縮進語句。也可以在結(jié)尾處包含一個else代碼塊,它與while代碼塊是同級的,組成while-else的形式。while語句的基本語法格式如下。

  1. while 條件表達式: 
  2.  操作語句 1 
  3.  操作語句 2  

while語句常用的參數(shù)及其說明如下所示:

  • 條件表達式:接收布爾表達式,表示判斷條件是否成立。無默認值
  • 操作語句:接收操作語句,表示執(zhí)行一段代碼。無默認值

執(zhí)行while語句時,只要頂部的條件表達式返回真值,就一直執(zhí)行while部分嵌套的遞歸代碼,當條件表達式返回假值時,不再執(zhí)行操作語句,程序跳出while結(jié)構(gòu)。

while語句的基礎(chǔ)使用方法如代碼清單4所示。

  • 代碼清單4:while語句
  1. sum = 0 
  2. n = 99 
  3. while n > 0: 
  4.  sum += n 
  5.  n -= 2 
  6. print(sum

輸出結(jié)果:2500

如果布爾表達式不帶有<、>、==、!=、in、not in等運算符,僅僅給出數(shù)值之類的條件,也是可以的。當while后寫入一個非零整數(shù)時,視為真值,執(zhí)行循環(huán)體;寫入0時,視為假值,不執(zhí)行循環(huán)體。也可以寫入str、list或任何序列,長度非零則視為真值,執(zhí)行循環(huán)體;否則視為假值,不執(zhí)行循環(huán)體。

如果布爾表達式始終返回1,while語句就變成無限循環(huán),如代碼清單5所示。

  • 代碼清單5:while語句無限循環(huán)
  1. # 布爾表達式為常數(shù)1,始終為真值 
  2. while 1: 
  3.  print('循環(huán)'

輸出結(jié)果:

  1. 循環(huán) 
  2. 循環(huán) 
  3. …  
  1. # 布爾表達式每次遞歸運算都為2,始終為真值 
  2. x, y = 2, 1 
  3. while x / y: 
  4.  print('循環(huán)'
  5.  x = x * 2 
  6.  y = y * 2  

輸出結(jié)果:

  1. 循環(huán) 
  2. 循環(huán) 
  3. …  

運行代碼清單5,將會不斷打印出“循環(huán)”。代碼清單5展示了制造無限循環(huán)的兩種方式,既可以在while后寫入一個固定的真值,也可以寫入一個一直生成真值的表達式。要終止無限循環(huán),可以使用快捷鍵Ctrl+C中斷循環(huán)的執(zhí)行,也可以用循環(huán)終止語句,這將在下文中介紹。

靈活地利用while語句中的布爾表達式及代入表達式的遞歸值,可以實現(xiàn)特別的功能,如代碼清單6所示。

  • 代碼清單6:while語句實現(xiàn)str截取
  1. string = 'abcd' 
  2. while string: 
  3.  print(string) 
  4. # 該語句的遞歸計算是,每次從str的第2個字符開始截取 
  5.  string = string[1:]  

輸出結(jié)果:

  1. abcd 
  2. bcd 
  3. cd 
  4. d  

代碼清單6包含一個自減迭代值,它并不通過明顯的運算符實現(xiàn)自減,而是利用索引法則,x變量一直從str中第2個值截取至結(jié)尾,每次都將位于str最前面的字符截取掉,最終只剩下一個字符時,再次截取就只有空的結(jié)果,布爾表達式返回0,循環(huán)終止。

通過代碼清單5和代碼清單6可以看到,靈活地利用遞歸式,可以實現(xiàn)程序流向的控制。

while循環(huán)同樣可以使用嵌套,嵌套的while循環(huán)實現(xiàn)成績錄入系統(tǒng)如代碼清單7所示。

  • 代碼清單7:嵌套while語句
  1. j = 1 
  2. while j <= 2: 
  3.  sum = 0 
  4.  i = 1 
  5.  name = input('請輸入學生姓名:'
  6.  while i <= 2: 
  7.  print ('請輸入第%d門的考試成績: '%i) 
  8.  sum += int(input()) 
  9.  i += 1 
  10.  avg = sum / (i-1) 
  11.  print(name'的平均成績是%d'%avg
  12.  j += 1 
  13. print('學生成績輸入完成!')  

輸出結(jié)果:

  1. 請輸入學生姓名:小明 
  2. 請輸入第1門的考試成績:  
  3. 98 
  4. 請輸入第2門的考試成績:  
  5. 88 
  6. 小明 的平均成績是93 
  7. 請輸入學生姓名:小紅 
  8. 請輸入第1門的考試成績:  
  9. 65 
  10. 請輸入第2門的考試成績:  
  11. 100 
  12. 小紅 的平均成績是82 
  13. 學生成績輸入完成! 

代碼清單7的第1層while語句用于錄入人名,第2層則在各人名下錄入多門成績,布爾表達式?jīng)Q定錄入的人數(shù)和課程數(shù)。

03 break、continue與pass

在前兩節(jié)中,已經(jīng)介紹了Python中的兩種循環(huán)語句。循環(huán)語句中還可以嵌入break、continue和pass語句,以靈活地改變流向,實現(xiàn)更多功能。

1. break

在Python中,break語句用于終止循環(huán)語句的執(zhí)行。使用該語句時,即使循環(huán)條件判斷為真,或序列未被完全遞歸,循環(huán)語句也會被立刻停止。

break語句一般配合條件判斷使用,因為程序的終止必須是在某一條件被滿足時執(zhí)行。break語句在for循環(huán)和while循環(huán)中的使用如代碼清單8所示。

  • 代碼清單8:break語句的使用
  1. # break語句用于for循環(huán) 
  2. string = "Python" 
  3. for i in string: 
  4. # 遍歷至string中的字符n時,不再執(zhí)行else代碼塊 
  5.  if i == 'n'
  6.  break 
  7.  else
  8.  print("letter:{}". format(i))  

輸出結(jié)果:

  1. letter:P 
  2. letter:y 
  3. letter:t 
  4. letter:h 
  5. letter:o  
  1. # break語句用于while循環(huán) 
  2. counts = 0 
  3. while True
  4.  print(counts) 
  5.  counts += 1 
  6. # 滿足counts等于3時跳出循環(huán),不再進入循環(huán)體 
  7.  if counts == 3:  
  8.  break 

輸出結(jié)果:

從代碼清單8可以看到,break語句用于for循環(huán)和while循環(huán)是有區(qū)別的。用于for循環(huán)時,只終止遍歷中某一次的循環(huán)體執(zhí)行;用于while循環(huán)時,整個循環(huán)被終止。

break只終止本層循環(huán),如有多層嵌套的循環(huán),在其中一層循環(huán)中寫入break,只在這層循環(huán)中生效,程序?qū)⑻缴弦粚友h(huán)中繼續(xù)運行,如代碼清單9所示。

  • 代碼清單9:break語句用于嵌套循環(huán)結(jié)構(gòu)
  1. # 第1層循環(huán),遍歷次數(shù)為2 
  2. for i in range(2): 
  3.  print("-----%d-----" %i) 
  4. # 第2層循環(huán),遍歷次數(shù)為10 
  5.  for j in range(10): 
  6. # 使用break語句,j>1時不執(zhí)行循環(huán)體 
  7.  if j > 1: 
  8.  break 
  9.  print(j) 

輸出結(jié)果:

  1. -----0----- 
  2. -----1----- 

在代碼清單9中,break語句在條件判斷式“if j>1:”后被使用,因此盡管j的指定遍歷次數(shù)為10,實際上遍歷只運行兩次。由于break語句只終止本層循環(huán)的運行,i依舊遍歷執(zhí)行了兩次,而不是在第1次遍歷過程末尾終止。

2. continue

Python中的continue語句用于跳出當前循環(huán),并執(zhí)行下一次循環(huán),而break跳出整層循環(huán),兩者的功能具有明顯區(qū)別。

如果一段代碼中包含continue語句,循環(huán)執(zhí)行至continue處時,先忽略本次循環(huán),在本層仍滿足條件的剩余循環(huán)次數(shù)中繼續(xù)執(zhí)行,不會終止這一層循環(huán)。實際上,如果在某一層的每次循環(huán)中都使用continue語句,就相當于使用break語句。

打印一個數(shù)表,要不打印某些指定的數(shù)字,或只打印某類數(shù),就可以使用continue語句跳過一些循環(huán)次數(shù),該語句在for循環(huán)和while循環(huán)中都可以自由地使用,如代碼清單10所示。

  • 代碼清單10:continue語句用于循環(huán)結(jié)構(gòu)
  1. # 當i等于1或3時,跳過continue后的print語句 
  2. for i in range(0,5): 
  3.  if i == 1 or i == 3: 
  4.  continue 
  5.  print(i)  

輸出結(jié)果:

  1. 4  
  1. # 如果遇到偶數(shù),跳過continue后的print語句 
  2. counts = 0 
  3. while counts < 10: 
  4.  counts += 1 
  5.  if counts % 2 == 0: 
  6.  continue  
  7.  print(counts) 

輸出結(jié)果:

  1. 9  

break語句一旦用于嵌套循環(huán)中的第n層,該層循環(huán)會被終止,但在執(zhí)行第n-1層循環(huán)時,仍會創(chuàng)造一個第n層循環(huán)并執(zhí)行。continue語句同樣如此,只是仍會執(zhí)行某一層的剩余部分。因此,無論使用哪種循環(huán)終止語句,都只會影響使用終止語句的那一層循環(huán),而不會干擾到其他層。continue語句用于循環(huán)的例子如代碼清單11所示。

  • 代碼清單11:continue語句用于嵌套循環(huán)結(jié)構(gòu)
  1. # 第1層循環(huán),遍歷次數(shù)為2 
  2. for i in range(2): 
  3.  print("-----%d-----" %i) 
  4. # 第2層循環(huán),遍歷次數(shù)為5 
  5.  for j in range(5): 
  6. # 當j等于2或4時,不執(zhí)行循環(huán)體 
  7.  if j == 2 or j == 4: 
  8.  continue 
  9.  print(j)  

輸出結(jié)果:

  1. -----0----- 
  2. -----1----- 

3. pass

pass是空語句,不做任何操作,只起到占位的作用,其作用是為了保持程序結(jié)構(gòu)的完整性。盡管pass語句不做任何操作,但如果暫時不確定要在一個位置放上什么樣的代碼,可以先放置一個pass語句,讓代碼可以正常運行。pass語句并非循環(huán)或者條件語句的一部分,但與break、continue在代碼形式上有些類似。

使用pass語句遍歷輸出str及數(shù)值計算,如代碼清單12所示。

  • 代碼清單12:pass語句
  1. for element in "Python"
  2. # element為y時,不做任何操作,不會被輸出 
  3.  if element == "y"
  4.  pass 
  5.  else
  6.  print(element)  

輸出結(jié)果:

  1. n  
  1. counts = 0 
  2. while counts < 5: 
  3.  counts += 1 
  4. # i=3時,不執(zhí)行循環(huán)體 
  5.  if counts == 3: 
  6.  pass 
  7.  else
  8.  print(counts ** 2)  

輸出結(jié)果:

  1. 16 
  2. 25  

從代碼清單12可以看到,Python在“P”和“t”之間占位,當循環(huán)遍歷到“y”時不做任何操作;當i等于3時,冪運算不執(zhí)行,但不影響其他數(shù)值。上述兩個代碼如果在pass的位置缺失,程序?qū)o法執(zhí)行,因為判斷條件沒有給出相應(yīng)的執(zhí)行語句,會導致邏輯出錯。使用pass語句占位,一方面為了讓程序正常執(zhí)行,另一方面也是為了方便以后補充操作語句。

04 列表推導式

推導式是可以從一個數(shù)據(jù)序列構(gòu)建另一個新的數(shù)據(jù)序列的結(jié)構(gòu)體,能夠非常簡潔地構(gòu)造新的變量。列表推導式是其中最常用的類型。

列表推導式又稱為列表解析式,是Python迭代機制的一種應(yīng)用,也是一種高效創(chuàng)建列l(wèi)ist的方式,可以動態(tài)地創(chuàng)建list。由于列表推導式必須用到遍歷循環(huán),因此屬于一種特殊的循環(huán)。

使用列表推導式時,需要將推導式寫在[]中。list中的元素可以來源于其他類型序列、可迭代對象或自建的滿足一定條件的序列。使用列表推導式的好處是代碼更加簡潔,實現(xiàn)效率更高。

列表推導式的基本語法格式如下:

  1. [操作語句 for變量 in 序列 if 條件表達式]  

列表推導式常用的參數(shù)及其說明如下所示:

  • 操作語句:接收操作語句,表示執(zhí)行一段代碼。無默認值
  • 序列:接收序列,表示遍歷范圍。無默認值
  • 條件表達式:接收布爾表達式,表示判斷條件是否成立。無默認值

列表推導式可以不包含條件表達式,只做遍歷,生成list,如代碼清單13所示。

  • 代碼清單13:使用列表推導式生成list
  1. vec = [-4, -2, 0, 2, 4] 
  2. # 用vec中元素的倍數(shù),創(chuàng)建一個數(shù)組 
  3. print([x * 2 for x in vec]) 

輸出結(jié)果:

  1. [-8, -4, 0, 4, 8] 
  1. # 創(chuàng)建一個包含2元tuple的list 
  2. print([(x, x ** 2) for x in range(6)])  

輸出結(jié)果:

  1. [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]  

在代碼清單13中,除了列表推導式的簡單形式,還說明了列表推導式中可以使用多樣的函數(shù)和變量類型。另外,列表推導式中也可以包含條件語句,如代碼清單14所示。

  • 代碼清單14:包含條件語句的列表推導式
  1. # 過濾list,刪除list中的負數(shù) 
  2. print([x for x in vec if x >= 0]) 

輸出結(jié)果:

  1. [0, 2, 4] 

列表推導式最大的優(yōu)點還是簡潔,這需要與常規(guī)的編程方式進行對比。如代碼清單15所示,要創(chuàng)建一個平方數(shù)組成的list,這里的兩種方式是等價的,但列表推導式的方式顯然代碼更加簡潔。

  • 代碼清單15:常規(guī)方式與列表推導式對比
  1. # 創(chuàng)建一個平方數(shù)list:常規(guī)方式 
  2. squares = []  
  3. for x in range(10):  
  4.  squares.append(x ** 2)  
  5. print(squares) 

輸出結(jié)果:

  1. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
  1. # 創(chuàng)建一個平方數(shù)list列表推導式 
  2. squares = [x ** 2 for x in range(10)]  
  3. print(squares)  

輸出結(jié)果:

  1. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 

列表推導式中同樣可以實現(xiàn)嵌套循環(huán),如代碼清單16所示。

  • 代碼清單16:包含嵌套循環(huán)的列表推導式
  1. # 打印由tuple組成的list,tuple中i由0至2,j由0至2 
  2. [(i, j) for i in range(0, 3) for j in range(0, 3)] 

輸出結(jié)果:

  1. [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] 
  1. # 打印由tuple組成的list,i在0至2之間且小于1,j在0至2之間且大于1 
  2. [(i, j) for i in range(0, 3) if i < 1 for j in range(0, 3) if j > 1] 

輸出結(jié)果:

  1. [(0, 2)] 

代碼清單16所示的列表推導式將兩個不同list中的元素整合到了一起。列表推導式中包含一對括號,在括號中有一個表達式,表達式后面緊跟一條for語句,然后是零條或多條for語句或if語句。通過for語句和if語句計算出表達式,結(jié)果作為新list的元素。

責任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2019-10-22 18:00:00

MySQL基礎(chǔ)入門數(shù)據(jù)庫

2020-12-11 05:57:01

Python循環(huán)語句代碼

2023-09-26 22:26:15

Python代碼

2022-01-16 08:00:28

PythonFor循環(huán)

2024-07-31 08:33:17

2021-08-11 09:00:30

Python基礎(chǔ)循環(huán)

2022-01-17 11:25:46

代碼Pythonfor

2018-05-10 17:32:03

機器學習人工智能入門方法

2023-11-15 16:35:31

SQL數(shù)據(jù)庫

2019-05-25 14:35:13

2019-12-27 18:07:53

Python網(wǎng)絡(luò)爬蟲HTML

2015-07-15 10:46:00

Sublime Tex

2022-07-22 09:55:02

Python練手題

2020-05-13 13:55:16

MatplotlibPython代碼

2019-04-22 15:00:05

CSS前端開發(fā)

2017-01-03 17:51:21

AndroidViewHolder工具類

2013-06-27 14:57:58

Eclipse超酷插件移動開發(fā)

2013-07-22 10:01:03

JavascriptWeb

2023-09-16 18:54:38

Pythonfor循環(huán)

2010-03-12 14:28:45

Python if語句
點贊
收藏

51CTO技術(shù)棧公眾號