




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目5函數任務5實踐活動任務1函數的概念任務2函數的參數傳遞任務3變量作用域任務4匿名函數任務5實踐活動任務1函數的概念任務2函數的參數傳遞任務3變量作用域任務4匿名函數函數的定義在Python中,使用關鍵字def定義函數,語法格式為:def 函數名([參數列表]):[“文檔字符串”]函數體[return語句]其中,方括號[]包含的內容表示可選項。關于函數的說明有以下5點。函數代碼塊以def關鍵詞開頭,后接函數標識符名稱和圓括號()。②任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用于定義參數。參數列表可以為空,也可以不為空。若參數列表為空,稱為無參函數。③函數的第一行語句可以選擇性地使用文檔字符串—用于存放函數說明。④函數內容以冒號:起始,并且縮進。⑤return[表達式]結束函數,選擇性地返回一個值給函數調用者;不帶表達式的return相當于返回None;無return返回則相當于返回None。函數的調用定義一個函數只給了函數一個名稱,指定了函數里包含的參數和代碼塊結構。這個函數的基本結構完成以后,你可以通過另一個函數調用執行,也可以直接從Python提示符執行。代碼如下所示,我們在代碼中調用了printmessage()和printcharac()函數:#定義函數defprintcharac(str):print(str*10)#打印任何傳入的字符串10次defprintmessage():print("Hello_World")#打印你好世界
#調用函數printcharac('*')printmessage()printcharac('#')printcharac('%')上述代碼的執行結果為:**********Hello_World##########%%%%%%%%%%定義函數計算月份的天數。我們可以根據月份和年份確定這個月共有多少天,需要注意的是閏年的2月是29天,非閏年的2月共有28天。代碼如下所示:defcalcula():month=int(input('請輸入月份'+'\n'))year=int(input('請輸入年份'+'\n'))if(year%4==0andyear%100!=0)oryear%400==0:k=1else:k=0ifmonth==1ormonth==3ormonth==5ormonth==7ormonth==8ormonth==10ormonth==12:print("這個月共有31天。")elifmonth==4ormonth==6ormonth==9ormonth==11:print("這個月共有30天。")elifmonth==2:ifk==1:print("這個月共有29天。")else:print("這個月共有28天。")else:print("請輸入正確月份")calcula()上述代碼的執行結果為:請輸入月份2請輸入年份2023這個月共有28天。任務5實踐活動任務1函數的概念任務2函數的參數傳遞任務3變量作用域任務4匿名函數必須參數必需參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。代碼如下所示,我們在代碼中調用了printinfo()函數,必須按形式參數位置傳入實際參數,不然會出現語法錯誤。不傳實際參數時#可寫函數說明defprintinfo(age,grade,gender,name):"打印學生的個人信息"print("姓名是:"+name+"年齡是:"+str(age)+"年級是:"+grade+"性別是:"+gender)
#調用printinfo函數,不加參數會報錯printinfo()上述代碼的執行結果為:Traceback(mostrecentcalllast):File"d:/ex0503.py",line7,in<module>printinfo()TypeError:printinfo()missing4requiredpositionalarguments:'age','grade',gender,and'name'我們可以看到當不傳實際參數時結果會報錯。當實際參數的位置與形式參數位置不一致時#可寫函數說明defprintinfo(age,grade,gender,name):"打印學生的個人信息"print("姓名是:"+name+"年齡是:"+str(age)+"年級是:"+grade+"性別是:"+gender)
#實際參數的位置與形式參數位置不一致printinfo("ligang","1年級","14","male")上述代碼的執行結果為:姓名是:male年齡是:ligang年級是:1年級性別是:14我們可以看到當實際參數的位置與形式參數位置不一致時,輸出的內容與結果不一致。關鍵字參數關鍵字參數和函數調用關系緊密,函數調用使用關鍵字參數來確定傳入的參數值。使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為Python解釋器能夠用參數名匹配參數值。代碼如下所示:#可寫函數說明defprintinfo(age,grade,gender,name):"打印學生的個人信息"print("姓名是:"+name+"年齡是:"+str(age)+"年級是:"+grade+"性別是:"+gender)
#調用printinfo函數,使用關鍵字參數根據參數名傳值printinfo(name="zhangsan",gender="female",age=18,grade="freshman")上述代碼的執行結果為:姓名是:zhangsan年齡是:18年級是:freshman性別是:female默認參數調用函數時,如果沒有傳遞參數,則會使用默認參數。如果給帶有默認值的形式參數傳值,則實際參數會覆蓋默認值。代碼如下所示:defprintinfo(name,gender="male"):print("Name:",name)print("gender",gender)print("----")#調用printinfo函數printinfo(gender="female",name="kate")printinfo(name="bill")上述代碼的執行結果為:Name:kate genderfemale----Name:billgendermale不定長參數你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數。基本語法如下:def functionname([formal_args,][*var_args_tuple,][**var_args_dict]):"函數說明文檔"
函數體return[expression]可變參數有兩種形式:一種是*var_args_tuple,另一種是**var_args_dict。這兩個參數可搭配使用,也可以單獨使用。加了星號*的參數會以元組(tuple)的形式導入,存放所有未命名的變量參數。代碼如下所示:*var_args_tupledefprintinfo(*vartuple):print(type(vartuple))#參數類型print("打印傳入的參數:")print(vartuple)#調用printinfo函數printinfo('x','y','z',11,22,33)<class'tuple'>打印傳入的參數:('x','y','z',11,22,33)加了兩個星號**的參數會以字典的形式導入,存放所有未命名的變量參數。代碼如下所示:**var_args_dictdefprintinfo(**vardict):print(type(vardict))#參數類型print("打印傳入的參數:")print(vardict)#調用printinfo函數printinfo(name='ForrestGump',score=9.5,country='America')<class'dict'>打印傳入的參數:{'name':'ForrestGump','score':9.5,'country':'America'}任務5實踐活動任務1函數的概念任務2函數的參數傳遞任務3變量作用域任務4匿名函數一個程序的所有的變量并不是在哪個位置都可以訪問的。訪問權限決定于這個變量是在哪里賦值的。變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。共有兩種最基本的變量作用域:局部變量和全局變量。定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。局部變量局部變量是指在函數內部定義并使用的變量,它只在函數內部有效。即函數內部的變量只在函數運行時才會創建,在函數運行之前或者運行完畢之后,所有的變量就都不存在了。所以,如果在函數外部使用函數內部定義的變量,就會出現拋出NameError異常。局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序范圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到局部作用域中。全局變量與局部變量對應,全局變量是能夠作用于函數內外的變量。全局變量主要有以下兩種情況:①如果一個變量,在函數外定義,那么不僅在函數外可以訪問到,在函數內也可以訪問到。在函數體以外定義的變量是全局變量。②在函數體內定義,并且使用global關鍵字修飾后,該變量也就變為全局變量。在函數體外也可以訪問到該變量,并且在函數體內還可以對其進行修改。盡管Python允許全局變量和局部變量重名,但是在實際開發時,不建議這么做,因為這樣容易讓代碼混亂,很難分清哪些是全局變量,哪些是局部變量。局部變量和全局變量的使用,編寫代碼如下所示:sum=10 #sum在這里是全局變量defnum(num1,num2):#返回2個參數的平方和."sum=num1*num1+num2*num2#sum在這里是局部變量.print("函數內局部變量sum=",sum)
#調用num函數num(3,4)print("函數外全局變量sum=",sum)上述代碼的執行結果為:函數內局部變量sum=25函數外全局變量sum=10
任務5實踐活動任務1函數的概念任務2函數的參數傳遞任務3變量作用域任務4匿名函數匿名函數是指沒有名字的函數,應用在需要一個函數,但是又不想費神去命名這個函數的場合。通常情況下,這樣的函數只使用一次。在Python中,使用lambda表達式創建匿名函數,其語法格式如下:result=lambda[arg1[,arg2,···argn:]]:expression參數說明:result:用于調用lambda表達式。[arg1[,arg2,······,argn]]:可選參數,用于指定要傳遞的參數列表,多個參數間使用逗號“,”分隔。expression:必選參數,用于指定一個實現具體功能的表達式。如果有參數,那么在該表達式中應用這些參數。要注意的是,使用lambda表達式時,參數可以有多個,用逗號“,”分隔,但是表達式只能有一個,即只能返回一個值,而且也不能出現其他非表達式語句如(for或while)。已知一個長方形的長和寬,計算周長。編寫代碼如下所示:a=10b=5x=lambdaa,b:2*a+2*bprint("長:{}、寬:{}的長方形的周長是:{}".format(a,b,x(a,b)))上述代碼的執行結果為:長:10、寬:5的長方形的周長是:30任務5實踐活動任務1函數的概念任務2函數的參數傳遞任務3變量作用域任務4匿名函數實踐1:完數一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如6=1+2+3。編程找出2000以內的所有完數。2.代碼測試上述代碼的執行結果為:
6284961.代碼實現本實例的具體實現代碼如下所示: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)實踐2:水仙花數水仙花數是指一個三位數,其各位數字立方和等于該數本身。例如:153是一個"水仙花數",因為153=1^3+5^3+3^3。
本實例要求編寫程序,打印出所有的水仙花數。1.實例分析(1)利用for循環控制100-999個數,每個數分解出個位,十位,百位。(2)計算各個位的數的冪之和是否等于該數。2.代碼實現本實例的具體實現代碼如下所示: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.代碼測試上述代碼的執行結果為:153370371407實踐3:高空拋物一球從高處自由落下,每次落地后反跳回原高度的一半,再落下。請輸入起始高度,求它在第10次落地時,共經過多少米?第10次反彈多高?1.代碼實現本實例的具體實現代碼如下所示:deflength(num):high=num*2total=numforiinrange(10):high/=2total+=highprint(high/2)print('總長:',total)height=int(input("請輸入起始高度:"))length(height)2.代碼測試上述代碼的執行結果為:請輸入起始高度:10050.025.012.56.253.1251.56250.781250.3906250.19531250.09765625總長:299.8046875實踐4:可被7整除但不能被5整除的數編寫一個程序,找到1000年至2000年(包括在內)中所有可被7整除但不能被5整除的所有數字,得到的數字按逗號分隔,打印在一行上。1.代碼實現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)#函數調用編寫一個程序,找到1000年至2000年(包括在內)中所有可被7整除但不能被5整除的所有數字,得到的數字按逗號分隔,打印在一行上。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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年未來技術與創新管理測試題及答案
- 2025年物流管理專業考試試卷及答案
- 2025年地理信息科學考試試卷及答案
- 2025年科技創新與知識產權課程考試試卷及答案
- 2025年區域經濟發展與規劃考試試卷及答案
- 七級數學測試題及答案
- 一級消防工程師試題及答案
- 網店經營數據繼承與交接責任協議
- 上頜竇護理規范與實施要點
- 影視演員服裝定制設備租賃與時尚產業品牌合作拓展合同
- 林業專業知識考試試題及答案
- 高三英語語法填空專項訓練100(附答案)及解析
- 《第一單元 我是信息社會的“原住民”4 鼠標操作有方法》教學設計-2024-2025學年閩教版信息技術三年級上冊
- 2024年二建《法規》真題及參考答案
- 【天潤乳業公司應收賬款狀況及完善對策(附問卷)14000字】
- 微觀經濟學課后習題答案-微觀經濟學課后習題
- 焊線機技術員自學書
- 掬水月在手-古典詩詞與現代人生智慧樹知到期末考試答案章節答案2024年南開大學
- 中國法律史-第一次平時作業-國開-參考資料
- 2024年共青團入團積極分子考試題庫(含答案)
- 強化學習 課件 第1章 強化學習概述
評論
0/150
提交評論