《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目7、8 函數(shù)應(yīng)用、文件操作_第1頁(yè)
《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目7、8 函數(shù)應(yīng)用、文件操作_第2頁(yè)
《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目7、8 函數(shù)應(yīng)用、文件操作_第3頁(yè)
《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目7、8 函數(shù)應(yīng)用、文件操作_第4頁(yè)
《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目7、8 函數(shù)應(yīng)用、文件操作_第5頁(yè)
已閱讀5頁(yè),還剩199頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

項(xiàng)目7函數(shù)應(yīng)用了解函數(shù)的概念及作用01理解函數(shù)的模塊化設(shè)計(jì)思想02掌握函數(shù)的定義和調(diào)用方法03知識(shí)目標(biāo)理解return語(yǔ)句的作用和用法05理解函數(shù)的局部變量和全局變量06理解函數(shù)的遞歸和嵌套用法07理解函數(shù)的參數(shù)傳遞方式04能夠根據(jù)功能需求定義函數(shù)01能夠根據(jù)功能需求定義嵌套函數(shù)。02能夠運(yùn)用不同的方式傳遞函數(shù)參數(shù)03能力目標(biāo)能夠熟練運(yùn)用匿名函數(shù)04能夠熟練運(yùn)用遞歸函數(shù)解決復(fù)雜的問(wèn)題05能夠處理函數(shù)的異常和錯(cuò)誤06目錄簡(jiǎn)易計(jì)算器設(shè)計(jì)任務(wù)1汽車進(jìn)銷存管理系統(tǒng)設(shè)計(jì)任務(wù)2漢諾塔游戲設(shè)計(jì)任務(wù)3

任務(wù)1簡(jiǎn)易計(jì)算器設(shè)計(jì)任務(wù)提出01任務(wù)分析02知識(shí)準(zhǔn)備03任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)提出Part.01提出任務(wù)運(yùn)用PyCharm開(kāi)發(fā)工具編寫(xiě)Python程序,設(shè)計(jì)一個(gè)簡(jiǎn)易的計(jì)算器,要求該計(jì)算器能實(shí)現(xiàn)兩個(gè)數(shù)字的加、減、乘、除(+、-、*、/)運(yùn)算等功能,其中每一種運(yùn)算都要求通過(guò)調(diào)用函數(shù)來(lái)完成。任務(wù)分析Part.02分析任務(wù)1.創(chuàng)建Python程序cal.py。2.設(shè)計(jì)命令行用戶界面,向用戶展示可用的運(yùn)算選項(xiàng)。3.為加、減、乘、除每一種運(yùn)算設(shè)計(jì)一個(gè)運(yùn)算函數(shù)。4.通過(guò)input函數(shù)接受用戶的輸入,調(diào)用相應(yīng)的函數(shù)進(jìn)行計(jì)算。5.運(yùn)行測(cè)試程序,通過(guò)驗(yàn)證輸出的計(jì)算結(jié)果來(lái)測(cè)試程序。該任務(wù)主要完成的是兩個(gè)數(shù)字的加、減、乘、除運(yùn)算,在運(yùn)行的過(guò)程中,根據(jù)用戶選擇的運(yùn)算來(lái)調(diào)用不同的函數(shù)完成計(jì)算,并給出計(jì)算結(jié)果。知識(shí)準(zhǔn)備Part.03函數(shù)概述01函數(shù)的定義02函數(shù)調(diào)用03知識(shí)準(zhǔn)備函數(shù)的嵌套定義04函數(shù)是組織好的、實(shí)現(xiàn)單一功能或相關(guān)聯(lián)功能,并可以重復(fù)使用的代碼,這段代碼已經(jīng)被提前編寫(xiě)好了,并且為其起一個(gè)“好聽(tīng)”的名字。在后續(xù)編寫(xiě)程序過(guò)程中,如果需要同樣的功能,直接通過(guò)起好的名字就可以調(diào)用這段代碼。函數(shù)概述Python中的函數(shù)可以分為內(nèi)置函數(shù)、標(biāo)準(zhǔn)庫(kù)函數(shù)、第三方庫(kù)函數(shù)和用戶自定義函數(shù)等幾種類型。內(nèi)置函數(shù):Python語(yǔ)言自帶的函數(shù),可以直接在任何Python程序中使用,無(wú)需導(dǎo)入任何庫(kù)。標(biāo)準(zhǔn)庫(kù)函數(shù):Python的標(biāo)準(zhǔn)庫(kù)包含了許多模塊,這些模塊提供了大量的函數(shù)來(lái)處理各種常見(jiàn)任務(wù)。要使用這些函數(shù),需要首先導(dǎo)入相應(yīng)的模塊。例如,math模塊提供了各種數(shù)學(xué)函數(shù),如sqrt()、sin()、cos()等,OS模塊則提供了與操作系統(tǒng)交互的函數(shù),如exists()、listdir()等。函數(shù)概述第三方庫(kù)函數(shù):除了標(biāo)準(zhǔn)庫(kù)之外,還有許多第三方庫(kù)可供Python程序員使用。這些庫(kù)通常需要通過(guò)包管理器pip進(jìn)行安裝,然后才能在程序中使用。例如numpy庫(kù)提供了大量的數(shù)值計(jì)算函數(shù),pandas庫(kù)提供了數(shù)據(jù)處理和分析的函數(shù),matplotlib庫(kù)提供了繪圖函數(shù)等。用戶自定義函數(shù):除了使用內(nèi)置函數(shù)和庫(kù)函數(shù)之外,Python還允許程序員根據(jù)特定的需求定義自己的函數(shù)。函數(shù)概述函數(shù)的定義,也就是創(chuàng)建一個(gè)函數(shù),可以理解為創(chuàng)建一個(gè)具有某些用途的工具。Python中使用關(guān)鍵字def來(lái)定義函數(shù),其語(yǔ)法格式如下:函數(shù)的定義標(biāo)記函數(shù)的開(kāi)始函數(shù)的唯一標(biāo)識(shí)傳入函數(shù)中的數(shù)據(jù)可以包含一個(gè)或多個(gè)參數(shù)也可以為空標(biāo)記函數(shù)體的開(kāi)始實(shí)現(xiàn)函數(shù)功能的具體代碼返回函數(shù)的處理結(jié)果給調(diào)用方標(biāo)志著函數(shù)的結(jié)束,若函數(shù)沒(méi)有返回值,可以省略注意,在創(chuàng)建函數(shù)時(shí),即使函數(shù)不需要參數(shù),也必須保留一對(duì)空的“()”,否則Python解釋器將提示“invaildsyntax”錯(cuò)誤。另外,如果想定義一個(gè)沒(méi)有任何功能的空函數(shù),可以使用pass語(yǔ)句作為占位符。函數(shù)的定義#定義個(gè)空函數(shù),沒(méi)有實(shí)際意義defpass_fun_():pass函數(shù)在定義完成后不會(huì)立刻執(zhí)行,直到被程序調(diào)用時(shí)才會(huì)執(zhí)行。函數(shù)調(diào)用語(yǔ)法格式如下:函數(shù)調(diào)用例如:area()#無(wú)參函數(shù)area_modify(9,7)#有參函數(shù)函數(shù)名([參數(shù)列表])程序在調(diào)用函數(shù)的位置暫停執(zhí)行,將數(shù)據(jù)傳遞給函數(shù)參數(shù);執(zhí)行函數(shù)體中的語(yǔ)句;程序回到暫停處繼續(xù)執(zhí)行。函數(shù)調(diào)用過(guò)程area()area_modify(9,7)例如調(diào)用過(guò)程area_modify(9,7)defarea_modify(a,b):

