Python程序設計基礎 教案8 函數自定義和高級用法_第1頁
Python程序設計基礎 教案8 函數自定義和高級用法_第2頁
Python程序設計基礎 教案8 函數自定義和高級用法_第3頁
Python程序設計基礎 教案8 函數自定義和高級用法_第4頁
Python程序設計基礎 教案8 函數自定義和高級用法_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課程單元教學設計課程名稱:程序設計基礎課程性質:?必修課□選修課學時學分:3學分56學時開課學期:2023學年第一學期教師姓名:陳建勇教師職稱:副教授授課班級:人工智能23-1和23-2所屬專業(yè)(教研室):人工智能技術應用開課部門:信息技術學院溫州科技職業(yè)學院教學督導處(診改辦)制二○二三年九月

《程序設計基礎》課程單元教學設計本單元標題:函數自定義和高級用法序號8授課班級人工智能23-2上課時間15周12月4日第1-2節(jié)15周12月6日第3-4節(jié)上課地點篤1-609篤1-220人工智能23-115周12月5日第5-8節(jié)篤1-412學情分析在上復雜數據類型-字典這一節(jié)內容時,學生實操過一個詞頻統(tǒng)計的案例,針對英文和中文的詞頻統(tǒng)計,為了避免代碼冗余,我們當時簡要的介紹了如何封裝一段代碼,本質上就是函數的自定義,通過封裝,學生也發(fā)現這樣的寫代碼效率更高.本次課,我們將系統(tǒng)的介紹有關于函數的自定義以及函數高級用法,明白函數的使用價值.教學目標能力(技能)目標知識目標情感與價值目標學會函數的自定義.掌握函數的高級用法.掌握函數自定義的語法結構.理解實參和形參.理解值傳遞和引用傳遞.通過函數自定義理解封裝的好處.2.宣傳工匠精神。重點難點及解決方法教學重點教學難點解決方法掌握函數自定義的語法結構.掌握函數中傳遞參數的三種類型.1.理解值傳遞和引用傳遞的區(qū)別.2.學會利用函數自定義解決實際問題.1.通過多媒體展示、動畫演示及播放程序設計方面的視頻.2.結合教師的講解,來突破本次課程的重點和難點。教學資源及教學用具1.參考書:崔曉軍,肖紅宇,python程序設計基礎,電子工業(yè)出版社,2023年1第1版。2.網絡教學資源:傳智播客網站:/3.教學用具:多媒體、筆記本(或臺式機)電腦課后教學反思

