【課件】數(shù)據(jù)結構-浙教版(2019)高中信息技術必修一課件_第1頁
【課件】數(shù)據(jù)結構-浙教版(2019)高中信息技術必修一課件_第2頁
【課件】數(shù)據(jù)結構-浙教版(2019)高中信息技術必修一課件_第3頁
【課件】數(shù)據(jù)結構-浙教版(2019)高中信息技術必修一課件_第4頁
【課件】數(shù)據(jù)結構-浙教版(2019)高中信息技術必修一課件_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章算法的程序實現(xiàn)3.2Python語言程序設計

必修1《數(shù)據(jù)與計算》3.2.8數(shù)據(jù)結構

學習目標

集合

表達式順序結構選擇結構循環(huán)結構

表達式

數(shù)據(jù)結構

1、由運算符、操作數(shù)(常量及變量)構成。2、按運算符優(yōu)先級來進行運算。3、賦值運算符不參與計算。

·定義·表達式的值1,每個表達式都有一個值2,表達式中有小數(shù)參與計算或有除號計算,則一定是float型(小數(shù))表達式表達式的值-4+842*(3+4/2)10.01>=2False8and9True0or-1True

表達式

數(shù)據(jù)結構

·表達式的真值表數(shù)據(jù)類型值(False)值(True)布爾False(與0等價)True(與1等價)數(shù)值0、0.0非零的數(shù)值字符串''、""(空字符串)非空字符串容器[]、()、{}、set()至少有一個元素的容器對象NoneNone非None對象

順序結構

數(shù)據(jù)結構

·定義

順序結構就是讓程序按照從頭到尾的順序依次執(zhí)行每一條Python代碼,不重復執(zhí)行任何代碼,也不跳過任何代碼。例如:

a=3a+=2print(a)輸出結果:5

選擇結構

數(shù)據(jù)結構

·定義

選擇結構也稱分支結構,就是讓程序“拐彎”,有選擇性的執(zhí)行代碼;換句話說,可以跳過沒用的代碼,只執(zhí)行有用的代碼。在Python語言中,ifelse語句可以實現(xiàn)這種選擇功能。ifelse語句if語句--單分支結構ifelse語句--雙分支結構ifelifelse語句--多分支結構

選擇結構

數(shù)據(jù)結構

·if語句語法格式:

if表達式:代碼塊執(zhí)行流程:開始代碼塊表達式結束TrueFalse“:”必須添加,代表后面的語句都是if語句內代碼塊的標志縮進:若代碼塊內都是相同的縮進格式,則說明此代碼塊都是if條件成立時需執(zhí)行的語句塊。表達式:表示if語句的條件,若表達式的值為True,則執(zhí)行下面的代碼塊;若值為False則不執(zhí)行代碼塊

選擇結構

數(shù)據(jù)結構

·ifelse語句語法格式:

if表達式:代碼塊1

else:代碼塊2執(zhí)行流程:開始代碼塊1表達式結束TrueFalse代碼塊2else后面也必須添加“:”代碼塊1和代碼塊2的縮進格式必須一樣,否則就報錯。

選擇結構

數(shù)據(jù)結構

·ifelifelse語句語法格式:

if表達式1

:代碼塊1

elif表達式2:代碼塊2

else:代碼塊3執(zhí)行流程:開始代碼塊1表達式1結束TrueFalse代碼塊2else語句和代碼塊3可以省略。表達式1代碼塊3TrueFalse

選擇結構

數(shù)據(jù)結構

注意:

1、選擇結構中,不管有多少分支,都只會執(zhí)行一個分支或一個也不執(zhí)行,不會同時執(zhí)行多個分支。2、在Python中沒有switch–case語句。例如:a=int(input(“請輸入數(shù)”))ifa>0:b=a+1print(b)a=int(input(“請輸入數(shù)”))ifa>0:b=a+1else:b=a+2print(b)a=int(input(“請輸入數(shù)”))ifa>0:b=a+1elifa>5:b=a+3else:b=a+2print(b)

選擇結構

數(shù)據(jù)結構

·if語句的嵌套

三種選擇結構都可以相互嵌套例如:if表達式1:if表示式2:代碼塊1else:代碼塊2if表示式1:if表達式2:代碼塊1else:代碼塊2else:if表達式3:代碼塊3if表示式1:if表達式2:代碼塊1else:代碼塊2elif:if表達式3:代碼塊3elif表達式4:代碼塊4else:代碼塊5else:if表達式5:代碼塊6