s=a*b

print(s)①②③④注意:函數(shù)調(diào)用函數(shù)的使用必須遵循先定義,后調(diào)用原則沒(méi)有事先定義函數(shù),而直接引用函數(shù)名,就相當(dāng)于在引用一個(gè)不存在的變量名函數(shù)定義階段:只檢測(cè)函數(shù)體的語(yǔ)法,不執(zhí)行函數(shù)體代碼函數(shù)調(diào)用階段執(zhí)行代碼說(shuō)明:函數(shù)調(diào)用在函數(shù)定義階段括號(hào)內(nèi)沒(méi)有參數(shù)注意:定義無(wú)參,意味著調(diào)用時(shí)也無(wú)需傳入?yún)?shù)應(yīng)用:如果函數(shù)體的代碼邏輯不需要依賴外部傳入的值,必須定義無(wú)參函數(shù)(1)無(wú)參函數(shù)說(shuō)明:函數(shù)調(diào)用在函數(shù)定義階段括號(hào)內(nèi)有參數(shù),稱為有參函數(shù)注意:定義時(shí)有參,意味著調(diào)用時(shí)也必須傳入?yún)?shù)應(yīng)用:如果函數(shù)體代碼邏輯需要依賴外部傳入的值,必須定義成有參函數(shù)(2)有參函數(shù)函數(shù)在定義時(shí)可以在其內(nèi)部嵌套定義另外一個(gè)函數(shù),嵌套的函數(shù)稱為外層函數(shù),被嵌套的函數(shù)稱為內(nèi)層函數(shù)。函數(shù)的嵌套定義defouter():print("這是外層函數(shù)")

definner():print("這是內(nèi)層函數(shù)")outer()例如:這是外層函數(shù)運(yùn)行結(jié)果如下:由運(yùn)行結(jié)果可知,程序沒(méi)有執(zhí)行內(nèi)層函數(shù)的打印語(yǔ)句,只輸出了外層函數(shù)的打印語(yǔ)句。這說(shuō)明內(nèi)層函數(shù)沒(méi)有被調(diào)用。函數(shù)的嵌套定義defouter():

print("這是外層函數(shù)")

definner():

print("這是內(nèi)層函數(shù)")

inner()#在outer函數(shù)中調(diào)用inner()函數(shù)outer()將上面的代碼修改如下:這是外層函數(shù)這是內(nèi)層函數(shù)運(yùn)行結(jié)果如下:任務(wù)實(shí)現(xiàn)Part.04分析代碼01編寫(xiě)代碼02任務(wù)實(shí)現(xiàn)1.分析代碼任務(wù)實(shí)現(xiàn)根據(jù)任務(wù)的功能需求,自定義4個(gè)函數(shù)add()、subtract()、multiply()、divide(),分別實(shí)現(xiàn)加法、減法、乘法和除法功能,每個(gè)函數(shù)定義兩個(gè)參數(shù),用于接收參與運(yùn)算的2個(gè)數(shù)字,并將運(yùn)算結(jié)果作為函數(shù)的返回值。在執(zhí)行除法運(yùn)算時(shí),需要考慮除數(shù)是否為0的情況,以免出現(xiàn)程序異常。1.分析代碼任務(wù)實(shí)現(xiàn)使用while循環(huán)語(yǔ)句保障程序持續(xù)運(yùn)行,直至用戶選擇退出系統(tǒng)為止。在while循環(huán)體中包含三個(gè)部分:1)使用print()函數(shù)輸出簡(jiǎn)易計(jì)算器的操作界面,并使用input()函數(shù)接收用戶的輸入。2)根據(jù)用戶的功能選擇和計(jì)算的數(shù)字,調(diào)用對(duì)應(yīng)的函數(shù)進(jìn)行計(jì)算,并輸出計(jì)算結(jié)果。3)通過(guò)break語(yǔ)句結(jié)束程序運(yùn)行。2.

編寫(xiě)代碼(1)任務(wù)實(shí)現(xiàn)defdivide(x,y):"""除法運(yùn)算"""

ify!=0:returnx/yelse:return"除數(shù)不能為零"defadd(x,y):"""加法運(yùn)算"""

returnx+ydefsubtract(x,y):"""減法運(yùn)算"""

returnx-ydefmultiply(x,y):"""乘法運(yùn)算"""

returnx*y2.

編寫(xiě)代碼(2)任務(wù)實(shí)現(xiàn)whileTrue:

print("------------簡(jiǎn)易計(jì)算器-------------\n選擇一個(gè)運(yùn)算:")

print("1.加法")

print("2.減法")

print("3.乘法")

print("4.除法")

print("5.退出")

choice=input("輸入選項(xiàng)編號(hào):")2.

編寫(xiě)代碼(3)任務(wù)實(shí)現(xiàn)ifchoicein('1','2','3','4'):num1=float(input("輸入第一個(gè)數(shù):"))

num2=float(input("輸入第二個(gè)數(shù):"))

ifchoice=='1':print(f"結(jié)果:{add(num1,num2)}")elifchoice=='2':print(f"結(jié)果:{subtract(num1,num2)}")elifchoice=='3':print(f"結(jié)果:{multiply(num1,num2)}")elifchoice=='4':print(f"結(jié)果:{divide(num1,num2)}")elifchoice=='5':print("退出程序.")

