




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目6
搭建自己的模塊項(xiàng)目內(nèi)容模擬計(jì)算器獲取兔子數(shù)列0102項(xiàng)目目標(biāo)知識(shí)目標(biāo)熟悉函數(shù)的定義和調(diào)用熟悉函數(shù)參數(shù)的傳遞方式熟悉特殊函數(shù)的分類和應(yīng)用了解常用的內(nèi)置函數(shù)會(huì)定義并調(diào)用函數(shù)會(huì)利用函數(shù)解決代碼復(fù)用問題會(huì)利用匿名函數(shù)和遞歸函數(shù)解決實(shí)際問題技能目標(biāo)
模擬計(jì)算器01
眾所周知,隨著程序功能的提升,程序開發(fā)的難度在不斷升級,程序的復(fù)雜度也變得越來越高,如果依舊按照以前的方法編寫代碼,那么程序代碼的可讀性和后期的維護(hù)管理會(huì)給開發(fā)人員帶來更多的困擾。
為了解決以上問題,提高代碼的復(fù)用性,更好地組織代碼邏輯和結(jié)構(gòu),我們引入了“函數(shù)”,即“模塊”。
對于函數(shù),先要清楚什么是函數(shù)?如何定義和調(diào)用函數(shù)?弄清楚這些我們就可以求解問題,完成任務(wù)。函數(shù)的概念
函數(shù)指被封裝起來的、實(shí)現(xiàn)某種功能的一段代碼。Python安裝包、標(biāo)準(zhǔn)庫中自帶的函數(shù)統(tǒng)稱為內(nèi)置函數(shù),用戶自己編寫的函數(shù)稱為自定義函數(shù),不管是哪種函數(shù),其調(diào)用方式是一樣的。
就像一個(gè)人站在裝滿鏡子的房間中,看到的影像就是遞歸的結(jié)果。遞歸只需少量代碼就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。函數(shù)的定義Python中使用關(guān)鍵字def定義函數(shù)。def函數(shù)名([參數(shù)列表]):["函數(shù)文檔字符串"]
函數(shù)體[return語句]接收傳入函數(shù)中的數(shù)據(jù),可省略函數(shù)的說明信息,可省略將結(jié)果返回給函數(shù)調(diào)用者若函數(shù)的參數(shù)列表為空,這個(gè)函數(shù)稱為無參函數(shù)。函數(shù)定義之時(shí)可以設(shè)置參數(shù)列表,以實(shí)現(xiàn)更靈活的功能。defweather():print("*"*13)print("日期:10月7日")print("溫度:14~28℃")print("空氣狀況:良")print("*"*13)defmodify_weather(today,temp,air_quality):print("*"*13)print(f"日期:{today}")print(f"溫度:{temp}")print(f"空氣狀況:{air_quality}")print("*"*13)定義好的函數(shù)直到被程序調(diào)用時(shí)才會(huì)執(zhí)行。函數(shù)的調(diào)用格式如下:函數(shù)名([參數(shù)列表])例如,調(diào)用weather()函數(shù)。weather()*************日期:10月7日溫度:14~28℃空氣狀況:良*************調(diào)用modify_weather函數(shù)。modify_weather(‘10月6日','15~26℃','優(yōu)')*************日期:10月6日溫度:15~26℃空氣狀況:優(yōu)*************
實(shí)例1:定義一個(gè)函數(shù),用于判斷輸入的年份是否是閏年,具體要求如下:(1)輸出提示信息:請輸入一個(gè)年份。(2)輸出判斷結(jié)果:若是閏年,則輸出“是閏年”,否則輸出“不是閏年”。defis_leapyear():year=int(input("請輸入一個(gè)年份:"))if(year%4==0andyear%100!=0)oryear%400==0:print("是閏年")else:print("不是閏年")is_leapyear()
根據(jù)題意,利用函數(shù)的定義格式定義一個(gè)無參函數(shù),將輸入的年份放在函數(shù)體內(nèi),其程序如下:defis_leapyear(year):if(year%4==0andyear%100!=0)oryear%400==0:print("是閏年")else:print("不是閏年")year=int(input('請輸入一個(gè)年份:'))is_leapyear(year)如果將輸入的年份作為函數(shù)的參數(shù),則可以定義一個(gè)有參函數(shù),其代碼如下:
函數(shù)的參數(shù)傳遞是指將實(shí)際參數(shù)傳遞給形式參數(shù)的過程。當(dāng)調(diào)用帶有參數(shù)的函數(shù)時(shí)需要傳入?yún)?shù),這個(gè)傳入的參數(shù)稱為實(shí)際參數(shù)。而在定義有參函數(shù)時(shí),函數(shù)名后面的參數(shù)則被稱為形式參數(shù)。
根據(jù)參數(shù)傳遞形式的不同,函數(shù)的參數(shù)可分為:
位置參數(shù)關(guān)鍵字參數(shù)默認(rèn)值參數(shù)不定長參數(shù)函數(shù)參數(shù)的傳遞位置參數(shù)的傳遞調(diào)用函數(shù)時(shí),解釋器會(huì)將函數(shù)的實(shí)際參數(shù)按照位置順序依次傳遞給形式參數(shù)。defdivision(num_one,num_two):print(num_one/num_two)division(6,2)關(guān)鍵字參數(shù)的傳遞關(guān)鍵字參數(shù)是通過“形式參數(shù)=實(shí)際參數(shù)”的格式將實(shí)際參數(shù)與形式參數(shù)相關(guān)聯(lián),根據(jù)形參的名稱進(jìn)行參數(shù)傳遞。definfo(name,age,address):print(f'姓名:{name}')print(f'年齡:{age}')print(f'地址:{address}')info(name=“李婷婷”,age=21,address=“北京")默認(rèn)參數(shù)傳遞定義函數(shù)時(shí)若指定形式參數(shù)的默認(rèn)值。調(diào)用函數(shù)時(shí),若未給默認(rèn)參數(shù)傳值:使用參數(shù)的默認(rèn)值;若給默認(rèn)參數(shù)傳值:使用實(shí)際參數(shù)的值;defconnect(ip,port=3306):print(f"連接地址為:{ip}")print(f"連接端口號(hào)為:{port}")print("連接成功")connect('127.0.0.1')connect(ip='127.0.0.1',port=8080)
實(shí)例2:編寫函數(shù),計(jì)算20×19×18×……×3的結(jié)果。defprot(m,n=3):pro=1foriinrange(m,n-1,-1):pro*=ireturnproprint(prot(m=20))不定長參數(shù)的傳遞如果傳入函數(shù)中的參數(shù)的個(gè)數(shù)不確定,可以使用不定長參數(shù)。不定長參數(shù)也稱可變參數(shù),此種參數(shù)接收參數(shù)的數(shù)量可以任意改變。定義格式:def函數(shù)名([formal_args,]*args,**kwargs):
函數(shù)體[return語句]*args和**kwargs都是不定長參數(shù),它們可搭配使用,亦可單獨(dú)使用。不定長參數(shù)*args用于接收不定數(shù)量的位置參數(shù),調(diào)用函數(shù)時(shí)傳入的所有參數(shù)被*args接收后以元組形式保存。deftest(*args):
print(args)test(1,2,3,'a','b','c')(1,2,3,'a','b','c')**kwargs用于接收不定數(shù)量的關(guān)鍵字參數(shù),調(diào)用函數(shù)時(shí)傳入的所有參數(shù)被**kwargs接收后以字典形式保存。deftest(**kwargs):print(kwargs)test(a=1,b=2,c=3,d=4){'c':3,'d':4,'a':1,'b':2}
實(shí)例3:給定一組成績,求平均成績。defaverage(*a):
sum,n=0foriina:
sum+=i
n=n+1
ave=sum/nreturnaveprint(average(98,93,97,88,79,90))函數(shù)的返回值
如果函數(shù)體經(jīng)過處理以后有計(jì)算結(jié)果,除了直接利用print()函數(shù)輸出,還可以在函數(shù)體中通過return語句返回主調(diào)函數(shù)。因此,函數(shù)中的return語句可以在函數(shù)結(jié)束時(shí)將數(shù)據(jù)返回程序,同時(shí)讓程序回到函數(shù)被調(diào)用的位置繼續(xù)執(zhí)行。deffilter_words(words):#定義過濾敏感詞的函數(shù) if'躺平'inwords: new_words=words.replace('躺平','***')
returnnew_words>>>result=filter_words('目前情況我們不能躺平!')>>>print(result)目前情況我們不能***!
當(dāng)return語句返回一個(gè)值時(shí),會(huì)被保存在變量中,當(dāng)return語句返回多個(gè)值時(shí),這些值會(huì)被保存在元組中。變量的作用域變量的作用域是指變量的作用范圍。根據(jù)作用范圍,Python中的變量分為局部變量與全局變量。局部變量局部變量是在函數(shù)內(nèi)定義的變量,只在定義它的函數(shù)內(nèi)生效。局部變量只能在函數(shù)內(nèi)部使用,不能在函數(shù)外部使用。defuse_var():
name='python'#局部變量print(name)#函數(shù)內(nèi)訪問use_var()print(name)#函數(shù)外訪問pythonNameError:name'name'isnotdefined全局變量全局變量是在函數(shù)外定義的變量,它在程序中任何位置都可以被訪問。函數(shù)中只能訪問全局變量,但不能修改全局變量。count=10#全局變量defuse_var():print(count)#函數(shù)內(nèi)訪問count=0#修改全局變量use_var()print(count)#函數(shù)外訪問
1010若要在函數(shù)內(nèi)部修改全局變量的值,需先在函數(shù)內(nèi)使用關(guān)鍵字“global”進(jìn)行聲明。count=10defuse_var():
globalcount#聲明全局變量count=0use_var()print(count)0全局變量的值變?yōu)?。實(shí)例4:冰雹猜想。冰雹猜想是一種數(shù)學(xué)現(xiàn)象,它的具體內(nèi)容是以一個(gè)正整數(shù)n為例,如果n為偶數(shù),就將它變?yōu)閚/2,若n/2為奇數(shù),則將它乘以3加1,即3n/2+1。不斷重復(fù)這樣的運(yùn)算,經(jīng)過有限步后,必然會(huì)得到1。根據(jù)數(shù)學(xué)家們的攻關(guān)研究表明,所有小于7×1011的自然數(shù)都符合這個(gè)規(guī)律。本實(shí)例要求編寫代碼,計(jì)算用戶輸入的數(shù)據(jù)按照以上規(guī)律經(jīng)過多少次運(yùn)算后可以變成1。#冰雹猜想defguess(number):i=0 #統(tǒng)計(jì)變換的次數(shù)original_number=number #記錄最初的numberwhilenumber!=1:ifnumber%2==0: #number為偶數(shù)number=number/2else: #number為奇數(shù)number=number*3+1i+=1print(f"{original_number}經(jīng)過{i}次變換后回到1")num=int(input("請輸入一個(gè)大于1的正整數(shù):"))guess(num)任務(wù)實(shí)踐-模擬計(jì)算器
計(jì)算器極大地提高了人們進(jìn)行數(shù)字計(jì)算的效率與準(zhǔn)確性,平時(shí)的簡單計(jì)算都離不開計(jì)算器。計(jì)算器最基本的功能是四則運(yùn)算。本任務(wù)要求編寫程序,利用函數(shù)實(shí)現(xiàn)計(jì)算器的四則運(yùn)算功能。
任務(wù)實(shí)踐-模擬計(jì)算器
根據(jù)題意,計(jì)算器的四則運(yùn)算功能是指加、減、乘、除,它可實(shí)現(xiàn)計(jì)算兩個(gè)數(shù)的和、差、積、商。因此,定義一個(gè)包含兩個(gè)參數(shù)的函數(shù),分別接收用戶輸入的任意兩個(gè)數(shù),而函數(shù)主要用來實(shí)現(xiàn)這兩個(gè)數(shù)的加、減、乘、除4項(xiàng)運(yùn)算,具體執(zhí)行哪種運(yùn)算需用戶輸入相應(yīng)的運(yùn)算符,然后根據(jù)運(yùn)算符來計(jì)算結(jié)果即可。代碼如下:#模擬計(jì)算器defoper(x,y):operator=input('請選擇要執(zhí)行的運(yùn)算:+、-、*、/'+'\n')ifoperator=="+":print("計(jì)算結(jié)果為:",x+y)elifoperator=='-':print("計(jì)算結(jié)果為:",x-y)elifoperator=='*':print("計(jì)算結(jié)果為:",x*y)elifoperator=='/':ify==0:print('被除數(shù)不能為0')else:print("計(jì)算結(jié)果為:",x/y)a=int(input('請輸入第一個(gè)數(shù):'))b=int(input('請輸入第二個(gè)數(shù):'))oper(a,b)根據(jù)函數(shù)定義和調(diào)用方法,程序如下:獲取兔子序列02函數(shù)的特殊形式
在Python中,除了前面介紹的標(biāo)準(zhǔn)函數(shù)和自定義函數(shù),還提供了兩個(gè)具有特殊形式的函數(shù),即匿名函數(shù)和遞歸函數(shù)。匿名函數(shù)匿名函數(shù)是無需函數(shù)名標(biāo)識(shí)的函數(shù),它的函數(shù)體只能是單個(gè)表達(dá)式。Python中使用關(guān)鍵字lambda定義匿名函數(shù)。函數(shù)名=lambda<參數(shù)列表>:<表達(dá)式>匿名函數(shù)并非沒有名字,而是將函數(shù)名作為函數(shù)結(jié)果返回。等價(jià)于:def函數(shù)名(<參數(shù)列表>):return<表達(dá)式>匿名函數(shù)與普通函數(shù)主要有以下不同:普通函數(shù)匿名函數(shù)需要使用函數(shù)名進(jìn)行標(biāo)識(shí)無需使用函數(shù)名進(jìn)行標(biāo)識(shí)函數(shù)體中可以有多條語句函數(shù)體只能是一個(gè)表達(dá)式可以實(shí)現(xiàn)比較復(fù)雜的功能只能實(shí)現(xiàn)比較單一的功能可以被其它程序使用不能被其它程序使用area=lambdaa,h:(a*h)*0.5(直角三角形面積)print(area(3,4))6.0遞歸函數(shù)
遞歸是一個(gè)函數(shù)過程在定義中直接調(diào)用自身的一種方法,它通常把一個(gè)大型的復(fù)雜問題層層轉(zhuǎn)化為一個(gè)與原問題相似,但規(guī)模較小的問題進(jìn)行求解。如果一個(gè)函數(shù)中調(diào)用了函數(shù)本身,這個(gè)函數(shù)就是遞歸函數(shù)。遞歸函數(shù)只需少量代碼就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。函數(shù)遞歸調(diào)用時(shí),需要確定兩點(diǎn):一是遞歸公式,二是邊界條件。遞歸公式是遞歸求解過程中的歸納項(xiàng),用于處理原問題以及與原問題規(guī)律相同的子問題。邊界條件即終止條件,用于終止遞歸。遞歸函數(shù)的定義格式:def函數(shù)名([參數(shù)列表]):if邊界條件:return結(jié)果else:return遞歸公式
調(diào)用遞歸函數(shù)時(shí),也需要確定兩點(diǎn),一是遞歸公式,二是邊界條件。遞歸公式是遞歸求解過程中的歸納項(xiàng),用于處理原問題及與原問題規(guī)律相同的子問題。邊界條件即終止條件,用于終止遞歸。實(shí)例5:deffactorial(n):ifn==1orn==0:return1else:returnn*factorial(n-1)n=int(input(“n=“))print(factorial(n))
常用內(nèi)置函數(shù)Python內(nèi)置了一些實(shí)現(xiàn)特定功能的函數(shù),這些函數(shù)無需由Python使用者重新定義便可直接使用。函數(shù)說明abs()計(jì)算絕對值,其參數(shù)必須是數(shù)字類型len()返回序列對象(字符串、列表、元組等)的長度map()根據(jù)提供的函數(shù)對指定的序列做映射help()用于查看函數(shù)或模塊的使用說明ord()用于返回Unicode字符對應(yīng)的碼值chr()與ord()功能相反,用于返回碼值對應(yīng)的Unicode字符filter()用于過濾序列,返回由符合條件的元素組成的新序列abs()函數(shù)abs()函數(shù)用于計(jì)算絕對值,其參數(shù)必須是數(shù)字類型。如果參數(shù)是一個(gè)復(fù)數(shù),那么abs()函數(shù)返回的絕對值是此復(fù)數(shù)與它的共軛復(fù)數(shù)乘積的平方根。print(abs(-5))print(abs(8+3j))ord()函數(shù)ord()函數(shù)用于返回字符在Unicode編碼表中對應(yīng)的碼值,其參數(shù)是一個(gè)
字符。print(ord('a'))prin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年小自考行政管理局部分析試題及答案
- 第1章 第1節(jié) 第2課時(shí) 行政區(qū)劃(新教學(xué)設(shè)計(jì))2023-2024學(xué)年八年級上冊地理(人教版)
- 陜西省石泉縣七年級生物上冊 3.5.1光合作用吸收二氧化碳釋放氧氣教學(xué)設(shè)計(jì)1 (新版)新人教版
- 常德美術(shù)考編試題及答案
- 秘書證考試權(quán)威資料與試題及答案
- Unit 3 Could you please clean your room Section A 2a~2d 英文版教學(xué)設(shè)計(jì) -2024-2025學(xué)年人教版英語八年級下冊
- 2024自行考試行政管理的重點(diǎn)試題及答案
- 初中物理復(fù)習(xí)方法與試題及答案
- 2025年14-丁二醇合作協(xié)議書
- 秘書證考試經(jīng)典案例分析與試題及答案
- 機(jī)械制圖與CAD (第3版) 課件 任務(wù)4.3 減速器從動(dòng)軸零件圖的識(shí)讀與繪制
- 中等職業(yè)學(xué)校公共基礎(chǔ)課程 數(shù)學(xué)《對數(shù)》教學(xué)課件
- 河南省新鄭市2023-2024學(xué)年七年級下學(xué)期6月期末生物試題
- 中國聯(lián)通2020年中級IT專業(yè)能力認(rèn)證-需求分析試題題庫
- 一年級下冊《讀讀童謠和兒歌》試題及答案共10套
- QBT 3653-1999 羽毛球拍行業(yè)標(biāo)準(zhǔn)
- 犬的品種-犬的品種類型及外貌鑒定
- 山東省濟(jì)寧市嘉祥縣2023-2024學(xué)年八年級下學(xué)期期中數(shù)學(xué)試題
- 小學(xué)科學(xué)2024版課標(biāo)培訓(xùn)
- 重點(diǎn)關(guān)愛學(xué)生幫扶活動(dòng)記錄表
- 工地防火技術(shù)方案
評論
0/150
提交評論