選擇結構

數(shù)據(jù)結構

·pass語句

空語句。pass不做任何事情,一般用做占位語句,為了保持程序結構的完整性。例如:age=int(input("請輸入你的年齡:"))ifage<12:print("嬰幼兒")elifage>=12andage<18:print("青少年")elifage>=18andage<30:print("成年人")elifage>=30andage<50:

passelse:print("老年人")使用pass語句比使用注釋更加優(yōu)雅。

選擇結構

數(shù)據(jù)結構

·assert語句

又稱斷言語句,可以看做是功能縮小版的if語句,它用于判斷某個表達式的值,如果值為真,則程序可以繼續(xù)往下執(zhí)行;反之,Python解釋器會報AssertionError錯誤。格式:assert表達式或者assert表達式[,參數(shù)]if表達式==True:程序繼續(xù)執(zhí)行else:程序報AssertionError錯誤

(或者參數(shù))參數(shù):一般為字符串信息

選擇結構

數(shù)據(jù)結構

·assert語句

例如:mathmark=int(input(“請輸入數(shù)值:”))#斷言數(shù)學考試分數(shù)是否位于正常范圍內assert0<=mathmark<=100,“超出范圍”#只有當mathmark位于[0,100]范圍內,程序才會繼續(xù)執(zhí)行print("數(shù)學考試分數(shù)為:",mathmark)輸出結果:請輸入數(shù)值:159Traceback(mostrecentcalllast):File"C:\Users\mengma\Desktop\file.py",line3,in<module>assert0<=mathmark<=100,“超出范圍”AssertionError:超出范圍

選擇結構

數(shù)據(jù)結構

·assert語句

雖然斷言是一種快速而簡便的觸發(fā)異常的方式。但是有些情況卻并不能使用。1、斷言可能會給出錯誤的異常類型2、當使用-o標識時,執(zhí)行了斷言會導致代碼被徹底中斷。(-o或-oo優(yōu)化標識,能夠通過變異卻不會被執(zhí)行。)斷言的使用場合:1、運行時對程序邏輯的檢測2、合約性檢查(比如前置條件,后置條件)3、程序中的常量4、檢查文檔5、防御性的編程

循環(huán)結構

數(shù)據(jù)結構

·range函數(shù)Python的內置函數(shù),返回的是一個迭代器。

格式:

range([start,]stop[,step])

1、start:計數(shù)從start開始。默認從0開始,可以缺省。

2、stop:計數(shù)到stop結束,但不包括stop。不能缺省。

3、step:步長,默認為1??梢匀笔 W⒁猓寒攕tep不缺省的時,start一定不缺省例如:list(range(5))list(range(0,5))list(range(-5,-1,-1))[0,1,2,3,4][0,1,2,3,4][]

循環(huán)結構

數(shù)據(jù)結構

·range函數(shù)

range三個參數(shù)的操作和序列的切片操作很類似。

例如:list(range(1,5,2))list(range(-5,-1,2))list(range(-1))list(range(0))list(range(-1,-5))list(range(1,5,-2))list(range(5,1,-2))[1,3][-5,-3][][][][][5,3]

循環(huán)結構

數(shù)據(jù)結構

·while循環(huán)語法格式:

while條件表達式:

循環(huán)體執(zhí)行流程:開始循環(huán)體表達式結束TrueFalsewhile條件表達式必須添加“:”具體流程為:首先判斷條件表達式的值,其值為真(True)時,則執(zhí)行循環(huán)體中的語句,當執(zhí)行完畢后,再回過頭來重新判斷條件表達式的值是否為真,若仍為真,則繼續(xù)重新執(zhí)行循環(huán)體...如此循環(huán),直到條件表達式的值為假(False),才終止循環(huán)。

循環(huán)結構

數(shù)據(jù)結構

·while循環(huán)num=1a=0whilenum<100:

a+=1num+=1print("a=",a)print("num=",num)例如:輸出結果:a=99num=100由左邊的例子可知:1、循環(huán)體運行了99次2、循環(huán)條件的判斷執(zhí)行了100次

循環(huán)結構

數(shù)據(jù)結構

·while循環(huán)

Python中,while循環(huán)支持else分支。

格式:while<CONDITION>:CODEelse:CODE_ELSE執(zhí)行流程:開始循環(huán)體表達式結束TrueFalse代碼塊注意:

while的else分支表示當正常退出while循環(huán)的時候所執(zhí)行的代碼分支。所謂正常退出,是指不是通過break跳出的情況,也就是正常把所有循環(huán)條件輪完的情況,否則程序不執(zhí)行else分支中的代碼塊。

循環(huán)結構

數(shù)據(jù)結構

·while循環(huán)y=int(input(“請輸入值”))x=y//2whilex>1:ify%x==0:print(y,"hasafactor:",x)breakx-=1else:print("yisaprime")print(f'y={y}')例如:(判斷一個數(shù)(如下面的y)是否是質數(shù))輸出結果:請輸入值:17yisaprimey=17請輸入值:16yhasafactor:8y=16

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)語法格式:

for迭代變量in<Sequence>:

代碼塊執(zhí)行流程:開始循環(huán)體序列中是否有項結束有沒有1、迭代變量用于存放從序列類型變量中讀取出來的元素,所以一般不會在循環(huán)中對迭代變量手動賦值;2、代碼塊指的是具有相同縮進格式的多行代碼(和while一樣),由于和循環(huán)結構聯(lián)用,因此代碼塊又稱為循環(huán)體。3、Sequence:字符串、列表、元組、字典、集合取下一項

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)print("計算1+2+...+100的結果為:")#保存累加結果的變量result=0foriinrange(101):result+=iprint(result)例如:輸出結果:計算1+2+...+100的結果為:5050由左邊的例子可知:1、迭代變量取值為:0~1002、range為迭代:0~100

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)語法格式:

for迭代變量in<Sequence>:CODEelse:CODE_ELSE執(zhí)行流程:開始循環(huán)體序列中是否有項結束有沒有

每次迭代時,for從序列中取一個元素賦值給控制變量i,下一輪迭代取下一個元素再賦值給i。和其它語言不太一樣,for中的控制變量不會在for循環(huán)完后消失,它會保持最后一個被迭代的元素值。

原因:python中for不算是代碼塊,也就是說沒有自己的名稱空間。取下一項代碼塊for循環(huán)中的else分支和while循環(huán)中的功能是一樣的

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)foriin'Python':print(i)例如:遍歷一個字符串例如:遍歷一個列表L=["aa","bb","cc"]foriinL:print(i)例如:遍歷一個元組L=("aa","bb","cc")foriinL:print(i)例如:遍歷一個集合L={1,3,8}foriinL:print(i)Pythonaabbccaabbcc813a=>1b=>2c=>3

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)D={'a':1,'b':2,'c':3}forkeyinD:print(key,"=>",D[key])例如:遍歷一個字典,迭代的是key例如:通過keys()迭代字典D={'a':1,'b':2,'c':3}forkeyinD.keys():print(key,"=>",D[key])例如:直接迭代字典的value例如:同時迭代key和valueD={'a':1,'b':2,'c':3}forvinD.values():print(v)D={'a':1,'b':2,'c':3}fork,vinD.items():print(k,v)a=>1b=>2c=>3123a1b2c3

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)L=[1111,2222]foriinL:i+=1print(L)例1:例2:L=[[1],[1,2],[1,2,3]]foriinL:i.append(0)print(L)輸出結果:輸出結果:[1111,2222][[1,0],[1,2,0],[1,2,3,0]]為什么會出現(xiàn)這樣的情況?

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)L=[1111,2222]print(id(L[0]))print(id(L[1]))print("-"*15)foriinL:print(id(i))例如:輸出結果:4699009646990128---------------4699009646990128可見,變量i和列表中元素的內存地址是一致的for迭代時,實際上是從可迭代對象中取元素并進行賦值的過程。而且,python中變量賦值是按引用賦值的,所以每次迭代過程中賦值給控制變量的是那個元素的引用,而不是拷貝這個元素并賦值給控制變量。正因為是按引用賦值,所以迭代過程中修改賦值給控制變量i的不可變對象時會創(chuàng)建新對象,從而不會影響原始數(shù)據(jù),但如果賦值給i的是可變對象,則修改i會影響原始數(shù)據(jù)。

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)+range迭代foriinrange(3):print(i)foriin[0,1,2]:print(i)上面兩段代碼的結果是一樣的,但是過程很不一樣。

