《Python程序設(shè)計(jì)基礎(chǔ)》課件-項(xiàng)目5 函數(shù)的概念_第1頁
《Python程序設(shè)計(jì)基礎(chǔ)》課件-項(xiàng)目5 函數(shù)的概念_第2頁
《Python程序設(shè)計(jì)基礎(chǔ)》課件-項(xiàng)目5 函數(shù)的概念_第3頁
《Python程序設(shè)計(jì)基礎(chǔ)》課件-項(xiàng)目5 函數(shù)的概念_第4頁
《Python程序設(shè)計(jì)基礎(chǔ)》課件-項(xiàng)目5 函數(shù)的概念_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目5函數(shù)任務(wù)5實(shí)踐活動(dòng)任務(wù)1函數(shù)的概念任務(wù)2函數(shù)的參數(shù)傳遞任務(wù)3變量作用域任務(wù)4匿名函數(shù)任務(wù)5實(shí)踐活動(dòng)任務(wù)1函數(shù)的概念任務(wù)2函數(shù)的參數(shù)傳遞任務(wù)3變量作用域任務(wù)4匿名函數(shù)函數(shù)的定義在Python中,使用關(guān)鍵字def定義函數(shù),語法格式為:def 函數(shù)名([參數(shù)列表]):[“文檔字符串”]函數(shù)體[return語句]其中,方括號(hào)[]包含的內(nèi)容表示可選項(xiàng)。關(guān)于函數(shù)的說明有以下5點(diǎn)。函數(shù)代碼塊以def關(guān)鍵詞開頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)()。②任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間,圓括號(hào)之間可以用于定義參數(shù)。參數(shù)列表可以為空,也可以不為空。若參數(shù)列表為空,稱為無參函數(shù)。③函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。④函數(shù)內(nèi)容以冒號(hào):起始,并且縮進(jìn)。⑤return[表達(dá)式]結(jié)束函數(shù),選擇性地返回一個(gè)值給函數(shù)調(diào)用者;不帶表達(dá)式的return相當(dāng)于返回None;無return返回則相當(dāng)于返回None。函數(shù)的調(diào)用定義一個(gè)函數(shù)只給了函數(shù)一個(gè)名稱,指定了函數(shù)里包含的參數(shù)和代碼塊結(jié)構(gòu)。這個(gè)函數(shù)的基本結(jié)構(gòu)完成以后,你可以通過另一個(gè)函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行。代碼如下所示,我們?cè)诖a中調(diào)用了printmessage()和printcharac()函數(shù):#定義函數(shù)defprintcharac(str):print(str*10)#打印任何傳入的字符串10次defprintmessage():print("Hello_World")#打印你好世界

#調(diào)用函數(shù)printcharac('*')printmessage()printcharac('#')printcharac('%')上述代碼的執(zhí)行結(jié)果為:**********Hello_World##########%%%%%%%%%%定義函數(shù)計(jì)算月份的天數(shù)。我們可以根據(jù)月份和年份確定這個(gè)月共有多少天,需要注意的是閏年的2月是29天,非閏年的2月共有28天。代碼如下所示:defcalcula():month=int(input('請(qǐng)輸入月份'+'\n'))year=int(input('請(qǐng)輸入年份'+'\n'))if(year%4==0andyear%100!=0)oryear%400==0:k=1else:k=0ifmonth==1ormonth==3ormonth==5ormonth==7ormonth==8ormonth==10ormonth==12:print("這個(gè)月共有31天。")elifmonth==4ormonth==6ormonth==9ormonth==11:print("這個(gè)月共有30天。")elifmonth==2:ifk==1:print("這個(gè)月共有29天。")else:print("這個(gè)月共有28天。")else:print("請(qǐng)輸入正確月份")calcula()上述代碼的執(zhí)行結(jié)果為:請(qǐng)輸入月份2請(qǐng)輸入年份2023這個(gè)月共有28天。任務(wù)5實(shí)踐活動(dòng)任務(wù)1函數(shù)的概念任務(wù)2函數(shù)的參數(shù)傳遞任務(wù)3變量作用域任務(wù)4匿名函數(shù)必須參數(shù)必需參數(shù)須以正確的順序傳入函數(shù)。調(diào)用時(shí)的數(shù)量必須和聲明時(shí)的一樣。代碼如下所示,我們?cè)诖a中調(diào)用了printinfo()函數(shù),必須按形式參數(shù)位置傳入實(shí)際參數(shù),不然會(huì)出現(xiàn)語法錯(cuò)誤。不傳實(shí)際參數(shù)時(shí)#可寫函數(shù)說明defprintinfo(age,grade,gender,name):"打印學(xué)生的個(gè)人信息"print("姓名是:"+name+"年齡是:"+str(age)+"年級(jí)是:"+grade+"性別是:"+gender)