breakelse:print("無(wú)效的選項(xiàng),請(qǐng)重新輸入。")任務(wù)總結(jié)Part.05通過(guò)本任務(wù)的學(xué)習(xí),掌握了函數(shù)的作用、類型,以及函數(shù)的定義、調(diào)用方法。在定義和調(diào)用函數(shù)時(shí),需要注意以下幾點(diǎn):函數(shù)命名:函數(shù)名應(yīng)該遵循Python的標(biāo)識(shí)符命名規(guī)則,一般使用小寫(xiě)字母和下劃線的組合,應(yīng)該能夠簡(jiǎn)單、清晰地表達(dá)函數(shù)的功能。嵌套定義:定義嵌套函數(shù)時(shí),在嵌套的外層函數(shù)體外,無(wú)法調(diào)用嵌套的內(nèi)層函數(shù)。參數(shù)匹配:在調(diào)用函數(shù)時(shí),必須提供正確數(shù)量和類型的參數(shù)。如果參數(shù)數(shù)量或類型不匹配,Python會(huì)報(bào)錯(cuò)。返回值:函數(shù)可以通過(guò)return語(yǔ)句返回一個(gè)值。如果沒(méi)有return語(yǔ)句,或者return后面沒(méi)有跟任何值,那么函數(shù)會(huì)返回None。 嵌套定義:定義嵌套函數(shù)時(shí),在嵌套的外層函數(shù)體外,無(wú)法調(diào)用嵌套的內(nèi)層函數(shù)。文檔字符串:可以為每個(gè)函數(shù)添加文檔字符串,以描述函數(shù)的功能、參數(shù)和返回值。有助于其他人理解代碼和后期代碼的維護(hù)。 任務(wù)提出01任務(wù)分析02知識(shí)準(zhǔn)備03任務(wù)2汽車進(jìn)銷存管理系統(tǒng)設(shè)計(jì)任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹(shù)形圖案任務(wù)提出Part.01提出任務(wù)運(yùn)用PyCharm開(kāi)發(fā)工具編寫(xiě)Python程序,設(shè)計(jì)一個(gè)簡(jiǎn)單的進(jìn)銷存管理系統(tǒng),用于實(shí)現(xiàn)汽車4S店的進(jìn)銷存業(yè)務(wù)管理,需要維護(hù)的汽車信息包括汽車品牌、顏色、價(jià)格、數(shù)量等。系統(tǒng)具有添加、刪除、修改、查詢汽車信息以及退出功能,任務(wù)分析Part.02分析任務(wù)1.創(chuàng)建Python程序car.py。2.定義一個(gè)列表用于存放所有的汽車信息。3.設(shè)計(jì)系統(tǒng)操作界面,接收用戶的輸入操作。4.根據(jù)功能模塊設(shè)計(jì)要求,為每項(xiàng)功能編寫(xiě)函數(shù),在函數(shù)主體中設(shè)計(jì)業(yè)務(wù)處理邏輯。5.根據(jù)用戶的功能選擇,調(diào)用并傳遞參數(shù)給不同的模塊函數(shù),實(shí)現(xiàn)業(yè)務(wù)功能。6.運(yùn)行測(cè)試程序,逐項(xiàng)測(cè)試各項(xiàng)功能是否正常。該任務(wù)主要實(shí)現(xiàn)的是汽車信息添加、修改、刪除、查詢等功能,可以根據(jù)功能設(shè)計(jì)不同的功能模塊函數(shù),通過(guò)調(diào)用模塊函數(shù)并傳遞相應(yīng)參數(shù)實(shí)現(xiàn)業(yè)務(wù)處理知識(shí)準(zhǔn)備Part.03位置參數(shù)傳遞01關(guān)鍵字參數(shù)傳遞02默認(rèn)值參數(shù)傳遞03知識(shí)準(zhǔn)備可變參數(shù)傳遞04混合參數(shù)傳遞05函數(shù)的返回值06變量作用域07通常將定義函數(shù)時(shí)設(shè)置的參數(shù)稱為形式參數(shù)(簡(jiǎn)稱為形參),將調(diào)用函數(shù)時(shí)傳入的參數(shù)稱為實(shí)際參數(shù)(簡(jiǎn)稱為實(shí)參)。函數(shù)的參數(shù)傳遞是指將實(shí)際參數(shù)傳遞給形式參數(shù)的過(guò)程。函數(shù)參數(shù)傳遞形參實(shí)參函數(shù)在被調(diào)用時(shí)會(huì)將實(shí)參按照相應(yīng)的位置依次傳遞給形參,也就是說(shuō)將第一個(gè)實(shí)參傳遞給第一個(gè)形參,將第二個(gè)實(shí)參傳遞給第二個(gè)形參,以此類推。位置參數(shù)傳遞注意:位置參數(shù)傳遞位置參數(shù):按位置指定,實(shí)參和形參數(shù)量必須?致函數(shù)調(diào)?時(shí)括號(hào)中只寫(xiě)各個(gè)實(shí)參,這時(shí)形參的值與實(shí)參按照順序??對(duì)應(yīng)在調(diào)?函數(shù),指定的實(shí)際參數(shù)的數(shù)量,必須和形式參數(shù)的數(shù)量?致(傳多傳少都不行)關(guān)鍵字參數(shù)的傳遞是通過(guò)“形參=實(shí)參”的格式將實(shí)參與形參相關(guān)聯(lián),將實(shí)參按照相應(yīng)的關(guān)鍵字傳遞給形參。關(guān)鍵字參數(shù)傳遞傳遞方式的限定無(wú)論實(shí)參采用位置參數(shù)的方式傳遞,還是關(guān)鍵字參數(shù)的方式傳遞,每個(gè)形參都是有名稱的,怎么區(qū)分用哪種方式傳遞呢?符

號(hào)“/”傳遞方式的限定Python在3.8版本中新增了僅限位置形參的語(yǔ)法,使用符號(hào)“/”來(lái)限定部分形參只接收位置傳遞方式的實(shí)參。deffunc(a,b,/,c):print(a,b,c)

表示在/形參前的參數(shù)只能通過(guò)位置參數(shù)傳遞。Python允許為參數(shù)設(shè)置默認(rèn)值,即在定義函數(shù)時(shí),直接給形式參數(shù)指定一個(gè)默認(rèn)值。默認(rèn)參數(shù)傳遞默認(rèn)參數(shù)傳遞不傳參默認(rèn)參數(shù)傳遞傳參調(diào)用函數(shù)函數(shù)調(diào)用形式不傳參,調(diào)用函數(shù)就直接使用默認(rèn)值。傳參,在調(diào)用時(shí)可以重新給予默認(rèn)值的參數(shù)

通過(guò)位置傳參方式給值

通過(guò)關(guān)鍵詞傳參方式給值1.參數(shù)能不能全部定義為默認(rèn)參數(shù)?函數(shù)調(diào)用形式2.默認(rèn)參數(shù)位置會(huì)不會(huì)受約束呢?參數(shù)全部定義為默認(rèn)參數(shù)默認(rèn)參數(shù)位置變化注意:默認(rèn)參數(shù)傳遞函數(shù)在定義時(shí)可以指定各參數(shù)的默認(rèn)值;默認(rèn)參數(shù)和其它參數(shù)同時(shí)存在,默認(rèn)參數(shù)必須位于必選參數(shù)的后面。如果函數(shù)在定義時(shí)無(wú)法確定需要接收多少個(gè)數(shù)據(jù),那么可以在定義函數(shù)時(shí)為形參添加“*”或“**”:可變參數(shù)的傳遞“*”:接收以元組形式打包的多個(gè)值“**”:接收以字典形式打包的多個(gè)值1.打包“*”定

義deff1(*args):print(args)#輸出參數(shù)的值調(diào)

用f1()#f1(‘a(chǎn)’,‘e’,‘u’,‘i’,‘o’)結(jié)

果()(‘a(chǎn)’,‘e’,‘u’,‘i’,‘o’)可變參數(shù)傳遞2.打包“**”定

義deff2(**kwargs):print(kwargs)#輸出參數(shù)的值調(diào)

用f2(name=‘john’,height=180,weight=70)f2()結(jié)

果{'name':'john','height':180,'weight':70}{}可變參數(shù)傳遞可變參數(shù)傳遞函數(shù)中添加“*”或“**”的形參可以是符合命名規(guī)范的任意名稱,建議使用*args和**kwargs。若函數(shù)沒(méi)有接收到任何數(shù)據(jù),參數(shù)*args和**kwargs為空,即為空元組或空字典。

*的作用:在函數(shù)定義中,收集所有位置參數(shù)到一個(gè)新的元組,并將整個(gè)元組賦值給變量args。**

的作用:在函數(shù)定義中,收集關(guān)鍵字參數(shù)到一個(gè)新的字典,并將整個(gè)字典賦值給變量kwargs??勺儏?shù)傳遞1.實(shí)參是元組,可以使用“*”拆分成多個(gè)值,按位置參數(shù)傳給形參。2.實(shí)參是字典,可以使用“**”拆分成多個(gè)鍵值對(duì),按關(guān)鍵字參數(shù)傳給形參。函數(shù)調(diào)用時(shí)——實(shí)參1.解包“*”定

義deffun1(c1,c2,c3,c4,c5):print(c1,c2,c3,c4,c5)調(diào)

用chs=(‘a(chǎn)’,‘e’,‘u’,‘i’,‘o’)fun1(*chs)結(jié)

果‘a(chǎn)’,‘e’,‘u’,‘i’,‘o’可變參數(shù)傳遞2.解包“**”定

義deffun2(name,height,weight):print(name,height,weight)調(diào)

用boy={'name':'john','height':180,'weight':70}

fun2(**boy)結(jié)