教學過程設計步驟與時間主要任務教師活動學生活動設計意圖與教學方法步驟一(2分鐘)課堂組織考勤課堂準備嚴肅課堂紀律步驟二(8分鐘)復習對學生匯報進行點評課前三分鐘匯報提升學生的表達能力步驟三(30分鐘)函數自定義和調用講解+實操演示邊學邊練課程思政;步驟四(20分鐘)參數值傳遞和引用傳遞講解+實操演示邊學邊練案例任務驅動步驟五(20分鐘)學生實踐練習講解+實操演示邊學邊練案例任務驅動步驟六(10分鐘)傳遞參數的三種類型任務說明邊學邊練情境教學步驟七(30分鐘)函數模塊的調用講解+實操演示邊學邊練案例任務驅動步驟八(30分鐘)結合循環(huán)模擬銀行存取款操作講解+實操演示邊學邊練案例任務驅動步驟九(10分鐘)小結并作業(yè)布置總結;作業(yè)布置課堂小結;學生記錄作業(yè)梳理知識點脈絡;作業(yè)練習鞏固授課詳細內容[步驟一]1、課堂組織利用超星學習通平臺,進行考勤結果通報,做好事假遲到同學的記錄。開啟KK錄像機,進行課程錄屏,作為課程教學資源,上傳超新學習通上,供學生課后回看再學習。[步驟二]2、復習回顧學生活動:利用課前三分鐘匯報,了解學生對上次課的集合和嵌套掌握情況,以便查漏補缺,了解學生對這塊知識的理解和實操情況。[步驟三]函數自定義和調用設計意圖:從生活中的案例出發(fā),讓學生體會有些重復性的工作,其實可以有專門的人或物來進行處理.教師活動:生活中有一些事情具有重復性:為了吃面條需要先制作面條;為了家里干凈,需要經常進行衛(wèi)生打掃等,能否將這些重復性的活動由專人或專物來負責,我只需要用它即可,從而產生賣面條的店,打掃衛(wèi)生的機器人。有了他們的幫助,可以帶來很多好處,如節(jié)省時間成本?;氐轿覀兊木幊袒顒又?,有時候我們也會經常遇到重復性的代碼操作,這個時間有沒有什么辦法可以提高我們的編程效率呢?就是我們今天要介紹的函數自定義的相關內容,也叫做封裝。教師講解:python已經給我們提供了很多的函數,這些函數把它稱為系統(tǒng)函數(內置函數)。這些函數是官方已經給我們自定義好的一些基本常見操作。下面以之前常見的len為例,說明封裝打來的好處。教師演示:前面學習了len()函數,通過它可以直接獲得一個字符串的長度。s="helloworld"length=len(s)print(length)#輸出:11s="helloworld"length=0forcharins:length+=1print(length)#輸出:11如果不用封裝好的len函數,則要想統(tǒng)計helloworld,我們需要寫如下代碼:從而可知,對于同一個問題,一個只需寫一行代碼,一個要寫3行代碼,按照時間就是金錢角度來看,函數自定義不僅代碼量少,而且能提升產生結果的效率。教師活動:首先來介紹一下函數自定義的基本語法結構。def函數名稱(參數):函數執(zhí)行語句return[expression]函數定義的幾個規(guī)則如下:(1)函數代碼塊以def關鍵詞開頭,后接函數標識符名稱和圓括號()。(2)任何傳入參數和自定義變量必須放在圓括號中間。(3)函數內容以冒號起始,并且縮進。(4)return[表達式]結束函數,選擇性地返回一個值給調用方,不帶表達式的return相當于返回None。教師活動:下面舉一個具體例子:求兩個數的最大值來演示函數的自定義。defcalMax(a,b):'''函數的文檔注釋,求兩個數的最大值'''ifa>b:print("最大值為",a)returnaprint("最大值為",b)returnb學生活動:學生模仿并實操該自定義過程。等學生實操完之后,教師提出問題:我們定義了一個東西的目的是為了去使用它,那如何調用呢?教師活動:調用自定義函數的語法結構函數名稱(參數)針對剛才自定義的函數,調用如下defcalMax(a,b):'''函數的文檔注釋,求兩個數的最大值'''ifa>b:print("最大值為",a)returnaprint("最大值為",b)returnbnum1=int(input("請輸入一個數字:"))num2=int(input("請再輸入一個數字:"))calMax(num1,num2)學生活動:學生模仿實操,掌握函數的調用。課內學生拓展訓練:模仿剛才的求最大值過程,教師布置任務:寫一個計算長方形的面積自定義函數,函數名自定。要求學生上臺來演示。defrectangle_area(length,width):returnlength*widthlength=float(input("請輸入長方形的長:"))width=float(input("請輸入長方形的寬:"))area=rectangle_area(length,width)print("長方形的面積為:",area)教師活動:下面對其中的return語句做進一步的介紹。return語句可以從Python函數中返回一個值,每個函數都要有一個返回值。如果沒有用return語句返回值,那么將得到一個None對象的結果,而None表示沒有任何值。在函數調用時可以將調用語句看作一個具體的值,將該值賦給一個變量。同時,return語句表示函數的結束,雖然在Python語言中可以在return語句后再添加其他執(zhí)行代碼,但return語句后同一范圍內的執(zhí)行代碼都不會被執(zhí)行?!臼纠?.4】首先定義一個獲取兩個數中的最大數的函數,然后通過該函數分別獲取3個數、4個數的最大數。defcalMax(a,b):

'''獲取兩個數的最大數'''

ifa>b:

returna

returnb