#調(diào)用printinfo函數(shù),不加參數(shù)會(huì)報(bào)錯(cuò)printinfo()上述代碼的執(zhí)行結(jié)果為:Traceback(mostrecentcalllast):File"d:/ex0503.py",line7,in<module>printinfo()TypeError:printinfo()missing4requiredpositionalarguments:'age','grade',gender,and'name'我們可以看到當(dāng)不傳實(shí)際參數(shù)時(shí)結(jié)果會(huì)報(bào)錯(cuò)。當(dāng)實(shí)際參數(shù)的位置與形式參數(shù)位置不一致時(shí)#可寫函數(shù)說明defprintinfo(age,grade,gender,name):"打印學(xué)生的個(gè)人信息"print("姓名是:"+name+"年齡是:"+str(age)+"年級(jí)是:"+grade+"性別是:"+gender)

#實(shí)際參數(shù)的位置與形式參數(shù)位置不一致printinfo("ligang","1年級(jí)","14","male")上述代碼的執(zhí)行結(jié)果為:姓名是:male年齡是:ligang年級(jí)是:1年級(jí)性別是:14我們可以看到當(dāng)實(shí)際參數(shù)的位置與形式參數(shù)位置不一致時(shí),輸出的內(nèi)容與結(jié)果不一致。關(guān)鍵字參數(shù)關(guān)鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值。使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時(shí)參數(shù)的順序與聲明時(shí)不一致,因?yàn)镻ython解釋器能夠用參數(shù)名匹配參數(shù)值。代碼如下所示:#可寫函數(shù)說明defprintinfo(age,grade,gender,name):"打印學(xué)生的個(gè)人信息"print("姓名是:"+name+"年齡是:"+str(age)+"年級(jí)是:"+grade+"性別是:"+gender)

#調(diào)用printinfo函數(shù),使用關(guān)鍵字參數(shù)根據(jù)參數(shù)名傳值printinfo(name="zhangsan",gender="female",age=18,grade="freshman")上述代碼的執(zhí)行結(jié)果為:姓名是:zhangsan年齡是:18年級(jí)是:freshman性別是:female默認(rèn)參數(shù)調(diào)用函數(shù)時(shí),如果沒有傳遞參數(shù),則會(huì)使用默認(rèn)參數(shù)。如果給帶有默認(rèn)值的形式參數(shù)傳值,則實(shí)際參數(shù)會(huì)覆蓋默認(rèn)值。代碼如下所示:defprintinfo(name,gender="male"):print("Name:",name)print("gender",gender)print("----")#調(diào)用printinfo函數(shù)printinfo(gender="female",name="kate")printinfo(name="bill")上述代碼的執(zhí)行結(jié)果為:Name:kate genderfemale----Name:billgendermale不定長參數(shù)你可能需要一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù)。這些參數(shù)叫做不定長參數(shù)?;菊Z法如下:def functionname([formal_args,][*var_args_tuple,][**var_args_dict]):"函數(shù)說明文檔"

