欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

干貨 | 收藏!16段代碼入門Python循環語句

系統 1619 0
(圖片付費下載于視覺中國)

作者 | 李明江 張良均 周東平 張尚佳,本文摘編自《Python3智能數據分析快速入門》
來源 |?大數據(ID:hzdashuju)

【導讀】本文將重點講述for語句和while語句。for語句屬于遍歷循環,while語句屬于當型循環。除了兩個循環語句外,還介紹了break、continue與pass三個用于控制循環結構中的程序流向的語句。在此基礎之上,還介紹了列表推導式,這是一種特殊的循環語句。

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

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

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

▲圖1 當型循環結構

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

▲圖2 直到型循環結構

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

01 for

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

for語句不屬于當型循環或直到型循環,它遍歷序列對象內的元素,對每個元素運行一次循環體,循環的步數在程序開始執行時已經指定,不屬于條件判斷。

在for語句中,for和in搭配組成for-in循環結構,for-in循環依次把list或tuple中的每個元素迭代出來。for語句的基本語法格式如下。
                  
                    for 變量 in 序列:	
  操作語句
                  
                

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

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

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

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

  • 代碼清單1:for語句遍歷提取str
                  
                    # 單純遍歷的for語句	
names = ['Michael', 'Bob', 'Tracy']	
# 遍歷輸出names中的元素	
for name in names:	
    print(name)
                  
                
輸出結果:
                  
                    Michael	
Bob	
Tracy
                  
                
for語句同樣可以實現dict的遍歷方法,如代碼清單2所示。

  • 代碼清單2:for語句遍歷查詢dict
                  
                    dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}	
# 遍歷鍵值對	
print('key_value:', end = '')	
for key, value in dic.items():	
    print(key, value, sep = ':', end = ' ')	
# 遍歷鍵	
print('keys:', end = '')	
for key in dic.keys():	
    print(key, end = ' ')	
# 遍歷值	
print('values:', end = '')	
for value in dic.values():	
    print(value, end = ' ')
                  
                
輸出結果:
                  
                    key_value:a:1 b:2 c:3 d:4	
keys:a b c d	
values:1 2 3 4
                  
                

和條件語句一樣,循環語句也可以使用嵌套,作用同樣是豐富程序的功能性。設計一個成績錄入系統,就必然要錄入姓名和課程這兩類信息,僅靠一層循環是無法實現的,可使用兩層循環結構,如代碼清單3所示。

  • 代碼清單3:嵌套for語句
                  
                    students = ['小明', '小紅']	
subjects = ['語文', '數學'] 	
sum1 = []	
avg = []	
for i in students: 	
    print ('開始錄入%s的考試成績!'%i) 	
    sum = 0	
    for j in subjects: 	
        print('請輸入%s成績:'%j) 	
        score = int(input())	
        sum += score	
    average = sum / 2	
    avg.append(average)	
    sum1.append(sum)	
print(students, '的總分依次是', sum1, ',', '平均分依次是', avg)	
print('完成成績錄入!')
                  
                
輸出結果:
                  
                    開始錄入小明的考試成績!	
請輸入語文成績:	
97	
請輸入數學成績:	
90	
開始錄入小紅的考試成績!	
請輸入語文成績:	
89	
請輸入數學成績:	
100	
['小明', '小紅'] 的總分依次是 [187, 189] , 平均分依次是 [93.5, 94.5]	
完成成績錄入!
                  
                

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

02 while

while語句是Python中最常用的遞歸結構。區別于for循環,while循環結構包含條件判斷式,是一種條件循環,屬于當型循環。

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

                  
                    while 條件表達式:	
    操作語句 1	
    操作語句 2 
                  
                
while語句常用的參數及其說明如下所示:

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

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

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

  • 代碼清單4:while語句
                  
                    sum = 0	
n = 99	
while n > 0:	
    sum += n	
    n -= 2	
print(sum)
                  
                

輸出結果:2500

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

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

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

輸出結果:
                  
                    循環	
循環	
…
                  
                
                  
                    # 布爾表達式每次遞歸運算都為2,始終為真值	
x, y = 2, 1	
while x / y:	
    print('循環')	
    x = x * 2	
    y = y * 2
                  
                
輸出結果:
                  
                    循環	
循環	
…
                  
                
運行代碼清單5,將會不斷打印出“循環”。代碼清單5展示了制造無限循環的兩種方式,既可以在while后寫入一個固定的真值,也可以寫入一個一直生成真值的表達式。要終止無限循環,可以使用快捷鍵Ctrl+C中斷循環的執行,也可以用循環終止語句,這將在下文中介紹。

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

  • 代碼清單6:while語句實現str截取
                  
                    string = 'abcd'	
while string:	
    print(string)	
# 該語句的遞歸計算是,每次從str的第2個字符開始截取	
    string = string[1:]
                  
                
輸出結果:
                  
                    abcd	
bcd	
cd	
d
                  
                
代碼清單6包含一個自減迭代值,它并不通過明顯的運算符實現自減,而是利用索引法則,x變量一直從str中第2個值截取至結尾,每次都將位于str最前面的字符截取掉,最終只剩下一個字符時,再次截取就只有空的結果,布爾表達式返回0,循環終止。

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