range()返回的是可迭代對象,說明序列數(shù)值是需要迭代一個臨時生成一個的,也就是說range()從始至終在內存中都只占用一個數(shù)值的內存空間。而[0,1,2]則是在內存中占用一個包含3數(shù)值元素的列表,然后for從這個列表對象中按照索引進行迭代。通俗地解釋下,foriinrange(3)開始迭代的時候,生成一個數(shù)值0,第二次迭代再生成數(shù)值1,第三次迭代再生成數(shù)值2,在第一次迭代的時候,1和2都是不存在的。而[0,1,2]則是早就存在于內存中,for通過list類型編寫好的迭代器進行迭代,每次迭代從已存在的數(shù)值中取一個元素。

在效率上,使用range()要比直接解析列表要慢一點,但是在內存應用上,range()的方式要比直接解析已存在的列表要好,特別是列表較大的時候。

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)+zip()函數(shù)

zip()函數(shù)可以將多個序列(列表、元組、字典、集合、字符串以及range()區(qū)間構成的列表)中的值一一對應地取出來,然后放進一個元組中。它返回一個可迭代對象,可以直接通過list/set等函數(shù)將它們的內容一次性展現(xiàn)出來。格式:zip(iterable,...)例如:L=[1,2]S={'a','b','c','d'}list(zip(S,L))[('d',1),('a',2)]注意:集合是無序的,所以從S中取的元素是隨機的。當是其他序列時,它會從多個序列中分別取各序列中第1個元素、第2個元素、...第n個元素,各自組成新的元組。當多個序列中元素個數(shù)不一致時,會以最短的序列為準進行壓縮

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)+zip()函數(shù)例如:L1=[1,2,3,4,5]L2=[11,22,33,44,55,66]L3=[111,222,333]for(x,y,z)inzip(L1,L2,L3):print("%d+%d+%d=%d"%(x,y,z,x+y+z))輸出結果:1+11+111=1232+22+222=2463+33+333=369

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)+enumerate()函數(shù)

enumerate()函數(shù)用于將一個可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標,一般用在for循環(huán)當中。格式:enumerate(sequence,[start])

1、sequence:一個序列、迭代器或其他支持迭代對象。

2、start:下標起始位置。默認從0開始??扇笔 @纾簊eq=['one','two','three']fori,elementinenumerate(seq):print(i,element)輸出結果:0one1two2three

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)的陷阱·陷阱一迭代操作是遞歸到數(shù)據(jù)對象中去的,而不是根據(jù)變量名進行迭代的。也就是說迭代的對象是內存中的數(shù)據(jù)對象。例1:L=['a','b','c','d','e']foriinL:ifiin"de":L+=["1","2"]print(i,end="")輸出結果:abcde1212例2:L=['a','b','c','d','e']foriinL:ifiin"de":L=L+["1","2"]print(i,end="")print()foriinL2:print(i,end="")輸出結果:abcdeabcde1212

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)的陷阱·陷阱二迭代一個列表,迭代過程中刪除列表元素,達不到預定效果。例如:L=['a','b','c','d','e']foriinL:ifiin"bc":L.remove(i)print(i)print(L)輸出結果:b['a','c','d','e']

這個for循環(huán)的本意是想刪除b、c元素,但結果卻只刪除了b。通過結果可以發(fā)現(xiàn),c根本就沒有被for迭代。

原因是列表的自動內存管理功能造成的,而for循環(huán)的迭代沒有自動檢測,繼續(xù)運行,從而導致達不到預想效果。有切片法,末尾刪除法都可以達到預想結果。

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)的陷阱·陷阱二迭代并修改集合或字典時,一般情況,系統(tǒng)會報錯。例1:D={'a':1,'b':2,'c':3,'d':4,'e':5}foriinD:ifiin"bc":delD[i]print(i)print(D)輸出結果:bRuntimeError例2:S={'a','b','c','d','e'}foriinS:ifiin"bc":S.remove(i)print(i)print(S)輸出結果:bRuntimeError

雖然它們是可變序列,但是它們是以hashkey作為迭代依據(jù)的,只要增、刪元素,就會導致整個對象的順序hashkey發(fā)生改變,這是編寫這兩種類型的迭代器時所需要避免的問題。

循環(huán)結構

數(shù)據(jù)結構

·for循環(huán)的陷阱·陷阱二迭代并修改集合或字典時,一般情況,系統(tǒng)會報錯。例1:D={'a':1,'b':2,'c':3,'d':4,'e':5}foriinD.copy():ifiin"bc":delD[i]print(i)print(D)輸出結果:

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論