函數(shù)體return[expression]可變參數(shù)有兩種形式:一種是*var_args_tuple,另一種是**var_args_dict。這兩個(gè)參數(shù)可搭配使用,也可以單獨(dú)使用。加了星號(hào)*的參數(shù)會(huì)以元組(tuple)的形式導(dǎo)入,存放所有未命名的變量參數(shù)。代碼如下所示:*var_args_tupledefprintinfo(*vartuple):print(type(vartuple))#參數(shù)類型print("打印傳入的參數(shù):")print(vartuple)#調(diào)用printinfo函數(shù)printinfo('x','y','z',11,22,33)<class'tuple'>打印傳入的參數(shù):('x','y','z',11,22,33)加了兩個(gè)星號(hào)**的參數(shù)會(huì)以字典的形式導(dǎo)入,存放所有未命名的變量參數(shù)。代碼如下所示:**var_args_dictdefprintinfo(**vardict):print(type(vardict))#參數(shù)類型print("打印傳入的參數(shù):")print(vardict)#調(diào)用printinfo函數(shù)printinfo(name='ForrestGump',score=9.5,country='America')<class'dict'>打印傳入的參數(shù):{'name':'ForrestGump','score':9.5,'country':'America'}任務(wù)5實(shí)踐活動(dòng)任務(wù)1函數(shù)的概念任務(wù)2函數(shù)的參數(shù)傳遞任務(wù)3變量作用域任務(wù)4匿名函數(shù)一個(gè)程序的所有的變量并不是在哪個(gè)位置都可以訪問的。訪問權(quán)限決定于這個(gè)變量是在哪里賦值的。變量的作用域決定了在哪一部分程序你可以訪問哪個(gè)特定的變量名稱。共有兩種最基本的變量作用域:局部變量和全局變量。定義在函數(shù)內(nèi)部的變量擁有一個(gè)局部作用域,定義在函數(shù)外的擁有全局作用域。局部變量局部變量是指在函數(shù)內(nèi)部定義并使用的變量,它只在函數(shù)內(nèi)部有效。即函數(shù)內(nèi)部的變量只在函數(shù)運(yùn)行時(shí)才會(huì)創(chuàng)建,在函數(shù)運(yùn)行之前或者運(yùn)行完畢之后,所有的變量就都不存在了。所以,如果在函數(shù)外部使用函數(shù)內(nèi)部定義的變量,就會(huì)出現(xiàn)拋出NameError異常。局部變量只能在其被聲明的函數(shù)內(nèi)部訪問,而全局變量可以在整個(gè)程序范圍內(nèi)訪問。調(diào)用函數(shù)時(shí),所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到局部作用域中。全局變量與局部變量對(duì)應(yīng),全局變量是能夠作用于函數(shù)內(nèi)外的變量。全局變量主要有以下兩種情況:①如果一個(gè)變量,在函數(shù)外定義,那么不僅在函數(shù)外可以訪問到,在函數(shù)內(nèi)也可以訪問到。在函數(shù)體以外定義的變量是全局變量。②在函數(shù)體內(nèi)定義,并且使用global關(guān)鍵字修飾后,該變量也就變?yōu)槿肿兞?。在函?shù)體外也可以訪問到該變量,并且在函數(shù)體內(nèi)還可以對(duì)其進(jìn)行修改。盡管Python允許全局變量和局部變量重名,但是在實(shí)際開發(fā)時(shí),不建議這么做,因?yàn)檫@樣容易讓代碼混亂,很難分清哪些是全局變量,哪些是局部變量。局部變量和全局變量的使用,編寫代碼如下所示:sum=10 #sum在這里是全局變量defnum(num1,num2):#返回2個(gè)參數(shù)的平方和."sum=num1*num1+num2*num2#sum在這里是局部變量.print("函數(shù)內(nèi)局部變量sum=",sum)

#調(diào)用num函數(shù)num(3,4)print("函數(shù)外全局變量sum=",sum)上述代碼的執(zhí)行結(jié)果為:函數(shù)內(nèi)局部變量sum=25函數(shù)外全局變量sum=10

