版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Python語言程序設計1精選版課件pptPython語言程序設計1精選版課件ppt第5節(jié)
函數(shù)和代碼的復用2精選版課件ppt第5節(jié)函數(shù)和代碼的復用2精選版課件ppt函數(shù)的基本使用3精選版課件ppt函數(shù)的基本使用3精選版課件ppt函數(shù)?是什么做什么怎么做4精選版課件ppt函數(shù)?4精選版課件ppt函數(shù)的定義函數(shù)是一段具有特定功能的、可重用的語句組,用函數(shù)名來表示并通過函數(shù)名進行完成功能調用。函數(shù)也可以看作是一段具有名字的子程序,可以在需要的地方調用執(zhí)行,不需要在每個執(zhí)行地方重復編寫這些語句。每次使用函數(shù)可以提供不同的參數(shù)作為輸入,以實現(xiàn)對不同數(shù)據(jù)的處理;函數(shù)執(zhí)行后,還可以反饋相應的處理結果。函數(shù)是一種功能抽象5精選版課件ppt函數(shù)的定義函數(shù)是一段具有特定功能的、可重用的語句組,用函數(shù)名函數(shù)的定義Python定義一個函數(shù)使用def保留字,語法形式如下:def<函數(shù)名>(<參數(shù)列表>):<函數(shù)體>return<返回值列表>6精選版課件ppt函數(shù)的定義Python定義一個函數(shù)使用def保留字,語法形式函數(shù)的定義微實例5.1:生日歌。過生日時要為朋友唱生日歌,歌詞為:Happybirthdaytoyou!Happybirthdaytoyou!Happybirthday,dear<名字>Happybirthdaytoyou!編寫程序為Mike和Lily輸出生日歌。最簡單的實現(xiàn)方法是重復使用print()語句7精選版課件ppt函數(shù)的定義微實例5.1:生日歌。7精選版課件ppt函數(shù)的定義
1234print("Happybirthdaytoyou!")print("Happybirthdaytoyou!")print("Happybirthday,dearMike!")print("Happybirthdaytoyou!")
最簡單的實現(xiàn)方法是重復使用print()語句,如下:8精選版課件ppt函數(shù)的定義
1print("Happybirthday函數(shù)的定義微實例5.1m5.1HappyBirthday.py
12345678910defhappy():print("Happybirthdaytoyou!")defhappyB(name):happy()happy()print("Happybirthday,dear{}!".format(name))happy()happyB("Mike")print()happyB("Lily")
>>>
Happybirthdaytoyou!Happybirthdaytoyou!Happybirthday,dearMike!Happybirthdaytoyou!
Happybirthdaytoyou!Happybirthdaytoyou!Happybirthday,dearLily!Happybirthdaytoyou!9精選版課件ppt函數(shù)的定義微實例5.1m5.1HappyBirthday.函數(shù)調用的過程程序調用一個函數(shù)需要執(zhí)行以下四個步驟:(1)調用程序在調用處暫停執(zhí)行;(2)在調用時將實參復制給函數(shù)的形參;(3)執(zhí)行函數(shù)體語句;(4)函數(shù)調用結束給出返回值,程序回到調用前的暫停處繼續(xù)執(zhí)行。10精選版課件ppt函數(shù)調用的過程程序調用一個函數(shù)需要執(zhí)行以下四個步驟:10精選函數(shù)調用的過程微實例5.1中happyB()的被調用過程11精選版課件ppt函數(shù)調用的過程微實例5.1中happyB()的被調用過程11函數(shù)調用的過程12精選版課件ppt函數(shù)調用的過程12精選版課件ppt函數(shù)調用的過程13精選版課件ppt函數(shù)調用的過程13精選版課件ppt函數(shù)的參數(shù)傳遞14精選版課件ppt函數(shù)的參數(shù)傳遞14精選版課件ppt可選參數(shù)和可變數(shù)量參數(shù)在定義函數(shù)時,有些參數(shù)可以存在默認值>>>defdup(str,times=2):print(str*times)>>>dup("knock~")knock~knock~>>>dup("knock~",4)knock~knock~knock~knock~15精選版課件ppt可選參數(shù)和可變數(shù)量參數(shù)在定義函數(shù)時,有些參數(shù)可以存在默認值>可選參數(shù)和可變數(shù)量參數(shù)在函數(shù)定義時,可以設計可變數(shù)量參數(shù),通過參數(shù)前增加星號(*)實現(xiàn)>>>defvfunc(a,*b):print(type(b))forninb:a+=nreturna>>>vfunc(1,2,3,4,5)<class'tuple'>1516精選版課件ppt可選參數(shù)和可變數(shù)量參數(shù)在函數(shù)定義時,可以設計可變數(shù)量參數(shù),通參數(shù)的位置和名稱傳遞Python提供了按照形參名稱輸入實參的方式,調用如下:result=func(x2=4,y2=5,z2=6,x1=1,y1=2,z1=3)由于調用函數(shù)時指定了參數(shù)名稱,所以參數(shù)之間的順序可以任意調整。17精選版課件ppt參數(shù)的位置和名稱傳遞Python提供了按照形參名稱輸入實參的變量的返回值return語句用來退出函數(shù)并將程序返回到函數(shù)被調用的位置繼續(xù)執(zhí)行。return語句同時可以將0個、1個或多個函數(shù)運算完的結果返回給函數(shù)被調用處的變量,例如。>>>deffunc(a,b):returna*b>>>s=func("knock~",2)>>>print(s)knock~knock~18精選版課件ppt變量的返回值return語句用來退出函數(shù)并將程序返回到函數(shù)被變量的返回值函數(shù)可以沒有return,此時函數(shù)并不返回值,如微實例5.1的happy()函數(shù)。函數(shù)也可以用return返回多個值,多個值以元組類型保存,例如。>>>deffunc(a,b):returnb,a>>>s=func("knock~",2)>>>print(s,type(s))(2,'knock~')<class'tuple'>19精選版課件ppt變量的返回值函數(shù)可以沒有return,此時函數(shù)并不返回值,如函數(shù)對變量的作用一個程序中的變量包括兩類:全局變量和局部變量。全局變量指在函數(shù)之外定義的變量,一般沒有縮進,在程序執(zhí)行全過程有效。局部變量指在函數(shù)內部使用的變量,僅在函數(shù)內部有效,當函數(shù)退出時變量將不存在。20精選版課件ppt函數(shù)對變量的作用一個程序中的變量包括兩類:全局變量和局部變量變量的返回值>>>n=1#n是全局變量>>>deffunc(a,b):c=a*b#c是局部變量,a和b作為函數(shù)參數(shù)也是局部變量returnc>>>s=func("knock~",2)>>>print(c)Traceback(mostrecentcalllast):File"<pyshell#6>",line1,in<module>print(c)NameError:name'c'isnotdefined這個例子說明,當函數(shù)執(zhí)行完退出后,其內部變量將被釋放。如果函數(shù)內部使用了全局變量呢?21精選版課件ppt變量的返回值>>>n=1#n是全局變量這個例子說變量的返回值>>>n=1#n是全局變量>>>deffunc(a,b):n=b#這個n是在函數(shù)內存中新生成的局部變量,不是全局變量
returna*b>>>s=func("knock~",2)>>>print(s,n)#測試一下n值是否改變knock~knock~1函數(shù)func()內部使用了變量n,并且將變量參數(shù)b賦值給變量n,為何全局變量n值沒有改變?22精選版課件ppt變量的返回值>>>n=1#n是全局變量函數(shù)fun變量的返回值如果希望讓func()函數(shù)將n當作全局變量,需要在變量n使用前顯式聲明該變量為全局變量,代碼如下。>>>n=1#n是全局變量>>>deffunc(a,b):globalnn=b#將局部變量b賦值給全局變量nreturna*b>>>s=func("knock~",2)>>>print(s,n)#測試一下n值是否改變knock~knock~223精選版課件ppt變量的返回值如果希望讓func()函數(shù)將n當作全局變量,需要變量的返回值如果此時的全局變量不是整數(shù)n,而是列表類型ls,會怎么樣呢?理解如下代碼。>>>ls=[]#ls是全局列表變量>>>deffunc(a,b):ls.append(b)#將局部變量b增加到全局列表變量ls中
returna*b>>>s=func("knock~",2)>>>print(s,ls)#測試一下ls值是否改變knock~knock~[2]24精選版課件ppt變量的返回值如果此時的全局變量不是整數(shù)n,而是列表類型ls,變量的返回值如果func()函數(shù)內部存在一個真實創(chuàng)建過且名稱為ls的列表,則func()將操作該列表而不會修改全局變量,例子如下。>>>ls=[]#ls是全局列表變量>>>deffunc(a,b):ls=[]#創(chuàng)建了名稱為ls的局部列表變量列l(wèi)s.append(b)#將局部變量b增加到全局列表變量ls中
returna*b>>>s=func("knock~",3)>>>print(s,ls)#測試一下ls值是否改變knock~knock~[]25精選版課件ppt變量的返回值如果func()函數(shù)內部存在一個真實創(chuàng)建過且名稱變量的返回值Python函數(shù)對變量的作用遵守如下原則:簡單數(shù)據(jù)類型變量無論是否與全局變量重名,僅在函數(shù)內部創(chuàng)建和使用,函數(shù)退出后變量被釋放;簡單數(shù)據(jù)類型變量在用global保留字聲明后,作為全局變量;對于組合數(shù)據(jù)類型的全局變量,如果在函數(shù)內部沒有被真實創(chuàng)建的同名變量,則函數(shù)內部可直接使用并修改全局變量的值;如果函數(shù)內部真實創(chuàng)建了組合數(shù)據(jù)類型變量,無論是否有同名全局變量,函數(shù)僅對局部變量進行操作。26精選版課件ppt變量的返回值Python函數(shù)對變量的作用遵守如下原則:26精lambda函數(shù)Python的有33個保留字,其中一個是lambda,該保留字用于定義一種特殊的函數(shù)——匿名函數(shù),又稱lambda函數(shù)。匿名函數(shù)并非沒有名字,而是將函數(shù)名作為函數(shù)結果返回,如下:<函數(shù)名>=lambda<參數(shù)列表>:<表達式>lambda函數(shù)與正常函數(shù)一樣,等價于下面形式:def<函數(shù)名>(<參數(shù)列表>):return<表達式>27精選版課件pptlambda函數(shù)Python的有33個保留字,其中一個是lalambda函數(shù)簡單說,lambda函數(shù)用于定義簡單的、能夠在一行內表示的函數(shù),返回一個函數(shù)類型,實例如下。>>>f=lambdax,y:x+y>>>type(f)<class'function'>>>>f(10,12)2228精選版課件pptlambda函數(shù)簡單說,lambda函數(shù)用于定義簡單的、能夠datetime庫的使用29精選版課件pptdatetime庫的使用29精選版課件pptdatetime庫概述
以不同格式顯示日期和時間是程序中最常用到的功能。Python提供了一個處理時間的標準函數(shù)庫datetime,它提供了一系列由簡單到復雜的時間處理方法。datetime庫可以從系統(tǒng)中獲得時間,并以用戶選擇的格式輸出。30精選版課件pptdatetime庫概述以不同格式顯示日期和時間是程序中最datetime庫概述datetime庫以類的方式提供多種日期和時間表達方式:datetime.date:日期表示類,可以表示年、月、日等datetime.time:時間表示類,可以表示小時、分鐘、秒、毫秒等datetime.datetime:日期和時間表示的類,功能覆蓋date和time類datetime.timedelta:時間間隔有關的類datetime.tzinfo:與時區(qū)有關的信息表示類31精選版課件pptdatetime庫概述datetime庫以類的方式提供多種日datetime庫解析使用datetime.now()獲得當前日期和時間對象,使用方法如下:
datetime.now()作用:返回一個datetime類型,表示當前的日期和時間,精確到微秒。>>>fromdatetimeimportdatetime>>>today=datetime.now()>>>todaydatetime.datetime(2016,9,20,10,29,43,928549)32精選版課件pptdatetime庫解析使用datetime.now()獲得當datetime庫解析使用datetime.utcnow()獲得當前日期和時間對應的UTC(世界標準時間)時間對象,使用方法如下:datetime.utcnow()作用:返回datetime類型,表示當前日期和時間的UTC表示,精確到微秒。>>>today=datetime.utcnow()>>>todaydatetime.datetime(2016,9,20,2,35,1,427954)33精選版課件pptdatetime庫解析使用datetime.utcnow()datetime庫解析datetime.now()和datetime.utcnow()都返回一個datetime類型的對象,也可以直接使用datetime()構造一個日期和時間對象,使用方法如下:datetime(year,month,day,hour=0,minute=0,second=0,microsecond=0)作用:返回一個datetime類型,表示指定的日期和時間,可以精確到微秒。34精選版課件pptdatetime庫解析datetime.now()和datedatetime庫解析調用datetime()函數(shù)直接創(chuàng)建一個datetime對象,表示2016年9月16日22:33,32秒7微秒,執(zhí)行結果如下:>>>someday=datetime(2016,9,16,22,33,32,7)>>>somedaydatetime.datetime(2016,9,16,22,33,32,7)程序已經有了一個datetime對象,進一步可以利用這個對象的屬性顯示時間,為了區(qū)別datetime庫名,采用上例中的someday代替生成的datetime對象35精選版課件pptdatetime庫解析調用datetime()函數(shù)直接創(chuàng)建一datetime庫解析屬性描述someday.min固定返回datetime的最小時間對象,datetime(1,1,1,0,0)someday.max固定返回datetime的最大時間對象,datetime(9999,12,31,23,59,59,999999)someday.year返回someday包含的年份someday.month返回someday包含的月份someday.day返回someday包含的日期someday.hour返回someday包含的小時someday.minute返回someday包含的分鐘someday.second返回someday包含的秒鐘someday.microsecond返回someday包含的微秒值36精選版課件pptdatetime庫解析屬性描述someday.min固定返回datetime庫解析datetime對象有3個常用的時間格式化方法,如表所示>>>someday=datetime(2016,9,16,22,33,32,7)>>>someday.isoformat()'2016-09-16T22:33:32.000007'>>>someday.isoweekday()5屬性描述someday.isoformat()采用ISO8601標準顯示時間someday.isoweekday()根據(jù)日期計算星期后返回1-7,對應星期一到星期日someday.strftime(format)根據(jù)格式化字符串format進行格式顯示的方法isoformat()和isoweekday()方法的使用如下:37精選版課件pptdatetime庫解析datetime對象有3個常用的時間格datetime庫解析strftime()方法是時間格式化最有效的方法,幾乎可以以任何通用格式輸出時間>>>someday.strftime("%Y-%m-%d%H:%M:%S")'2016-09-1622:33:32'38精選版課件pptdatetime庫解析strftime()方法是時間格式化最datetime庫解析格式化字符串日期/時間值范圍和實例%Y年份0001~9999,例如:1900%m月份01~12,例如:10%B月名January~December,例如:April%b月名縮寫Jan~Dec,例如:Apr%d日期01~31,例如:25%A星期Monday~Sunday,例如:Wednesday%a星期縮寫Mon~Sun,例如:Wed%H小時(24h制)00~23,例如:12%I小時(12h制)01~12,例如:7%p上/下午AM,PM,例如:PM%M分鐘00~59,例如:26%S秒00~59,例如:2639精選版課件pptdatetime庫解析格式化字符串日期/時間值范圍和實例%Ydatetime庫解析strftime()格式化字符串的數(shù)字左側會自動補零,上述格式也可以與print()的格式化函數(shù)一起使用>>>fromdatetimeimportdatetime>>>now=datetime.now()>>>now.strftime("%Y-%m-%d")'2016-09-20'>>>now.strftime("%A,%d.%B%Y%I:%M%p")'Tuesday,20.September201601:53PM'>>>print("今天是{0:%Y}年{0:%m}月{0:%d}日".format(now))今天是2016年09月20日40精選版課件pptdatetime庫解析strftime()格式化字符串的數(shù)字七段數(shù)碼管繪制41精選版課件ppt七段數(shù)碼管繪制41精選版課件ppt七段數(shù)碼管繪制七段數(shù)碼管(seven-segmentindicator)由7段數(shù)碼管拼接而成,每段有亮或不亮兩種情況,改進型的七段數(shù)碼管還包括一個小數(shù)點位置,如圖所示。42精選版課件ppt七段數(shù)碼管繪制七段數(shù)碼管(seven-segmentind七段數(shù)碼管繪制七段數(shù)碼管能形成27=128種不同狀態(tài),其中部分狀態(tài)能夠顯示易于人們理解的數(shù)字或字母含義,因此被廣泛使用。圖5.5給出了十六進制中16個字符的七段數(shù)碼管表示。43精選版課件ppt七段數(shù)碼管繪制七段數(shù)碼管能形成27=128種不同狀態(tài),其中部七段數(shù)碼管繪制每個0到9的數(shù)字都有相同的七段數(shù)碼管樣式,因此,可以通過設計函數(shù)復用數(shù)字的繪制過程。進一步,每個七段數(shù)碼管包括7個數(shù)碼管樣式,除了數(shù)碼管位置不同外,繪制風格一致,也可以通過函數(shù)復用單個數(shù)碼段的繪制過程。44精選版課件ppt七段數(shù)碼管繪制每個0到9的數(shù)字都有相同的七段數(shù)碼管樣式,因此七段數(shù)碼管繪制實例代碼7.1e7.1DrawSevenSegDisplay.py
123456789101112131415#e7.1DrawSevenSegDisplay.pyimportturtle,datetimedefdrawLine(draw):#繪制單段數(shù)碼管turtle.pendown()ifdrawelseturtle.penup()turtle.fd(40)turtle.right(90)defdrawDigit(d):#根據(jù)數(shù)字繪制七段數(shù)碼管drawLine(True)ifdin[2,3,4,5,6,8,9]elsedrawLine(False)drawLine(True)
ifdin[0,1,3,4,5,6,7,8,9]elsedrawLine(False)drawLine(True)ifdin[0,2,3,5,6,8,9]elsedrawLine(False)drawLine(True)ifdin[0,2,6,8]elsedrawLine(False)turtle.left(90)drawLine(True)ifdin[0,4,5,6,8,9]elsedrawLine(False)drawLine(True)ifdin[0,2,3,5,6,7,8,9]elsedrawLine(False)drawLine(True)ifdin[0,1,2,3,4,7,8,9]elsedrawLine(False)
45精選版課件ppt七段數(shù)碼管繪制實例代碼7.1e7.1DrawSevenSeg七段數(shù)碼管繪制實例代碼7.1e7.1DrawSevenSegDisplay.py
1617181920212223242526272829turtle.left(180)turtle.penup()turtle.fd(20)defdrawDate(date):#獲得要輸出的數(shù)字foriindate:drawDigit(eval(i))#注意:通過eval()函數(shù)將數(shù)字變?yōu)檎麛?shù)defmain():turtle.setup(800,350,200,200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate(datetime.datetime.now().strftime('%Y%m%d'))turtle.hideturtle()main()
46精選版課件ppt七段數(shù)碼管繪制實例代碼7.1e7.1DrawSevenSeg七段數(shù)碼管繪制實例代碼定義了drawDigit()函數(shù),該函數(shù)根據(jù)輸入的數(shù)字d繪制七段數(shù)碼管,結合七段數(shù)碼管結構,每個數(shù)碼管的繪制采用圖所示順序。
47精選版課件ppt七段數(shù)碼管繪制實例代碼定義了drawDigit()函數(shù),該函七段數(shù)碼管繪制繪制起點在數(shù)碼管中部左側,無論每段數(shù)碼管是否被繪制出來,turtle畫筆都按順序“畫完”所有7個數(shù)碼管。對于給定數(shù)字d,哪個數(shù)碼段被繪制出來采用if…else…語句判斷。
8drawLine(True)ifdin[2,3,4,5,6,8,9]elsedrawLine(False)
48精選版課件ppt七段數(shù)碼管繪制繪制起點在數(shù)碼管中部左側,無論每段數(shù)碼管是否被七段數(shù)碼管繪制49精選版課件ppt七段數(shù)碼管繪制49精選版課件ppt七段數(shù)碼管繪制50精選版課件ppt七段數(shù)碼管繪制50精選版課件ppt七段數(shù)碼管繪制實例代碼7.2e7.2DrawSevenSegDisplay.py
123456789101112131415161718192021222324#e7.2DrawSevenSegDisplay.pyimportturtle,datetimedefdrawGap():#繪制數(shù)碼管間隔turtle.penup()turtle.fd(5)defdrawLine(draw):#繪制單段數(shù)碼管drawGap()turtle.pendown()ifdrawelseturtle.penup()turtle.fd(40)drawGap()turtle.right(90)defdrawDigit(d):#根據(jù)數(shù)字繪制七段數(shù)碼管drawLine(True)ifdin[2,3,4,5,6,8,9]elsedrawLine(False)drawLine(True)ifdin[0,1,3,4,5,6,7,8,9]elsedrawLine(False)drawLine(True)ifdin[0,2,3,5,6,8,9]elsedrawLine(False)drawLine(True)ifdin[0,2,6,8]elsedrawLine(False)turtle.left(90)drawLine(True)ifdin[0,4,5,6,8,9]elsedrawLine(False)drawLine(True)ifdin[0,2,3,5,6,7,8,9]elsedrawLine(False)drawLine(True)ifdin[0,1,2,3,4,7,8,9]elsedrawLine(False)turtle.left(180)turtle.penup()turtle.fd(20)
51精選版課件ppt七段數(shù)碼管繪制實例代碼7.2e7.2DrawSevenSeg七段數(shù)碼管繪制實例代碼7.2e7.2DrawSevenSegDisplay.py
25262728293031323334353637383940414243444546defdrawDate(date):turtle.pencolor("red")foriindate:ifi=='-':turtle.write('年',font=("Arial",18,"normal"))turtle.pencolor("green")turtle.fd(40)elifi=='=':turtle.write('月',font=("Arial",18,"normal"))turtle.pencolor("blue")turtle.fd(40)elifi=='+':turtle.write('日',font=("Arial",18,"normal"))else:drawDigit(eval(i))defmain():turtle.setup(800,350,200,200)turtle.penup()turtle.fd(-350)turtle.pensize(5)drawDate(datetime.datetime.now().strftime('%Y-%m=%d+'))turtle.hideturtle()main()
52精選版課件ppt七段數(shù)碼管繪制實例代碼7.2e7.2DrawSevenSeg代碼的復用和模塊化設計53精選版課件ppt代碼的復用和模塊化設計53精選版課件ppt代碼的復用和模塊化設計函數(shù)是程序的一種基本抽象方式,它將一系列代碼組織起來通過命名供其他程序使用。函數(shù)封裝的直接好處是代碼復用,任何其他代碼只要輸入參數(shù)即可調用函數(shù),從而避免相同功能代碼在被調用處重復編寫。代碼復用產生了另一個好處,當更新函數(shù)功能時,所有被調用處的功能都被更新。54精選版課件ppt代碼的復用和模塊化設計函數(shù)是程序的一種基本抽象方式,它將一系代碼的復用和模塊化設計當程序的長度在百行以上,如果不劃分模塊就算是最好的程序員也很難理解程序含義程序的可讀性就已經很糟糕了。解決這一問題的最好方法是將一個程序分割成短小的程序段,每一段程序完成一個小的功能。無論面向過程和面向對象編程,對程序合理劃分功能模塊并基于模塊設計程序是一種常用方法,被稱為“模塊化設計”。55精選版課件ppt代碼的復用和模塊化設計當程序的長度在百行以上,如果不劃分模塊代碼的復用和模塊化設計模塊化設計一般有兩個基本要求:緊耦合:盡可能合理劃分功能塊,功能塊內部耦合緊密;松耦合:模塊間關系盡可能簡單,功能塊之間耦合度低。使用函數(shù)只是模塊化設計的必要非充分條件,根據(jù)計算需求合理劃分函數(shù)十分重要。一般來說,完成特定功能或被經常復用的一組語句應該采用函數(shù)來封裝,并盡可能減少函數(shù)間參數(shù)和返回值的數(shù)量。56精選版課件ppt代碼的復用和模塊化設計模塊化設計一般有兩個基本要求:56精選函數(shù)的遞歸57精選版課件ppt函數(shù)的遞歸57精選版課件ppt遞歸的定義函數(shù)作為一種代碼封裝,可以被其他程序調用,當然,也可以被函數(shù)內部代碼調用。這種函數(shù)定義中調用函數(shù)自身的方式稱為遞歸。就像一個人站在裝滿鏡子的房間中,看到的影像就是遞歸的結果。遞歸在數(shù)學和計算機應用上非常強大,能夠非常簡潔的解決重要問題。58精選版課件ppt遞歸的定義函數(shù)作為一種代碼封裝,可以被其他程序調用,當然,也遞歸的定義數(shù)學上有個經典的遞歸例子叫階乘,階乘通常定義為:這個關系給出了另一種方式表達階乘的方式:
59精選版課件ppt遞歸的定義數(shù)學上有個經典的遞歸例子叫階乘,階乘通常定義為:這遞歸的定義階乘的例子揭示了遞歸的2個關鍵特征:(1)存在一個或多個基例,基例不需要再次遞歸,它是確定的表達式;(2)所有遞歸鏈要以一個或多個基例結尾。60精選版課件ppt遞歸的定義階乘的例子揭示了遞歸的2個關鍵特征:60精選版課件遞歸的使用方法微實例5.21:階乘的計算。根據(jù)用戶輸入的整數(shù)n,計算并輸出n的階乘值。微實例5.21m5.1CalFactorial.py
1234567deffact(n):ifn==0:return1else:returnn*fact(n-1)num=eval(input("請輸入一個整數(shù):"))print(fact(abs(int(num))))
61精選版課件ppt遞歸的使用方法微實例5.21:階乘的計算。微實例5.21m5遞歸的使用方法62精選版課件ppt遞歸的使用方法62精選版課件ppt遞歸的使用方法微實例5.32:字符串反轉。對于用戶輸入的字符串s,輸出反轉后的字符串。解決這個問題的基本思想是把字符串看作一個遞歸對象。
12defreverse(s):returnreverse(s[1:])+s[0]
63精選版課件ppt遞歸的使用方法微實例5.32:字符串反轉。
1defre遞歸的使用方法
觀察這個函數(shù)的工作過程。s[0]是首字符,s[1:]是剩余字符串,將它們反向連接,可以得到反轉字符串。執(zhí)行這個程序,結果如下>>>defreverse(s):returnreverse(s[1:])+s[0]>>>
reverse("ABC")...RecursionError:maximumrecursiondepthexceeded64精選版課件ppt遞歸的使用方法觀察這個函數(shù)的工作過程科赫曲線繪制65精選版課件ppt科赫曲線繪制65精選版課件ppt科赫曲線繪制自然界有很多圖形很規(guī)則,符合一定的數(shù)學規(guī)律,例如,蜜蜂蜂窩是天然的等邊六角形等??坪?Koch)曲線在眾多經典數(shù)學曲線中非常著名,由瑞典數(shù)學家馮·科赫(H·V·Koch)于1904年提出,由于其形狀類似雪花,也被稱為雪花曲線。66精選版課件ppt科赫曲線繪制自然界有很多圖形很規(guī)則,符合一定的數(shù)學規(guī)律,例如科赫曲線繪制科赫曲線的基本概念和繪制方法如下:正整數(shù)n代表科赫曲線的階數(shù),表示生成科赫曲線過程的操作次數(shù)??坪涨€初始化階數(shù)為0,表示一個長度為L的直線。對于直線L,將其等分為三段,中間一段用邊長為L/3的等邊三角形的兩個邊替代,得到1階科赫曲線,它包含四條線段。進一步對每條線段重復同樣的操作后得到2階科赫曲線。繼續(xù)重復同樣的操作n次可以得到n階科赫曲線。67精選版課件ppt科赫曲線繪制科赫曲線的基本概念和繪制方法如下:67精選版課件科赫曲線繪制68精選版課件ppt科赫曲線繪制68精選版課件ppt科赫曲線繪制科赫曲線屬于分形幾何分支,它的繪制過程體現(xiàn)了遞歸思想,繪制過程代碼。實例代碼8.1e8.1DrawKoch.py
12345678910111213141516171819#e8.1DrawKoch.pyimportturtledefkoch(size,n):ifn==0:turtle.fd(size)else:foranglein[0,60,-120,60
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年風險管理合同
- 二零二五年度活雞養(yǎng)殖與銷售合同3篇
- 2024版溫室大棚蔬菜技術服務合同
- 2025年度財務外包服務與財務顧問團隊派遣合同范本3篇
- 2024版自行車定制協(xié)議條款及格式下載版B版
- 二零二五年度環(huán)保產業(yè)合伙經營合作協(xié)議范本3篇
- 2024年簡化股權無償轉讓合同
- 成長作文議論6篇
- 寫秋天的作文6006篇001
- 二零二五年度機場工程機械設備承包服務協(xié)議3篇
- 屋頂分布式光伏發(fā)電項目 投標方案(技術方案)
- 部編版語文四年級下冊第六單元大單元作業(yè)設計
- 中國畜禽養(yǎng)殖污染物處理行業(yè)市場集中度、企業(yè)競爭格局分析報告-智研咨詢發(fā)布
- DL∕T 2594-2023 電力企業(yè)標準化工作 評價與改進
- 廣東省廣州白云區(qū)六校聯(lián)考2025屆九上數(shù)學期末教學質量檢測試題含解析
- 肛瘺患者的護理查房
- 義務教育數(shù)學課程標準(2024年版)
- 護理用藥安全管理課件(圖文)
- 辦公區(qū)域主要風險辨識與分級管控清單
- 山東省濟南市七年級上學期期末英語試卷(附答案)
- 新學位法專題講座課件
評論
0/150
提交評論