




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第 5 章控制流控制執(zhí)行順序的開關91 第5章控制流控制執(zhí)行順序的開關控制流又叫作流程控制,即,根據(jù)具體情況來控制程序,令程序執(zhí)行某些特定的程序塊。python中的流程控制語句包括if 條件語句、 while 循環(huán)語句和 for 循環(huán)語句。還可以細分為break、continue、pass等內部流程的控制語句。本章教學視頻說明作者按照圖書的內容和結構,錄制了同步對應的教學視頻。按照圖書的結構,像老師一樣講解 具體代碼操作演示 92python 帶我起飛:入門、進階、商業(yè)實戰(zhàn)本章共有 5 段教學視頻,總時長為34 min 左右。包含如下內容:講述了 if 語句,并通過“實例13”的演示來強化相關
2、知識。講述了 while 語句,并演示了“實例14”中的代碼,將十進制轉成二進制。首先講述了 for 語句,接著演示了“實例15”中使用 for 循環(huán)實現(xiàn)冒泡排序,最后介紹了 for 循環(huán)與內置函數(shù) range、zip、enumerate一起使用的知識。講述了循環(huán)過程中的控制語句,包括:break、continue、pass語句,并演示了“實例 16”的代碼,實現(xiàn)一個人機對話中的控制流程。講述了列表表達式,并通過“實例17”演示了列表表達式的基本操作。5.1 if語句if 語句是最常用的條件控制語句,關鍵字有if、elif、else。5.1.1 語句形式一般的表述形式為:if 條件一 : st
3、atements1 elif 條件二 : statements2 else: statements3 意思是:(1)如果滿足條件一,則執(zhí)行statements1代碼。(2)如果不滿足條件一,但滿足條件二,則執(zhí)行statements2代碼。(3)如果條件一和條件二都不滿足,則執(zhí)行statements3代碼。這里的條件一、條件二、條件三,分別代表三個條件判斷語句。當條件判斷語句返回值為true時,則代表滿足該條件。5.1.2 演示 if 語句的使用下面通過代碼來演示if 語句的用法。第 5 章控制流控制執(zhí)行順序的開關93 a = 4 #定義變量 a 的值為 4 b = 5 #定義變量 6 的值為
4、5 if ab: #當 a 大于 b 時;c = a #令 c 等于 a 的值else: #否則 c 等于 b 的值c = b print(c) #將 c 顯示。輸出: 5 在上面代碼中,先比較a 與 b 的值,當滿足a大于 b 的條件,則執(zhí)行c 等于 a 的語句;否則會執(zhí)行 c 等于 b的語句。因為 a 的值為 4,并不大于 b 的值( 5),所以將 b 的值賦給了 c,輸出的結果為 5。注意: 上面的代碼中, if 與 else部分還有一個簡化的寫法,即, c = a,ba0: #使用 while循環(huán)。當 c 大于 0,就執(zhí)行下面語句 print(c) #輸出 c 的值 c -=1 #c
5、自身減 1 在上面代碼中, while 的循環(huán)條件是 c 大于 0。在 while 循環(huán)體里,每次都會打印出c 的值,并將 c 自身減 1。代碼運行后輸出如下:第 5 章控制流控制執(zhí)行順序的開關95 4 3 2 1 變量 c 的初始值為 4。c 經(jīng)過 4 次減 1 操作將會變?yōu)?0,不符合 while 的條件,于是結束循環(huán)。5.2.3 實例 14:將十進制數(shù)轉化為二進制數(shù)下面通過實例演示while 的使用。實例描述 通過輸入函數(shù)獲取一個十進制數(shù)值,并將其轉換為二進制數(shù)并輸出到屏幕。轉換的原理是:將輸入的十進制數(shù)值循環(huán)地除以2,直到返回的結果商為0為止。這期間,每次除 2 的余數(shù)就是轉換后的二進
6、制結果。使用變量 a 來接收 input 函數(shù)接到的鍵盤輸入, 并將其轉化為整型,然后通過while 循環(huán)來處理。代碼如下:代碼 5-2:將十進制數(shù)轉化成二進制數(shù)a = input(請輸入一個十進制數(shù):) #獲取一個十進制數(shù)d=int(a) #將輸入的字符串轉為整型s= while d!=0: #使用 while循環(huán),直到 d 的值為 0 d,f=divmod(d,2) #除以 2,并返回除數(shù)和余數(shù)s=str(f)+s #余數(shù)作為轉換后的二進制數(shù),除數(shù)作為循環(huán)條件print(s) #將結果輸出上面代碼運行后,輸出如下結果:請輸入一個十進制數(shù) : 這時,程序會掛起,等待用戶輸入。通過鍵盤輸入“6
7、”并按 enter 鍵。程序繼續(xù)執(zhí)行,輸出如下結果:110 結果顯示為 110。正是十進制數(shù)6 轉化成二進制數(shù)的結果。96python 帶我起飛:入門、進階、商業(yè)實戰(zhàn)5.3 for語句python中的 for 語句與 while 語句都是用來循環(huán)執(zhí)行代碼塊的。for 循環(huán)的執(zhí)行條件,不是判斷邏輯是否為真,而是遍歷一個序列容器。5.3.1 語句形式for 的語句形式為:for item in 序列數(shù)據(jù): statements1 意思是,每次從序列容器中取一個值(item),然后執(zhí)行語句statements1 。當遍歷完整個序列容器,循環(huán)也就結束了。關于 for 循環(huán)和 if 語句的使用,可以參見
8、5.3.4小節(jié)的實例演示。5.3.2 在 for 循環(huán)中,使用切片序列容器可以是任何python 支持的序列數(shù)據(jù)類型。如果在循環(huán)體內,執(zhí)行語句statements1對 for 后面的序列數(shù)據(jù)進行了修改,這會影響到for語句的初始循環(huán)次數(shù)。切片的介紹見4.3.4 小節(jié)。避免上面問題的方法是:使用切片的方法為該序列數(shù)據(jù)做一個副本,讓for 來遍歷副本中的序列數(shù)據(jù),這樣即使statements1語句修改了原始的序列容器中的數(shù)據(jù),也不會影響到初始的循環(huán)次數(shù)了。例如:words = i,love,python # 定義一個列表for item in words: #for后面沒有使用words ,而是使
9、用了切片作為words的副本 words.insert(0, item) #向 words里插入一個元素 print(item) #打印 item ,三次迭代分別輸出:i、 love、 python print(words) #打印整個 words ,輸出: python, love, i, i, love, python 上面代碼中的第 2 行,使用了 words的切片作為副本,完成了3 次迭代(因為有 3 個元素,各迭代一次)。再來看一個錯誤的寫法。假如不使用副本,將第二句代碼換成:for item in words: 第 5 章控制流控制執(zhí)行順序的開關97 這將會帶來死循環(huán)。 因為,每次
10、從 words 中遍歷一個數(shù)據(jù), 執(zhí)行下面語句時, 就會為 words添加一個數(shù)據(jù),這樣永遠也無法將words中的數(shù)據(jù)遍歷完。注意,一定要避免這種錯誤的寫法。5.3.3 在 for 循環(huán)中,使用內置函數(shù)range 在 for 循環(huán)中,還可以使用內置函數(shù)range來遍歷一個數(shù)字序列。1. range 介紹range的意思是返回一個數(shù)字區(qū)間的所有整數(shù)。(1)輸出大于零的序列單獨的 print(range(5)打印不出 05 之間的數(shù)字。輸出的是“range(0, 5)”,代表從 05 的一個范圍。如果要想將其內容散列出來,可以將其轉化成list 類型再打印,例如:print(list(range(
11、5) #將 05 間的整數(shù)轉化成list類型,并打印出來。輸出:0, 1, 2, 3, 4 range中的參數(shù)默認是從0 開始。上例中, range的參數(shù) 5 代表從 05 之間的數(shù)。這里05區(qū)間的取值仍然與切片的取值一致,即“要頭,不要尾”。意思就是,05 區(qū)間的數(shù)包含起始值(0),但是不包含結束值(5)。(2)輸出大于零的序列如果要將比 0 小的數(shù)傳入 range,會打印不出內容。例如:print(list(range(-5) # 5 比 0 小,range找不到任何比0 大的數(shù),只能返回空。輸出: 這種情況下,可以通過指定起始值來將50 之間的數(shù)打印出來。例如:print(list(ra
12、nge(-5,0) #將 50 間的整數(shù)轉化成列表類型, 并打印出來。輸出:-5, -4, -3, -2, -1 上例中, range里面的第一個參數(shù)5 代表起始值,第二個參數(shù)0 代表結束值。(3)步長range函數(shù)中還可以有第三個參數(shù)步長。即,從起始到結束,每隔“步長個數(shù)字”返回一次。例如:print(list(range(-5,0,2) #在 50 間,每隔兩個數(shù)取出一個,并轉化成list類型,打印出來。輸出:5, 3, 1 98python 帶我起飛:入門、進階、商業(yè)實戰(zhàn)2. range 與 for 結合了解完 range后,再來看一個range與 for 組合的例子:for i in
13、range(5): #循環(huán)遍歷 05 之間的整數(shù) print(i) #將取出的值打印出來這樣就實現(xiàn)了循環(huán)5 次的控制。在 range中放置一個整數(shù)( 5)的方式,指定了代碼的具體循環(huán)次數(shù)。上例執(zhí)行后,輸出:0 1 2 3 4 5.3.4 實例 15:利用循環(huán)實現(xiàn)冒泡排序在算法編程領域,循環(huán)與判斷語句的應用非常頻繁。下面就來實現(xiàn)一個算法的例子。實例描述 使用 for 循環(huán)對一個列表進行排序。要求不使用內置的庫函數(shù)。冒泡排序是數(shù)據(jù)結構中的經(jīng)典算法。手動實現(xiàn)冒泡排序,對初學者鍛煉自己的編程邏輯有很大幫助。冒泡排序算法的運作過程如下:(1)比較相鄰的元素。如果第一個比第二個大,就交換它們兩個。(2)從
14、最開始的第一對到結尾的最后一對,對每一對相鄰元素做步驟(1)所描述的比較工作,并將最大的元素放在后面。這樣,當從最開始的第一對到結尾的最后一對都執(zhí)行完后,整個序列中的最后一個元素便是最大的數(shù)。(3)將循環(huán)縮短,除去最后一個數(shù)(因為最后一個已經(jīng)是最大的了),再重復步驟(2)的操作,得到倒數(shù)第二大的數(shù)。(4)持續(xù)做步驟( 3)的操作,每次將循環(huán)縮短一位,并得到本次循環(huán)中的最大數(shù)。直到循環(huán)個數(shù)縮短為 1,即沒有任何一對數(shù)字需要比較。最終便得到了一個從小到大排序的序列。具體實現(xiàn)的代碼如下:第 5 章控制流控制執(zhí)行順序的開關99 代碼 5-3:冒泡排序01n =5,8,20,1 #定義一個列表02pri
15、nt(原數(shù)據(jù): ,n) 0304for i in range(len(n)-1): #這個循環(huán)負責設置冒泡排序進行的次數(shù)05 for j in range(len(n)-i-1): #為列表索引(索引可參見4.3.4小節(jié))06 if nj nj+1: #比較兩個數(shù)07 nj, nj+1 = nj+1, nj #交換0809print(排序后: ,n) #輸出結果上面代碼使用了兩層循環(huán):外層循環(huán),賦值冒泡排序進行的次數(shù),見代碼第4 行。內層循環(huán),負責將列表中相鄰的兩個元素進行比較,并調整順序。將較小的數(shù)放在前面,較大的數(shù)放在后面,見代碼第6、7 行。程序運行后,輸出如下結果:原數(shù)據(jù):5, 8,
16、20, 1 排序后:1, 5, 8, 20 5.3.5 在 for 循環(huán)中,使用內置函數(shù)zip for 語句還可以配合內置函數(shù)zip,以同時遍歷多個序列。1zip 介紹zip 函數(shù)可以將任意多的“序列”類型數(shù)據(jù)結合起來,生成新序列數(shù)據(jù)。生成的新序列數(shù)據(jù)中,每個元素都是一個元組。該元組的元素是由傳入zip 函數(shù)中的多個序列數(shù)據(jù)的元素組成。例如:x= 1,2,3 #定義兩個列表, x 與 y y=3,2,hello t = zip(x,y) #通過 zip生成一個新的序列t ,這時 t 是 zip類型print(tuple(t) #將 t 轉成元組,并打印。輸出:(1, 3), (2, 2), (
17、3, hello) 當然,生成的序列t 也可以轉成列表( list)類型。例如:x= 1,2,3 #定義兩個列表, x 與 y y=3,2,hello t = zip(x,y) #通過 zip生成一個新的序列t ,這時 t 是 zip類型print(list(t) #將 t 轉成列表,并打印。輸出:(1, 3), (2, 2), (3, hello) 100python 帶我起飛:入門、進階、商業(yè)實戰(zhàn)需要注意的是,當 zip 對象( t)被轉化為元組或列表后,就會自動銷毀。如果再使用t,將得不到具體的元素。例如:x= 1,2,3 #定義兩個列表, x 與 y y=3,2,hello t = z
18、ip(x,y) #通過 zip生成一個新的序列t ,這時 t 是 zip類型print(list(t) #將 t 轉成列表,并打印。輸出:(1, 3), (2, 2), (3, hello) print(tuple(t) #再次使用 t ,將 t 轉成元組,得到的是空元組。輸出: () zip 對象還可以通過前面加個字符“*”的方式來完成 unzip 的過程,所謂 unzip,就是將 zip生成的數(shù)據(jù)返回。例如:x= 1,2,3 #定義兩個列表, x 與 y y=3,2,hello t = zip(x,y) #通過 zip生成一個新的序列t ,這時 t 是 zip類型print(*t) #在 t 前面加一個 *,完成 unzip。輸出: (1, 3) (2, 2) (3, hello) print(*t) #同樣
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省池州市高三上學期期末考試理綜生物試題
- 2025年絕緣材料:絕緣套管合作協(xié)議書
- 浙江省2024高考地理二輪復習專題十七選修地理專題強化訓練
- 俱樂部籃球運動員合同范例
- 廣東省廉江市實驗學校高中政治2.2價格變動的影響3教案必修1
- 公司下游合同范例
- 農(nóng)村養(yǎng)豬場彩鋼棚合同范例
- 農(nóng)莊住宿餐飲合同范例
- 做磚合同范例
- 竹籬笆施工方案
- 模型18奔馳模型(原卷版+解析)
- 2024華中區(qū)域電力并網(wǎng)運行管理實施細則
- 安全員崗位競聘課件
- 職能科室對醫(yī)技科室醫(yī)療質量督查記錄表(檢驗科、放射科、超聲科、功能科、內鏡室)
- 報警員服務規(guī)范用語
- 護士職業(yè)暴露后處理
- 廣東省珠海市香洲區(qū)2023-2024學年七年級下學期期末歷史試題(原卷版)
- 反訴狀(業(yè)主反訴物業(yè))(供參考)
- GH/T 1451-2024調配蜂蜜水
- 3.作文指導-寫一種小動物課件
- 煤礦掘進探放水專項安全風險辨識評估標準
評論
0/150
提交評論