果john18070可變參數(shù)傳遞1.先按照參數(shù)的位置傳遞。2.再按照參數(shù)的關(guān)鍵字傳遞。3.最后按打包的形式傳遞。混合參數(shù)傳遞注意:定義函數(shù)時(shí)參數(shù)有默認(rèn)值,則帶有默認(rèn)值的參數(shù)必須跟在必選參數(shù)的后面?;旌蠀?shù)傳遞func(1,2)#按位置傳遞方式將1、2賦值給a、b,c采用默認(rèn)值0func(1,2,c=3)#按位置傳遞方式將1、2賦值給a、b,將3賦值給c#a=1b=2c=3args=()kw={}func(1,2,3,‘x',‘y')#a=1b=2c=3args=(‘x',‘y')kw={}func(1,2,3,‘x',‘y',s=100)#a=1b=2c=3args=('a','b')kw={‘s':100}函數(shù)返回值函數(shù)中的return語(yǔ)句會(huì)在函數(shù)結(jié)束時(shí)將數(shù)據(jù)返回給程序,同時(shí)讓程序回到函數(shù)被調(diào)用的位置繼續(xù)執(zhí)行。defadd(num1,num2):res=num1+num2returnres#returnnum1,num2

如果函數(shù)使用return語(yǔ)句返回了多個(gè)值,那么這些值將被保存到元組中。一般格式為return[返回值]函數(shù)返回值如果函數(shù)沒(méi)有返回值,即函數(shù)執(zhí)行完畢后,不需要給調(diào)用處提供數(shù)據(jù),那么return可以省略不寫(xiě)。函數(shù)的返回值,如果是一個(gè),直接返回原類型。函數(shù)的返回值如果是多個(gè),返回的值為元組。函數(shù)返回值局部變量局部變量和全局變量定義:局部變量,就是在函數(shù)內(nèi)部定義的變量約束:其作用范圍是這個(gè)函數(shù)內(nèi)部,即只能在這個(gè)函數(shù)中使用,在函數(shù)的外部是不能使用的。全局變量局部變量和全局變量定義:在函數(shù)外邊定義的變量叫做全局變量。范圍:全局變量能夠在所有的函數(shù)中進(jìn)行訪問(wèn)。局部變量和全局變量訪問(wèn)修改局部變量和全局變量1.局部變量和全局變量定義的位置不同,作用域不同。2.全局變量在函數(shù)內(nèi)部只能被訪問(wèn),而無(wú)法直接修改。1.global關(guān)鍵字global和nonlocal關(guān)鍵字使用global關(guān)鍵字可以將局部變量聲明為全局變量,其使用方法如下:global變量名like1=10#like1在這里是一個(gè)全局變量deffunc():

globallike1#like1聲明時(shí),不能直接賦值。like1+=20#函數(shù)內(nèi)部修改變量like1print('函數(shù)內(nèi)部修改后:',like1)2.nonlocal關(guān)鍵字global和nonlocal關(guān)鍵字使用nonlocal關(guān)鍵字可以在局部作用域中修改嵌套作用域中定義的變量,其使用方法如下:nonlocal變量名deftest():number=10deftest_in():