while循環同樣可以使用嵌套,嵌套的while循環實現成績錄入系統如代碼清單7所示。

  • 代碼清單7:嵌套while語句
                  
                    j = 1	
while j <= 2:	
    sum = 0	
    i = 1	
    name = input('請輸入學生姓名:')	
    while i <= 2:	
        print ('請輸入第%d門的考試成績: '%i)	
        sum += int(input())	
        i += 1	
    avg = sum / (i-1)	
    print(name, '的平均成績是%d'%avg)	
    j += 1	
print('學生成績輸入完成!')
                  
                
輸出結果:
                  
                    請輸入學生姓名:小明	
請輸入第1門的考試成績: 	
98	
請輸入第2門的考試成績: 	
88	
小明 的平均成績是93	
請輸入學生姓名:小紅	
請輸入第1門的考試成績: 	
65	
請輸入第2門的考試成績: 	
100	
小紅 的平均成績是82	
學生成績輸入完成!
                  
                

代碼清單7的第1層while語句用于錄入人名,第2層則在各人名下錄入多門成績,布爾表達式決定錄入的人數和課程數。

03 break、continue與pass

在前兩節中,已經介紹了Python中的兩種循環語句。循環語句中還可以嵌入break、continue和pass語句,以靈活地改變流向,實現更多功能。

1. break

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

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

  • 代碼清單8:break語句的使用
                  
                    # break語句用于for循環	
string = "Python"	
for i in string:	
# 遍歷至string中的字符n時,不再執行else代碼塊	
    if i == 'n':	
        break	
    else:	
        print("letter:{}". format(i))
                  
                
輸出結果:
                  
                    letter:P	
letter:y	
letter:t	
letter:h	
letter:o
                  
                
                  
                    # break語句用于while循環	
counts = 0	
while True:	
    print(counts)	
    counts += 1	
# 滿足counts等于3時跳出循環,不再進入循環體	
    if counts == 3: 	
        break
                  
                

輸出結果:
                  
                    0	
1	
2
                  
                
從代碼清單8可以看到,break語句用于for循環和while循環是有區別的。用于for循環時,只終止遍歷中某一次的循環體執行;用于while循環時,整個循環被終止。

break只終止本層循環,如有多層嵌套的循環,在其中一層循環中寫入break,只在這層循環中生效,程序將跳到上一層循環中繼續運行,如代碼清單9所示。

  • 代碼清單9:break語句用于嵌套循環結構
                  
                    # 第1層循環,遍歷次數為2	
for i in range(2):	
    print("-----%d-----" %i)	
# 第2層循環,遍歷次數為10	
    for j in range(10):	
# 使用break語句,j>1時不執行循環體	
        if j > 1:	
            break	
        print(j)
                  
                
輸出結果:
                  
                    -----0-----	
0	
1	
-----1-----	
0	
1
                  
                
在代碼清單9中,break語句在條件判斷式“if j>1:”后被使用,因此盡管j的指定遍歷次數為10,實際上遍歷只運行兩次。由于break語句只終止本層循環的運行,i依舊遍歷執行了兩次,而不是在第1次遍歷過程末尾終止。

2. continue

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

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

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

  • 代碼清單10:continue語句用于循環結構
                  
                    # 當i等于1或3時,跳過continue后的print語句	
for i in range(0,5):	
    if i == 1 or i == 3:	
        continue	
    print(i)
                  
                
輸出結果:
                  
                    0	
2	
4
                  
                
                  
                    # 如果遇到偶數,跳過continue后的print語句	
counts = 0	
while counts < 10:	
    counts += 1	
    if counts % 2 == 0:	
        continue 	
    print(counts)
                  
                
輸出結果:
                  
                    1	
3	
5	
7	
9 
                  
                
break語句一旦用于嵌套循環中的第n層,該層循環會被終止,但在執行第n-1層循環時,仍會創造一個第n層循環并執行。continue語句同樣如此,只是仍會執行某一層的剩余部分。因此,無論使用哪種循環終止語句,都只會影響使用終止語句的那一層循環,而不會干擾到其他層。continue語句用于循環的例子如代碼清單11所示。

  • 代碼清單11:continue語句用于嵌套循環結構
                  
                    # 第1層循環,遍歷次數為2	
for i in range(2):	
    print("-----%d-----" %i)	
# 第2層循環,遍歷次數為5	
    for j in range(5):	
# 當j等于2或4時,不執行循環體	
        if j == 2 or j == 4:	
            continue	
        print(j)
                  
                
輸出結果:
                  
                    -----0-----	
0	
1	
3	
-----1-----	
0	
1	
3
                  
                

3. pass

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

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

  • 代碼清單12:pass語句
                  
                    for element in "Python":	
# element為y時,不做任何操作,不會被輸出	
    if element == "y":	
        pass	
    else:	
        print(element)
                  
                
輸出結果:
                  
                    P	