print("return后的語句")#在return語句后的代碼都不會執(zhí)行

#調用

num=calMax(23,45)

print("calMax(23,45)結果為:",num)

print("calMax(56,11)結果為:",calMax(56,11))

print("6,9,13的最大值為",calMax(6,calMax(9,13)))

print("6,15,13,12的最大值為",calMax(calMax(6,15),calMax(13,12)))課程思政:宣傳工匠精神。[步驟四]參數值傳遞和引用傳遞教師活動:傳遞參數時,Python不允許開發(fā)者指定使用傳值還是傳引用。Python參數傳遞采用的是“傳對象引用”的方式。實際上,這種方式相當于傳值和傳引用的一種綜合。如果函數收到的是一個可變對象(如字典或者列表)的引用,就能修改對象的原始值—相當于通過“傳引用”來傳遞對象。如果函數收到的是一個不可變對象(如數字、字符串或者元組)的引用,就不能直接修改原始對象—相當于通過“傳值”來傳遞對象。在Python中,strings、tuples和numbers是不可更改的對象,而list、dict等則是可以修改的對象。為了區(qū)別這兩種傳遞方式,通過具體的例子來展示。【示例4.2】在一個函數中分別改變數字、字符串和元組的值,觀察這三個值是否改變。defchangeValue(num,string,my_tuple):num=5string="Trumple"my_tuple=(3,6)num=8string="Kitty"my_tuple=(4,8)changeValue(num,string,my_tuple)print(num,string,my_tuple)【示例4.3】定義一個修改字典或列表元素的函數,修改后,觀察列表或字典對象是否被改變。學生活動:學生通過2個案例的對比,學會得出以下結論:1)通過對示例4.2進行分析可知,如果函數收到的是一個不可變對象(如數字、字符串或者元組)的引用,就不能直接修改原始對象,相當于通過“傳值”來傳遞對象。2)通過對示例4.3進行分析可知,如果函數收到的是一個可變對象(如字典或者列表)的引用,就能修改對象的原始值,相當于通過“傳引用”來傳遞對象。[步驟五]學生實踐練習。教師布置任務:定義一個接收4個參數的函數,最后一個參數為可選的布爾型參數,前3個參數為帶排序的數字。在不指定時排序為正序,指定時排序為倒序。教師不做具體實操演示,而是給學生提供解決思路。(1)將前3個參數放置在一個列表中。(2)判斷最后一個參數是否為指定,依據布爾類型來決定是否按正序排列該案例的代碼實現如下所示:defsort_numbers(num1,num2,num3,reverse=False):

#將前三個數字放入一個列表中

numbers=[num1,num2,num3]

#根據reverse參數的值決定排序順序

ifreverse:

numbers.sort(reverse=True)

else:

numbers.sort()

returnnumbers