nonlocalnumbernumber=20test_in()print(number)test()任務(wù)實(shí)現(xiàn)Part.04分析代碼01編寫(xiě)代碼02任務(wù)實(shí)現(xiàn)1.分析代碼任務(wù)實(shí)現(xiàn)(1)定義列表car_info用于保存所有的汽車信息,列表的元素為字典,字典中設(shè)置brand、color、price、num四個(gè)鍵分別對(duì)應(yīng)汽車的品牌、顏色、價(jià)格、數(shù)量信息。(2)定義main_menu()函數(shù),用于輸出系統(tǒng)的功能界面。(3)定義input_car_info()、add_car_info()、del_car_info(car)、modify_car_info()、show_car_info()功能函數(shù)用于實(shí)現(xiàn)錄入汽車信息、添加汽車信息入庫(kù)、修改已有汽車信息、刪除指定汽車信息、查詢?nèi)科囆畔⒌裙δ堋?4)在main()函數(shù)中,調(diào)用main_menu()函數(shù),并接收用戶的功能選擇,調(diào)用相應(yīng)的功能函數(shù)。定義列表輸出用戶操作界面任務(wù)實(shí)現(xiàn)2.編寫(xiě)代碼啟動(dòng)PyCharm,在項(xiàng)目文件夾Chapter07中新建Python文件car.py錄入汽車信息函數(shù)添加汽車信息函數(shù)任務(wù)實(shí)現(xiàn)2.編寫(xiě)代碼刪除汽車信息函數(shù)修改汽車信息函數(shù)任務(wù)實(shí)現(xiàn)2.編寫(xiě)代碼顯示所有的汽車信息函數(shù)任務(wù)實(shí)現(xiàn)2.編寫(xiě)代碼主函數(shù)任務(wù)實(shí)現(xiàn)2.編寫(xiě)代碼任務(wù)總結(jié)Part.05通過(guò)本任務(wù)的學(xué)習(xí),系統(tǒng)掌握Python中參數(shù)的傳遞方法、不同類型返回值以及變量的作用域的靈活應(yīng)用。在使用是需要注意以下幾點(diǎn)。參數(shù)命名:參數(shù)名應(yīng)該盡量清晰、簡(jiǎn)潔,并準(zhǔn)確描述參數(shù)的作用;避免使用Python中的保留關(guān)鍵字作為參數(shù)名;遵循Python的命名慣例,使用小寫(xiě)字母和下劃線來(lái)分隔單詞。參數(shù)類型:Python是一種動(dòng)態(tài)類型語(yǔ)言,所以函數(shù)的參數(shù)不需要預(yù)先聲明類型。位置參數(shù)與關(guān)鍵字參數(shù):在調(diào)用函數(shù)時(shí),可以使用位置參數(shù)(按照參數(shù)在函數(shù)定義中的順序傳遞)或關(guān)鍵字參數(shù)(通過(guò)參數(shù)名明確指定)。使用關(guān)鍵字參數(shù)可以提高代碼的可讀性,并允許在調(diào)用函數(shù)時(shí)改變參數(shù)的順序。默認(rèn)參數(shù):可以為函數(shù)參數(shù)提供默認(rèn)值,在調(diào)用函數(shù)時(shí)可以省略這些參數(shù)。如果帶有默認(rèn)值的參數(shù)與必選參數(shù)同時(shí)存在,則帶有默認(rèn)值的參數(shù)必須位于必選參數(shù)的后面。可變參數(shù)與關(guān)鍵字參數(shù):使用*args可以接收任意數(shù)量的位置參數(shù),它們被打包為一個(gè)元組。使用**kwargs可以接收任意數(shù)量的關(guān)鍵字參數(shù),它們被打包為一個(gè)字典。當(dāng)同時(shí)使用*args和**kwargs時(shí),*args必須放在**kwargs前面。參數(shù)驗(yàn)證:建議在函數(shù)內(nèi)部對(duì)傳入的參數(shù)進(jìn)行驗(yàn)證,確保參數(shù)的數(shù)據(jù)類型、取值范圍等是符合預(yù)期的,對(duì)于不符合預(yù)期的參數(shù)值,可以提前拋出異常。變量重名:為了避免變量名稱沖突,在同一作用域中不能有重名,但是不同的作用域內(nèi)可以重名。如果在函數(shù)內(nèi)部定義了一個(gè)與全局變量同名的局部變量,那么在函數(shù)內(nèi)部訪問(wèn)該變量時(shí),將優(yōu)先使用局部變量,而不是全局變量。變量作用域:在函數(shù)內(nèi)部,如果要修改全局變量,需要使用global關(guān)鍵字進(jìn)行聲明。否則,Python會(huì)將其視為一個(gè)新的局部變量。在嵌套函數(shù)(內(nèi)部函數(shù))中,可以直接訪問(wèn)外部函數(shù)(外部作用域)的局部變量,但是,外部函數(shù)不能直接訪問(wèn)嵌套函數(shù)的局部變量。任務(wù)提出01任務(wù)分析02知識(shí)準(zhǔn)備03任務(wù)3漢諾塔游戲設(shè)計(jì)任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹(shù)形圖案任務(wù)提出Part.01提出任務(wù)漢諾塔游戲是一個(gè)經(jīng)典遞歸問(wèn)題。假設(shè)有n個(gè)圓盤,編號(hào)從1到n,初始時(shí)按照從大到小的順序依次放置在A柱上,較大的圓盤在下,較小的圓盤在上。目標(biāo)是將這些圓盤移動(dòng)到C柱上,移動(dòng)過(guò)程中可以借助B柱,但是在移動(dòng)過(guò)程中大圓盤不能放到小圓盤上、每次只能移動(dòng)一個(gè)圓盤,如圖所示。運(yùn)用PyCharm開(kāi)發(fā)工具編寫(xiě)Python程序,完成圓盤從A柱到C柱的移動(dòng),并顯示移動(dòng)過(guò)程。任務(wù)分析Part.02分析任務(wù)1.創(chuàng)建Python程序hanoi.py。2.創(chuàng)建遞歸函數(shù)。在遞歸函數(shù)中,記錄每一次移動(dòng)的步驟。3.使用input()函數(shù)接受需要移動(dòng)的盤子數(shù)量。4.調(diào)用遞歸函數(shù),實(shí)現(xiàn)盤子的移動(dòng),輸出盤子移動(dòng)的過(guò)程。5.運(yùn)行測(cè)試,檢驗(yàn)是否正確完成移動(dòng)。本任務(wù)主要完成的是將A柱上所有的圓盤按照要求移動(dòng)到C柱上,要解決這個(gè)問(wèn)題,可以使用遞歸函數(shù)。具體的任務(wù)實(shí)施分析如下:知識(shí)準(zhǔn)備Part.03匿名函數(shù)定義01匿名函數(shù)的應(yīng)用02知識(shí)準(zhǔn)備遞歸函數(shù)03遞歸函數(shù)經(jīng)典應(yīng)用04匿名函數(shù)是一類無(wú)須定義標(biāo)識(shí)符的函數(shù),它與普通函數(shù)一樣可以在任何地方使用,python中使用lambda關(guān)鍵字定義匿名函數(shù)。語(yǔ)法格式如下:匿名函數(shù)定義lambda<形式參數(shù)列表>:<表達(dá)式>匿名函數(shù)與普通函數(shù)的主要區(qū)別如下:匿名函數(shù)定義普通函數(shù)定義時(shí)有名稱函數(shù)體中包含有多條語(yǔ)句實(shí)現(xiàn)比較復(fù)雜的功能能被其他程序使用匿名函數(shù)匿名函數(shù)沒(méi)有名稱函數(shù)體只能是一個(gè)表達(dá)式實(shí)現(xiàn)的功能比較簡(jiǎn)單不能被其他程序使用定義好的匿名函數(shù)不能直接使用,最好使用一個(gè)變量保存它,以便后期可以隨時(shí)使用這個(gè)函數(shù)。匿名函數(shù)定義示例#定義匿名函數(shù),并將它返回的函數(shù)對(duì)象賦值給變量temptemp=lambdax:x**3temp(10)匿名函數(shù)跟函數(shù)一起使用,根據(jù)字符串長(zhǎng)度進(jìn)行排序。匿名函數(shù)的應(yīng)用示例lst=['天宮一號(hào)','神州十三號(hào)','嫦娥號(hào)','北斗導(dǎo)航系統(tǒng)']print(sorted(lst,key=lambdas:len(s)))函數(shù)在定義時(shí)可以直接或間接地調(diào)用其他函數(shù)。若函數(shù)內(nèi)部調(diào)用了自身,則這個(gè)函數(shù)被稱為遞歸函數(shù)。遞歸函數(shù)遞歸函數(shù)在定義時(shí)需要滿足兩個(gè)基本條件:一個(gè)是遞歸公式,另一個(gè)是邊界條件。其中:遞歸函數(shù)遞歸公式:是求解原問(wèn)題或相似的子問(wèn)題的結(jié)構(gòu);邊界條件:是最小化的子問(wèn)題,也是遞歸終止的條件。遞歸函數(shù)的執(zhí)行可以分為以下兩個(gè)階段:遞歸函數(shù)1.遞推:遞歸本次的執(zhí)行都基于上一次的運(yùn)算結(jié)果。2.回溯:遇到終止條件時(shí),則沿著遞推往回一級(jí)一級(jí)地把值返回來(lái)。遞歸函數(shù)的一般定義格式如下所示:def函數(shù)名([參數(shù)列表]): if邊界條件:

return結(jié)果 else:

return遞歸公式遞歸函數(shù)經(jīng)典應(yīng)用階乘n!n!=1*2*3*…*n,可以分為以下兩種情況:1.當(dāng)n=1時(shí),所得的結(jié)果為1。2.當(dāng)n>1時(shí),所得的結(jié)果為n*(n-1)!。實(shí)現(xiàn)deffunc(num):ifnum==1:return1else:returnnum*func(num-1)num=int(input("請(qǐng)輸入一個(gè)整數(shù):"))result=func(num)print("5!=%d"%result)邊界條件遞歸公式遞歸函數(shù)經(jīng)典應(yīng)用階乘n!5!求解過(guò)程任務(wù)實(shí)現(xiàn)Part.04分析代碼01編寫(xiě)代碼02任務(wù)實(shí)現(xiàn)1.分析代碼任務(wù)實(shí)現(xiàn)1)如果n=1,即只有一個(gè)盤子,則直接從A柱移動(dòng)到C柱。2)如果n>1,即盤子數(shù)量大于1,則需要按照以下步驟進(jìn)行:(1)首先將n-1個(gè)盤子從A柱移動(dòng)到B柱,使用C柱作為輔助。(2)然后將第n個(gè)盤子從A柱移動(dòng)到C柱。(3)再將n-1個(gè)盤子從B柱移動(dòng)到C柱,使用A柱作為輔助。通過(guò)分析任務(wù)要求可知,先定義遞歸函數(shù)hanio(),用n,A,B和C作為函數(shù)參數(shù)。n代表盤子數(shù)量,A、B、C代表三個(gè)柱子。按照移動(dòng)規(guī)則的要求,盤子移動(dòng)過(guò)程如下:2.編寫(xiě)代碼任務(wù)實(shí)現(xiàn)通過(guò)本任務(wù)的學(xué)習(xí),重點(diǎn)掌握了匿名函數(shù)和遞歸函數(shù)的用途以及用法。在使用這兩種函數(shù)時(shí)需要注意以下幾點(diǎn):lambda函數(shù)的主體只能包含一個(gè)表達(dá)式,不能包含復(fù)雜的語(yǔ)句或循環(huán)語(yǔ)句。lambda函數(shù)可以接收任意數(shù)量的參數(shù),但通常建議用于處理少量參數(shù)的情況。如果邏輯復(fù)雜或參數(shù)較多,建議使用普通函數(shù)。lambda函數(shù)總是返回一個(gè)值,如果沒(méi)有顯式返回,則默認(rèn)返回None。通過(guò)本任務(wù)的學(xué)習(xí),重點(diǎn)掌握了匿名函數(shù)和遞歸函數(shù)的用途以及用法。在使用這兩種函數(shù)時(shí)需要注意以下幾點(diǎn):遞歸函數(shù)必須有一個(gè)或多個(gè)明確的退出條件,否則,遞歸將無(wú)限進(jìn)行下去。Python默認(rèn)的遞歸深度限制相對(duì)較低(通常是1000),這可能會(huì)限制遞歸函數(shù)的應(yīng)用范圍。如果需要處理更深的遞歸,可以通過(guò)sys.setrecursionlimit(limit)來(lái)增加遞歸深度限制。項(xiàng)目8文件操作了解文件的打開(kāi)和關(guān)閉方法01了解對(duì)文件讀寫(xiě)的方法02熟悉文件定位讀寫(xiě)的概念03知識(shí)目標(biāo)熟悉文件的重命名和刪除操作04熟悉文件夾的相關(guān)操作05理解基于維度的數(shù)據(jù)分類06熟悉一二維數(shù)據(jù)的存取與讀取方式07熟悉多維數(shù)據(jù)的格式化方法08能夠完成文件的打開(kāi)和關(guān)閉操作01能夠使用不同的讀取方式讀取文件內(nèi)容02能夠完成使用文件的定位讀寫(xiě)03能力目標(biāo)能夠?qū)ξ募M(jìn)行重命名和刪除操作04能夠完成文件夾的基本操作05能夠熟練完成一二維數(shù)據(jù)的存儲(chǔ)與讀取操作06目錄文件內(nèi)容復(fù)制任務(wù)1文件批量重命名任務(wù)2文件數(shù)據(jù)讀寫(xiě)任務(wù)3任務(wù)提出01任務(wù)分析02知識(shí)準(zhǔn)備03任務(wù)1文件內(nèi)容復(fù)制任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹(shù)形圖案任務(wù)提出Part.01提出任務(wù)PyCharm開(kāi)發(fā)工具編運(yùn)用寫(xiě)Python程序,實(shí)現(xiàn)將一個(gè)TXT文件的內(nèi)容復(fù)制到另一個(gè)TXT文件中的功能,要求在新文件中給每一行加上行標(biāo),如圖所示。提出任務(wù)完成效果舊文件新文件任務(wù)分析Part.02任務(wù)分析創(chuàng)建Python程序文件copy.py。打開(kāi)原始文件和新文件。將原始文件的內(nèi)容逐行讀取出來(lái),并加上行號(hào)將帶行號(hào)的數(shù)據(jù)寫(xiě)入到新文件。關(guān)閉所有打開(kāi)的文件,如果使用with打開(kāi),則不用再使用close()關(guān)閉。6.運(yùn)行測(cè)試程序,檢驗(yàn)數(shù)據(jù)是否正確寫(xiě)入到新文件中。本任務(wù)是對(duì)TXT文件的內(nèi)容進(jìn)行復(fù)制,涉及到對(duì)兩個(gè)文件的打開(kāi)、讀取、寫(xiě)入、關(guān)閉等操作。具體的任務(wù)實(shí)施分析如下:知識(shí)準(zhǔn)備Part.03文件打開(kāi)和關(guān)閉01文件數(shù)據(jù)讀寫(xiě)02文件定位讀寫(xiě)03知識(shí)準(zhǔn)備打開(kāi)文件01關(guān)閉文件02上下文管理語(yǔ)句038.1文件打開(kāi)和關(guān)閉打開(kāi)文件open函數(shù)打開(kāi)文件,其語(yǔ)法格式如下:open(filepath[,mode])filepath:必填,可以是文件名,可以包含路徑。

例如:C:\Users\hello.txt,如果文件在當(dāng)

前路徑下,可以直接寫(xiě)文件名hello.txt。mode:文件的打開(kāi)模式。打開(kāi)文件文件的打開(kāi)模式關(guān)閉文件close()函數(shù)關(guān)閉文件,其語(yǔ)法格式如下:file.close()file:文件對(duì)象。

例如:打開(kāi)文件a.txt,執(zhí)行完相應(yīng)操作以后將文件關(guān)閉。

file=open(a.txt)

……

file.close()上下文管理語(yǔ)句在Python中訪問(wèn)文件資源時(shí),可以使用with語(yǔ)句對(duì)文件資源進(jìn)行自動(dòng)管理。with語(yǔ)句的語(yǔ)法格式如下:withcontext_expression[asvariable]:with-blockcontext_expression:返回一個(gè)上下文管理器對(duì)象。例如使用with語(yǔ)句打開(kāi)‘hello.txt‘文件。withopen('hello.txt','r')asfile:……#文件在這里被自動(dòng)關(guān)閉。例:以r、w、a打開(kāi)test.txt文件,并且關(guān)閉。以“r”方式打開(kāi)

file=open("test.txt","r")

file.close()以“w”方式打開(kāi)