t	
h	
o	
n
                  
                
                  
                    counts = 0	
while counts < 5:	
    counts += 1	
# i=3時,不執行循環體	
    if counts == 3:	
        pass	
    else:	
        print(counts ** 2)
                  
                
輸出結果:
                  
                    1	
4	
16	
25 
                  
                
從代碼清單12可以看到,Python在“P”和“t”之間占位,當循環遍歷到“y”時不做任何操作;當i等于3時,冪運算不執行,但不影響其他數值。上述兩個代碼如果在pass的位置缺失,程序將無法執行,因為判斷條件沒有給出相應的執行語句,會導致邏輯出錯。使用pass語句占位,一方面為了讓程序正常執行,另一方面也是為了方便以后補充操作語句。

04 列表推導式

推導式是可以從一個數據序列構建另一個新的數據序列的結構體,能夠非常簡潔地構造新的變量。列表推導式是其中最常用的類型。

列表推導式又稱為列表解析式,是Python迭代機制的一種應用,也是一種高效創建列list的方式,可以動態地創建list。由于列表推導式必須用到遍歷循環,因此屬于一種特殊的循環。

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

列表推導式的基本語法格式如下:
                  
                
                  
                    [操作語句?for變量?in?序列?if?條件表達式]????
                  
                

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

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

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

  • 代碼清單13:使用列表推導式生成list
                  
                    vec = [-4, -2, 0, 2, 4]	
# 用vec中元素的倍數,創建一個數組	
print([x * 2 for x in vec])
                  
                
輸出結果:
                  
                
                  
                    [-8,?-4,?0,?4,?8]
                  
                
                  
                    # 創建一個包含2元tuple的list	
print([(x, x ** 2) for x in range(6)])    
                  
                

輸出結果:
                  
                
                  
                    [(0,?0),?(1,?1),?(2,?4),?(3,?9),?(4,?16),?(5,?25)]????
                  
                

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

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

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

  • 代碼清單15:常規方式與列表推導式對比
                  
                    # 創建一個平方數list:常規方式	
squares = [] 	
for x in range(10): 	
    squares.append(x ** 2) 	
print(squares)
                  
                
輸出結果:
                  
                
                  
                    [0,?1,?4,?9,?16,?25,?36,?49,?64,?81]
                  
                
                  
                    # 創建一個平方數list列表推導式	
squares = [x ** 2 for x in range(10)] 	
print(squares)  
                  
                
輸出結果:
                  
                
              

列表推導式中同樣可以實現嵌套循環,如代碼清單16所示。

  • 代碼清單16: 包含嵌套循環的列表推導式
                  
                
              

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

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

(*本文為AI科技大本營轉載文章, 轉載 聯系作者 )

精彩推薦


【結果提交倒計時】PV,UV流量預測算法大賽,結果提交截止時間為 9月20日 ,還沒有提交的小伙伴抓緊時間了~~9月25日公布初賽成績。 最新排行榜請掃碼查看。

推薦閱讀

  • dfuse、慢霧科技、MYKEY共同出席,與你探討區塊鏈數據架構和項目上鏈那些事!

  • 大數據工程師手冊:全面系統的掌握必備知識與工具

  • 演講實錄:知乎算法團隊負責人孫付偉:Graph?Embedding在知乎的應用實踐

  • NASNet:神經架構搜索網絡在圖像分類中的表現

  • 實操 | 從0到1教你用Python來爬取整站天氣網

  • 5大必知的圖算法,附Python代碼實現

  • 我們到底該如何看待6G?

  • 互聯網大佬為什么愛唱歌

  • 驚呆!這輛悍馬自己在跑跑跑跑跑跑跑!

你點的每個“在看”,我都認真當成了喜歡


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色婷婷综合久久久久中文 | 欧美在线视频一区二区三区 | 99精品在线观看视频 | 中国一级毛片视频 | 天天爱天天做久久天天狠狼 | 国产日韩欧美三级 | 成人性a激情免费视频 | 日韩欧美亚洲一区 | 丁香综合五月 | 久久婷婷综合五月一区二区 | 欧美在线高清 | 亚洲第一页在线 | 亚洲天堂三级 | 亚洲精品成人 | 91原创视频 | 黄色 在线播放 | 亚洲一区二区三区四区 | 丁香婷婷综合五月六月 | 天天摸天天揉天天碰天天弄 | 久久久综合 | 国产精品久久久久久久久久久新郎 | 蜜桃av一区二区三区 | 国产高清在线观看av | 亚洲天堂在线电影 | 天天干com | 久操伊人 | 色狠狠狠色噜噜噜综合网 | 久久国产精品视频 | 亚洲一区无码中文字幕 | 欧美成人性色区 | 五月婷六月丁香狠狠躁狠狠爱 | 精品久久久久久无码中文字幕 | 色哟哟哟在线观看www | 亚洲一区二区三区四区 | 成人黄色片网站 | 久草福利资源网站免费 | 国产激情网站 | 婷婷久月| 精品福利在线视频 | 午夜视频直播 | 亚洲蜜芽在线精品一区 |