print(f'排序結果為{sort_numbers(20,30,12)}')[步驟六]傳遞參數的三種類型。教師講解:下面對自定義函數時的參數做重點講解。第1種:傳遞可選參數。有時候,需要讓實參變成可選的,這樣使用函數的人就只需要在必要時才提供額外的信息,可以使用默認值來實現讓參數變成可選的。具體案例如下:【示例4.5】定義一個函數,它接收3個參數,其中第三個參數為可選參數,默認值為空。deffunc_info(name,age,city=''):ifcity:information='姓名:'+name+',年齡:'+str(age)+',城市:'+cityelse:information='姓名:'+name+',年齡:'+str(age)returninformationinformation=func_info('張三',20)print(information)傳遞3個參數,查看調用結果,代碼如下:information2=func_info('李四',19,'北京')print(information2)【注意】在定義可選參數函數的傳遞參數時,必須要將可選參數定義在參數列表的最后,否則會報錯。教師活動:下面講解第2種參數傳遞的情況:傳遞任意數量的參數。在預先不知道需要接收多少個實參時,使用“*args”來指定函數的形參,這時會讓Python創(chuàng)建一個名為args的空元組,并將接收到的所有值都封裝到這個元組中,即使該元組只有一個元素也如此。之后如果要獲取某個參數時,可以通過形參的位置來指定,這在編寫main()函數時非常重要?!臼纠?.6】定義一個函數,通過不同的方式獲取函數中的參數deffunc_args(*args):returnargs在上述代碼中,定義了一個接收任意數量參數的函數,并將接收到的參數返回。names=func_args('tom','jerry','cat','dog')print(names)這時可以使用Python遍歷的方式獲取每一個參數的值,代碼如下foriteminnames:print(item)學生活動:實操教師演示的代碼從中體會參數傳遞的不同。教師活動:下面講解第3種參數傳遞的類型:結合位置實參與任意實參。如果要讓函數接收不同類型的實參,必須在函數定義中將接收任意數量實參的形參放在參數列表中最后的位置,Python會先匹配位置實參和關鍵字實參,再將余下的實參都收集到最后一個形參中【示例4.7】定義一個接收單個實參和多個形參的函數,它實現將實參與形參分別打印的效果。deffunc_arg_args(items_class,*itmes):print('函數的實參是:',items_class)print('函數的形參是:',itmes)func_arg_args('animal','cat','dog','rat')[步驟七]函數模塊的調用教師講解:函數的優(yōu)點之一是使用它們可將代碼塊與主程序分離,從而降低它們之間的耦合性。通過給函數指定描述名稱,可讓主程序更容易理解。還有一種更高級的用法是將函數儲存在被稱為模塊的獨立文件中,再將模塊導入主程序中,import語句允許在當前運行的程序文件中使用模塊中的代碼。通過將函數存儲在獨立的文件中,可以隱藏程序代碼的細節(jié),將重點放在程序的主要邏輯之上,而且,一旦將函數存儲在獨立的文件中后,可與其他開發(fā)者共享這些文件而不是整個程序?!臼纠?.9】(1)編譯一個my_func.py的文件,該文件內主要包含兩個函數,分別是get_detail()函數和say_hello()函數defget_detail(arg,*args):print('輸入的類別是:',arg)foriteminargs:print('-',item)defsay_hello(name):print('Hello,',name.title())(2)在my_func.py文件所在的目錄內再新建一個use_func.py的函數,然后使用import語句將my_func模塊導入,并嘗試調用my_func中定義的函數,代碼如下:importmy_funcmy_func.get_detail('animals','cat','dog','rat')my_func.say_hello('tom')(3)改寫use_func.py,實現導入特定的函數,代碼如下:frommy_funcimportget_detailget_detail('animals','cat','dog','rat')在上述代碼中,在導入函數模塊時,使用了“from模塊名import函數名”的方式導入了模塊中的函數,在使用函數時就無須指定該函數的模塊,直接使用函數名完成函數的調用(4)可以使用as來對模塊起別名,如使用語句“import模塊名as別名”來實現。例如重寫use_func.py,代碼如下:importmy_funcasff.get_detail('animals','bird','fish','lion')f.say_hello('tom')學生活動:學生在觀看教師演示的時候,需要自己動手去實操方能掌握這種函數模塊調用方式,這種模式在python數據分析中將會經常用到。[步驟八]結合循環(huán)模擬銀行存取款操作教師活動:給學生布置存取款的任務需求說明,并展示運行效果。需求說明:模擬銀行賬戶存取款及查看余額功能,分別定義函數實現銀行賬戶存款、取款及查看余額功能??梢允褂脜岛头祷刂颠M行數據傳遞。初步設定賬戶的余額為10000元教師在該案例上扮演的角色是引導者,與學生一起探討解決的實現思路。給出其中一種解決思路的方案(1)將賬戶信息(用戶名和余額)保存在一個字典的對象中。(2)定義3個函數,分別用于實現存款、取款及查看余額的功能該案例的實現代碼如下所示'''

4.2節(jié)綜合實訓:銀行存取款

'''

defwithDrawal(account):

money=int(input("請輸入取款的金額:"))

ifaccount['balance']<money:

print("余額不足,取款失敗")

else:

account['balance']=account['balance']-money

print("取款成功

溫馨提示

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

評論

0/150

提交評論