file=open("test.txt",“w")

file.close()以“a”方式打開(kāi)

file=open("test.txt",“a")

file.close()

課下可以練習(xí)以r+、w+,a+的模式打開(kāi)文件。讀文件01寫(xiě)文件028.2文件數(shù)據(jù)讀寫(xiě)讀文件方式一:read()方法讀取文件,其語(yǔ)法格式如下:file.read(size)file:文件對(duì)象。size:表示要讀取多少個(gè)字節(jié)的數(shù)據(jù);可以省略,如果省略會(huì)將文件中所有的數(shù)據(jù)都讀出來(lái)。

例:讀取file指向的文件內(nèi)容。

file.read()方式二:readlines()方法讀取文件,其語(yǔ)法格式如下:file.readlines()file:文件對(duì)象。readlines將整個(gè)文件的數(shù)據(jù)一次性讀出,返回一個(gè)列表。

例:讀取file指向的文件內(nèi)容。

file.readlines()讀文件方式三:readline()方法讀取文件,其語(yǔ)法格式如下:file.readline()file:文件對(duì)象。readline是一行一行的讀取文件數(shù)據(jù),需要注意的是讀完一行文件指針會(huì)自動(dòng)移到下一行。

例:讀取file指向的文件內(nèi)容。

file.readline()讀文件寫(xiě)文件write函數(shù)用來(lái)完成文件的寫(xiě)入,每次會(huì)將write寫(xiě)入的內(nèi)容追加到文件末尾,其語(yǔ)法格式如下:file.write(要寫(xiě)入的內(nèi)容)file:文件對(duì)象。

例:將helloworld寫(xiě)入file指向的文件中。

file.write(“helloworld”)寫(xiě)文件例:打開(kāi)test.txt文件,將helloworld寫(xiě)入文件中。打開(kāi)文件

file=open("test.txt",“w")寫(xiě)入

file.write(“helloworld”)關(guān)閉

file.close()寫(xiě)文件例:以3種不同的方式將test.txt的內(nèi)容讀出并且打印。

方式一打開(kāi)文件

file=open("test.txt",“r")讀取

content=File.read()

print(content)關(guān)閉

file.close()方式二打開(kāi)文件

file=open("test.txt",“w")讀取

foriinfile.readlines():

print(i)關(guān)閉

file.close()讀文件例:以3種不同的方式將test.txt的內(nèi)容讀出并且打印。方式三打開(kāi)文件file=open("test.txt",“w")讀取

content=File.readline()

print(content)關(guān)閉

file.close()tell()方法01seek()方法028.3文件定位讀寫(xiě)tell()方法從前面學(xué)習(xí)的讀寫(xiě)操作實(shí)例中可以看到,文件在進(jìn)行讀寫(xiě)操作時(shí)都是連續(xù)的,按照順序進(jìn)行的,程序總是從上次讀寫(xiě)的位置繼續(xù)向下讀寫(xiě)。但是實(shí)際應(yīng)用中,可能需要特定位置開(kāi)始讀寫(xiě),這時(shí)就需要使用“文件讀寫(xiě)位置”的屬性獲取文件位置,或者定位到文件的制定位置。具體的使用的方法是:tell()seek()tell():在讀寫(xiě)文件時(shí),如果想獲取文件當(dāng)前讀寫(xiě)到哪個(gè)位置,可以使用tell()方法獲取。其語(yǔ)法格式如下:file.tell()file:文件對(duì)象。

例:獲取文件當(dāng)前位置

file=open(“test.txt”)

file.tell()tell()方法seek()方法seek():指定文件的讀寫(xiě)位置。其語(yǔ)法格式如下:file:文件對(duì)象。offset:表示偏移量,也就是需要移動(dòng)的字節(jié)數(shù)。whence:表示方向,該參數(shù)的值有三個(gè):

0:表示文件開(kāi)頭。

1:表示使用當(dāng)前讀寫(xiě)位置。

2:表示文件末尾。

例:指定文件的讀寫(xiě)位置,從文件開(kāi)頭,偏移5個(gè)字節(jié)。

file=open(“test.txt”)

file.seek(5,0)file.seek(offset[,whence])seek()方法例:打開(kāi)test.txt文件,將helloworld寫(xiě)入文件中,使用tell方法獲取寫(xiě)入前和寫(xiě)入后的位置。打開(kāi)文件

file=open("test.txt",“r")

posi=file.tell()

print(“當(dāng)前位置是”,posi)寫(xiě)入

file.read(5)

posi=file.tell()

print(“當(dāng)前位置是”,posi)

file.close()定位讀文件例:以3種不同的方向?qū)est.txt進(jìn)行定位,并且讀出5個(gè)字節(jié)的數(shù)據(jù)。方式一file=open("test.txt",“r")file.seek(5,0)file.read(5)file.close()#關(guān)閉方式二file=open("test.txt",“r")file.seek(3,1)Print(file.read(5))file.seek(3,1)Print(file.read(5))file.close()#關(guān)閉方式三file=open("test.txt",“r")file.seek(5,2)Print(file.read(5))file.close()#關(guān)閉任務(wù)實(shí)現(xiàn)Part.04分析代碼01編寫(xiě)代碼02任務(wù)實(shí)現(xiàn)分析代碼特點(diǎn)1需要將原始文件的內(nèi)容全部復(fù)制到新文件中。每行開(kāi)頭添加行標(biāo)。觀察效果圖,找到特點(diǎn):特點(diǎn)2分析代碼第一步:使用open()函數(shù)只讀模式打開(kāi)原始文件test.txt、寫(xiě)入模式創(chuàng)建并打開(kāi)文件new_test.txt。第二步:使用readlines()方法讀取文件test.txt中的全部?jī)?nèi)容,并返回一個(gè)字符串列表,每行作為列表的一個(gè)元素。第三步:使用for循環(huán)遍歷字符串列表,在每行內(nèi)容前加入行標(biāo),并運(yùn)用write()函數(shù)寫(xiě)入新文件中。第四步:最后關(guān)閉原始文件和新文件,如果用with語(yǔ)句打開(kāi),第四步可以省略。代碼思路:(1)啟動(dòng)PyCharm,新建Python項(xiàng)目copy,新建Python文件copy.Py編寫(xiě)代碼(2)輸入代碼任務(wù)總結(jié)Part.05通過(guò)本任務(wù)的學(xué)習(xí),系統(tǒng)掌握了在Python中進(jìn)行文件的打開(kāi)、關(guān)閉、寫(xiě)入以及定位讀寫(xiě)的方法。使用with語(yǔ)句可以確保文件在操作完成后被自動(dòng)關(guān)閉,即使發(fā)生異常也會(huì)關(guān)閉文件。在執(zhí)行文件讀寫(xiě)操作時(shí),需要捕獲和處理可能發(fā)生的異常,例如文件不存在或沒(méi)有寫(xiě)入權(quán)限等。使用seek()方法進(jìn)行移位操作時(shí),當(dāng)whence參數(shù)為1和2時(shí),需要以二進(jìn)制模式打開(kāi)文件,否則會(huì)出現(xiàn)類似io.UnsupportedOperation:can‘tdononzerocur-relativeseeks的錯(cuò)誤。任務(wù)提出01任務(wù)分析02知識(shí)準(zhǔn)備03任務(wù)2文件批量重命名任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹(shù)形圖案任務(wù)提出Part.01提出任務(wù)運(yùn)用PyCharm開(kāi)發(fā)工具編寫(xiě)Python程序,實(shí)現(xiàn)文件批量重命名的功能,文件批量重命名的方式有兩種:一是給文件名添加字符、二是刪除文件名中的字符,批量重命名前后文件名對(duì)比如圖所示。提出任務(wù)完成效果舊文件名新文件名請(qǐng)輸入您要執(zhí)行的操作(1-添加字符,2-刪除字符):任務(wù)分析Part.02任務(wù)分析創(chuàng)建Python程序文件rename.py。提示用戶選擇重命名的方式是增加字符還是刪除字符。獲取文件夾下需要重命名的文件列表。根據(jù)用戶的選擇對(duì)文件進(jìn)行批量重命名。運(yùn)行程序,檢查文件名是否修改成功。本任務(wù)中需要提前準(zhǔn)備好批量重命名的文件,然后通過(guò)文件重命名方法修改文件名。具體的任務(wù)實(shí)施分析如下:知識(shí)準(zhǔn)備Part.03文件管理01文件夾管理02知識(shí)準(zhǔn)備rename()方法01remove()方法028.4文件管理rename()方法在實(shí)際應(yīng)用中,需要對(duì)文件或者文件夾做一些操作,Python的os模塊提供了很多函數(shù),可以實(shí)現(xiàn)對(duì)文件或者文件夾的一些操作,首先看一下文件的重命名和刪除函數(shù)。文件重命名rename()文件刪除remove()文件的重命名格式如下:os.rename(src,dst)os:Python標(biāo)準(zhǔn)庫(kù)的一個(gè)用于訪問(wèn)操作系統(tǒng)功能的模塊。src:需要修改的源文件名。dst:修改后的新文件名。

例:將a.txt重命名為new_a.txt

importos

os.rename(“a.txt”,”new_a.txt”)rename()方法文件的刪除格式如下:os.remove(path)os:Python標(biāo)準(zhǔn)庫(kù)的一個(gè)用于訪問(wèn)操作系統(tǒng)功能的模塊。path:指定文件。

例:將a.txt文件刪除。

importos

os.remove(“a.txt”)remove()方法文件夾相關(guān)操作018.5文件夾管理文件夾的相關(guān)操作文件夾的常見(jiàn)操作包括創(chuàng)建文件夾、獲取當(dāng)前目錄、改變默認(rèn)目錄、獲取目錄列表和刪除文件夾。1.創(chuàng)建文件格式:os.mkdir(“文件夾名字”);2.獲取當(dāng)前目錄:os.getcwd();3.改變默認(rèn)目錄:os.chdir(“目錄”);4.獲取目錄列表:os.listdir(“目錄”);5.刪除文件夾:os.rmdir(“文件夾名字”)。文件夾的相關(guān)操作

要求:

示例代碼:1.獲取當(dāng)前目錄;2.列出當(dāng)前目錄下所有的子目錄;3.將當(dāng)前目錄下的測(cè)試.txt文件重命名為核酸列表.txt;4.創(chuàng)建一個(gè)抗疫英雄的文件夾;5.將名為歷史.txt文件刪除;6.將騰訊健康文件夾刪除;7.操作完成以后改變目錄為抗疫英雄文件夾。importos

dir=os.getcwd()

print(os.listdir(dir))

os.rename(“測(cè)試.txt”,“核酸列表.txt”)

os.mkdir(“抗疫英雄”)

os.remove(“歷史.txt”)

os.rmdir(“騰訊健康”)

os.chdir(“抗疫英雄")

print(os.getcwd())任務(wù)實(shí)現(xiàn)Part.04分析代碼01編寫(xiě)代碼02任務(wù)實(shí)現(xiàn)分析代碼第一步:使用os.chdir()方法設(shè)置當(dāng)前文件夾。第二步:使用input()函數(shù)提示用戶選擇重命名的方式:添加字符、刪除字符。第三步:使用os.listdir()方法獲取當(dāng)前文件夾下的所有文件名稱。第四步:根據(jù)用戶的選擇,使用for循環(huán)遍歷所有文件名,用os.rename()方法逐一對(duì)文件名進(jìn)行重命名操作。代碼思路:(1)啟動(dòng)PyCharm,在項(xiàng)目文件夾Chapter08中新建Python文件rename.py(2)輸入如下代碼:編寫(xiě)代碼任務(wù)總結(jié)Part.05通過(guò)本任務(wù)的學(xué)習(xí),掌握了文件和文件夾操作的常用方法。路徑兼容性:不同操作系統(tǒng)(如Windows、Linux、macOS)使用不同的路徑分隔符(如\或/),可以使用os.path模塊中的函數(shù)(如os.path.join)確保路徑字符串的跨平臺(tái)兼容性。絕對(duì)路徑與相對(duì)路徑:絕對(duì)路徑是從文件系統(tǒng)的根目錄開(kāi)始,而相對(duì)路徑則是相對(duì)于當(dāng)前工作目錄或腳本所在的目錄。檢查文件是否存在:在嘗試讀取或?qū)懭胛募埃梢允褂胦s.path.exists()檢查文件是否存在,避免因文件不存在而導(dǎo)致的錯(cuò)誤。關(guān)閉文件:建議使用with語(yǔ)句來(lái)自動(dòng)管理文件的打開(kāi)和關(guān)閉,可以確保文件在使用完畢后被正確關(guān)閉,防止資源泄露。檢查文件夾是否存在:在創(chuàng)建新文件夾或向現(xiàn)有文件夾中添加文件之前,可以使用os.path.isdir()檢查目標(biāo)文件夾是否存在。權(quán)限問(wèn)題:注意文件和文件夾的權(quán)限設(shè)置,應(yīng)確保程序有足夠的權(quán)限來(lái)讀取、寫(xiě)入或刪除文件和文件夾,必要時(shí)可以使用os.chmod修改權(quán)限。異常處理:使用try-except塊來(lái)處理可能發(fā)生的文件讀寫(xiě)錯(cuò)誤,如FileNotFoundError、PermissionError等,避免程序崩潰。

任務(wù)提出01任務(wù)分析02知識(shí)準(zhǔn)備03任務(wù)3文件數(shù)據(jù)讀寫(xiě)任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹(shù)形圖案任務(wù)提出Part.01提出任務(wù)運(yùn)用PyCharm開(kāi)發(fā)工具編寫(xiě)Python程序,讀取工資文件Salary.csv的內(nèi)容,將所有的數(shù)據(jù)復(fù)制到新文件sum.csv中,在最后添加“總工資”列,并計(jì)算出每個(gè)員工的總工資,如圖所示。提出任務(wù)完成效果

Salary.csv

sum.csv任務(wù)分析Part.02任務(wù)分析創(chuàng)建Python程序文件format.py。打開(kāi)工資文件Salary.csv和匯總文件sum.csv。讀取Salary.csv的數(shù)據(jù)存入列表。增加新一列“總工資”,計(jì)算總工資數(shù)額。將匯總后的數(shù)據(jù)寫(xiě)入sum.csv文件。運(yùn)行程序,打開(kāi)sum.csv文件查看結(jié)果。本任務(wù)是對(duì)csv文件進(jìn)行數(shù)據(jù)的讀取與寫(xiě)入,首先需要了解csv文件的存儲(chǔ)格式,然后根據(jù)要求操作文件內(nèi)容。具體的任務(wù)實(shí)施分析如下:知識(shí)準(zhǔn)備Part.03數(shù)據(jù)維度01數(shù)據(jù)存儲(chǔ)02知識(shí)準(zhǔn)備一維數(shù)據(jù)01二維數(shù)據(jù)028.6數(shù)據(jù)維度多維數(shù)據(jù)03一維數(shù)據(jù)維度是與事務(wù)“有聯(lián)系”的概念的數(shù)量,根據(jù)“有聯(lián)系”的概念的數(shù)量,事務(wù)可分為一維數(shù)據(jù)、二維數(shù)據(jù)和多維數(shù)據(jù)。一維數(shù)據(jù):一維數(shù)據(jù)是具有對(duì)等關(guān)系的一組線性數(shù)據(jù),對(duì)應(yīng)數(shù)學(xué)之中的集合和一維數(shù)組。在Python中,一維列表、一維元組和集合都是一維數(shù)據(jù)。一維數(shù)據(jù)中的各個(gè)元素可以通過(guò)空格、逗號(hào)等分隔。例如某學(xué)期學(xué)生開(kāi)設(shè)的課程便是一組一維數(shù)據(jù),通過(guò)逗號(hào)分隔,如下所示:

數(shù)學(xué),英語(yǔ),語(yǔ)文,體育,理綜二維數(shù)據(jù)二維數(shù)據(jù):二維數(shù)據(jù)關(guān)聯(lián)參數(shù)的數(shù)量為2,此種數(shù)據(jù)對(duì)應(yīng)數(shù)學(xué)中的矩陣和二維數(shù)組,在Python語(yǔ)法中,二維列表、二維元組等都是二維數(shù)據(jù)。表格是日常生活中最常見(jiàn)的二維數(shù)據(jù)的組織形式,二維數(shù)據(jù)也稱為表格數(shù)據(jù)。如下成績(jī)表就是一種表格數(shù)據(jù)。姓名數(shù)學(xué)英語(yǔ)語(yǔ)文理綜張三120108112243李四105145130230王五146138123240多維數(shù)據(jù)多維數(shù)據(jù):二維數(shù)據(jù)是一維數(shù)據(jù)的集合,依次類推,三維數(shù)據(jù)可以是二維數(shù)據(jù)的集合。當(dāng)數(shù)據(jù)的維度超過(guò)兩個(gè)時(shí),稱之為多維數(shù)據(jù)。例如:2個(gè)3行4列的三維列表就是多維數(shù)據(jù),如下所示。[[[2,1,6,4],[1,4,3,7],[9,6,5,4]],[[7,7,5,2],[3,1,2,7],[3,6,5,1]]]一維數(shù)據(jù)存儲(chǔ)01二維數(shù)據(jù)存儲(chǔ)028.7數(shù)據(jù)存儲(chǔ)多維數(shù)據(jù)存儲(chǔ)03一維數(shù)據(jù)存儲(chǔ)數(shù)據(jù)存儲(chǔ):為了方便后續(xù)的讀寫(xiě)操作,數(shù)據(jù)通常需要按照約定的組織方式存儲(chǔ)在文件中。

一維數(shù)據(jù)呈線性排列,一般用特殊字符分隔,如下所示:1.使用空格分隔:數(shù)學(xué)英語(yǔ)語(yǔ)文體育理綜2.使用逗號(hào)分隔:數(shù)學(xué),英語(yǔ),語(yǔ)文,體育,理綜3.使用-分隔:數(shù)學(xué)-英語(yǔ)-語(yǔ)文-體育-理綜一維數(shù)據(jù)存儲(chǔ)注意

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論