任務(wù)5實(shí)踐活動(dòng)任務(wù)1函數(shù)的概念任務(wù)2函數(shù)的參數(shù)傳遞任務(wù)3變量作用域任務(wù)4匿名函數(shù)匿名函數(shù)是指沒有名字的函數(shù),應(yīng)用在需要一個(gè)函數(shù),但是又不想費(fèi)神去命名這個(gè)函數(shù)的場合。通常情況下,這樣的函數(shù)只使用一次。在Python中,使用lambda表達(dá)式創(chuàng)建匿名函數(shù),其語法格式如下:result=lambda[arg1[,arg2,···argn:]]:expression參數(shù)說明:result:用于調(diào)用lambda表達(dá)式。[arg1[,arg2,······,argn]]:可選參數(shù),用于指定要傳遞的參數(shù)列表,多個(gè)參數(shù)間使用逗號(hào)“,”分隔。expression:必選參數(shù),用于指定一個(gè)實(shí)現(xiàn)具體功能的表達(dá)式。如果有參數(shù),那么在該表達(dá)式中應(yīng)用這些參數(shù)。要注意的是,使用lambda表達(dá)式時(shí),參數(shù)可以有多個(gè),用逗號(hào)“,”分隔,但是表達(dá)式只能有一個(gè),即只能返回一個(gè)值,而且也不能出現(xiàn)其他非表達(dá)式語句如(for或while)。已知一個(gè)長方形的長和寬,計(jì)算周長。編寫代碼如下所示:a=10b=5x=lambdaa,b:2*a+2*bprint("長:{}、寬:{}的長方形的周長是:{}".format(a,b,x(a,b)))上述代碼的執(zhí)行結(jié)果為:長:10、寬:5的長方形的周長是:30任務(wù)5實(shí)踐活動(dòng)任務(wù)1函數(shù)的概念任務(wù)2函數(shù)的參數(shù)傳遞任務(wù)3變量作用域任務(wù)4匿名函數(shù)實(shí)踐1:完數(shù)一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如6=1+2+3。編程找出2000以內(nèi)的所有完數(shù)。2.代碼測試上述代碼的執(zhí)行結(jié)果為:

6284961.代碼實(shí)現(xiàn)本實(shí)例的具體實(shí)現(xiàn)代碼如下所示:deffactor(num):target=int(num)res=set()foriinrange(1,num):ifnum%i==0:res.add(i)res.add(num/i)returnres

foriinrange(2,2001):ifi==sum(factor(i))-i:print(i)實(shí)踐2:水仙花數(shù)水仙花數(shù)是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個(gè)"水仙花數(shù)",因?yàn)?53=1^3+5^3+3^3。

本實(shí)例要求編寫程序,打印出所有的水仙花數(shù)。1.實(shí)例分析(1)利用for循環(huán)控制100-999個(gè)數(shù),每個(gè)數(shù)分解出個(gè)位,十位,百位。(2)計(jì)算各個(gè)位的數(shù)的冪之和是否等于該數(shù)。2.代碼實(shí)現(xiàn)本實(shí)例的具體實(shí)現(xiàn)代碼如下所示:defflower(a,b):foriinrange(a,b):s=str(i)one=int(s[-1])ten=int(s[-2])hun=int(s[-3])ifi==one**3+ten**3+hun**3:print(i)flower(100,1000)3.代碼測試上述代碼的執(zhí)行結(jié)果為:153370371407實(shí)踐3:高空拋物一球從高處自由落下,每次落地后反跳回原高度的一半,再落下。請(qǐng)輸入起始高度,求它在第10次落地時(shí),共經(jīng)過多少米?第10次反彈多高?1.代碼實(shí)現(xiàn)本實(shí)例的具體實(shí)現(xiàn)代碼如下所示:deflength(num):high=num*2total=numforiinrange(10):high/=2total+=highprint(high/2)print('總長:',total)height=int(input("請(qǐng)輸入起始高度:"))length(height)2.代碼測試上述代碼的執(zhí)行結(jié)果為:請(qǐng)輸入起始高度:10050.025.012.56.253.1251.56250.781250.3906250.19531250.09765625總長:299.8046875實(shí)踐4:可被7整除但不能被5整除的數(shù)編寫一個(gè)程序,找到1000年至2000年(包括在內(nèi))中所有可被7整除但不能被5整除的所有數(shù)字,得到的數(shù)字按逗號(hào)分隔,打印在一行上。1.代碼實(shí)現(xiàn)defobb(a,b):l=[]foriinrange(a,b):if(i%7==0)and(i%5!=0):l.append(str(i))print(','.join(l))

obb(1000,2000)#函數(shù)調(diào)用編寫一個(gè)程序,找到1000年至2000年(包括在內(nèi))中所有可被7整除但不能被5整除的所有數(shù)字,得到的數(shù)字按逗號(hào)分隔,打印在一行上。2.代碼測試1001,1008,1022,1029,1036,1043,1057,1064,1071,1078,1092,1099,1106,1113,1127,1134,1141,1148,1162,1169,1176,1183,1197,1204,1211,1218,1232,1239,1246,1253,1267,1274,1281,1288,1302,1309,1316,1323,1337,1344,1351,1358,1372,1379,1386,1393,14

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論