ppt3 python函數(shù)及代碼復(fù)用[高教課堂]_第1頁
ppt3 python函數(shù)及代碼復(fù)用[高教課堂]_第2頁
ppt3 python函數(shù)及代碼復(fù)用[高教課堂]_第3頁
ppt3 python函數(shù)及代碼復(fù)用[高教課堂]_第4頁
ppt3 python函數(shù)及代碼復(fù)用[高教課堂]_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1教育教學(xué) 函數(shù)的定義 微實例微實例:生日歌生日歌。 過生日時要為朋友唱生日歌,歌詞為: Happy birthday to you! Happy birthday to you! Happy birthday, dear Happy birthday to you! 編寫程序為Mike和Lily輸出生日歌。最簡單的實現(xiàn)方法是重 復(fù)使用print()語句 2教育教學(xué) 函數(shù)的基本使函數(shù)的基本使 用用 3教育教學(xué) 函數(shù)的定義 函數(shù)是一段具有特定功能的、可重用的語句組,用函數(shù)名來 表示并通過函數(shù)名進行完成功能調(diào)用。 函數(shù)也可以看作是一段具有名字的子程序,可以在需要的地 方調(diào)用執(zhí)行,不需要在每個執(zhí)行地

2、方重復(fù)編寫這些語句。 每次使用函數(shù)可以提供不同的參數(shù)作為輸入,以實現(xiàn)對不同 數(shù)據(jù)的處理;函數(shù)執(zhí)行后,還可以反饋相應(yīng)的處理結(jié)果。 函數(shù)是一種功能抽象 4教育教學(xué) 函數(shù)的定義 Python定義一個函數(shù)使用def保留字,語法形式如下: def (): 注釋 return 5教育教學(xué) 函數(shù)的定義 1 2 3 4 print(Happy birthday to you!) print(Happy birthday to you!) print(Happy birthday, dear Mike!) print(Happy birthday to you!) 最簡單的實現(xiàn)方法是重復(fù)使用print()語句,

3、如下: 6教育教學(xué) 函數(shù)的定義 微實例5.1m5.1HappyBirthday.py 1 2 3 4 5 6 7 8 9 10 def happy(): print(Happy birthday to you!) def happyB(name): happy() happy() print(Happy birthday, dear !.format(name) happy() happyB(Mike) print() happyB(Lily) Happy birthday to you! Happy birthday to you! Happy birthday, dear Mike! Ha

4、ppy birthday to you! Happy birthday to you! Happy birthday to you! Happy birthday, dear Lily! Happy birthday to you! 7教育教學(xué) 函數(shù)調(diào)用的過程 程序調(diào)用一個函數(shù)需要執(zhí)行以下四個步驟: (1)調(diào)用程序在調(diào)用處暫停執(zhí)行; (2)在調(diào)用時將實參復(fù)制給函數(shù)的形參; (3)執(zhí)行函數(shù)體語句; (4)函數(shù)調(diào)用結(jié)束給出返回值,程序回到調(diào)用前的暫 停處繼續(xù)執(zhí)行。 8教育教學(xué) 函數(shù)調(diào)用的過程 微實例5.1中happyB()的被調(diào)用過程 9教育教學(xué) 函數(shù)調(diào)用的過函數(shù)調(diào)用的過 程程 10教育教學(xué) 函數(shù)

5、調(diào)用的過函數(shù)調(diào)用的過 程程 11教育教學(xué) lambda函數(shù) Python的有33個保留字,其中一個是lambda,該保留字用于定義 一種特殊的函數(shù)匿名函數(shù),又稱lambda函數(shù)。 匿名函數(shù)并非沒有名字,而是將函數(shù)名作為函數(shù)結(jié)果返回,如下: = lambda : lambda函數(shù)與正常函數(shù)一樣,等價于下面形式: def (): return 12教育教學(xué) lambda函數(shù) 簡單說,lambda函數(shù)用于定義簡單的、能夠在一行內(nèi) 表示的函數(shù),實例如下。 f = lambda x, y : x + y type(f) f(10, 12) 22 13教育教學(xué) 函數(shù)的參數(shù)傳函數(shù)的參數(shù)傳 遞遞 14教育教學(xué)

6、 可選參數(shù)和可變數(shù)量參數(shù) 在定義函數(shù)時,有些參數(shù)可以存在默認值。 必須出現(xiàn)在函數(shù)參數(shù)列表的最右端,且任何一 個默認值參數(shù)右邊不能有非默認值參數(shù)。 def dup(str, times = 2): print(str*times) dup(knock) knockknock dup(knock,4) knockknockknockknock 15教育教學(xué) 可選參數(shù)和可變數(shù)量參數(shù) 在函數(shù)定義時,可以設(shè)計可變數(shù)量參數(shù),通過參數(shù)前增加 星號(*)實現(xiàn) def vfunc(a, *b): print(type(b) for n in b: a += n return a vfunc(1,2,3,4,5)

7、 15 16教育教學(xué) 參數(shù)的位置和名稱傳遞 Python提供了按照形參名稱輸入實參的方式,調(diào)用如下: result = func(x2=4, y2=5, z2=6, x1=1, y1=2, z1=3) 由于調(diào)用函數(shù)時指定了參數(shù)名稱,所以參數(shù)之間的順序可 以任意調(diào)整。 17教育教學(xué) 變量的返回值 return語句用來退出函數(shù)并將程序返回到函數(shù)被調(diào)用的位 置繼續(xù)執(zhí)行。 return語句同時可以將0個、1個或多個函數(shù)運算完的結(jié)果 返回給函數(shù)被調(diào)用處的變量,例如。 def func(a, b): return a*b s = func(knock, 2) print(s) knockknock 18教

8、育教學(xué) 變量的返回值 函數(shù)可以沒有return,此時函數(shù)并不返回值,如微實例 5.1的happy()函數(shù)。函數(shù)也可以用return返回多個值,多 個值以元組類型保存,例如。 def func(a, b): return b,a s = func(knock, 2) print(s, type(s) (2, knock) 19教育教學(xué) 函數(shù)對變量的作用 一個程序中的變量包括兩類:全局變量全局變量和局部變局部變量量。 全局變量指在函數(shù)之外定義的變量,一般沒有縮進,在 程序執(zhí)行全過程有效。 局部變量指在函數(shù)內(nèi)部使用的變量,僅在函數(shù)內(nèi)部有效 ,當(dāng)函數(shù)退出時變量將不存在。 20教育教學(xué) 變量的返回值 d

9、ef func(a,b): c= a* b #c是局部變量,a和b作為函數(shù)參數(shù)也是局部變量 return c s = func(knock, 2) print(c) Traceback (most recent call last): File , line 1, in print(c) NameError: name c is not defined 這個例子說明,當(dāng)函數(shù)執(zhí)行完退出后,其內(nèi)部變量將被 釋放。如果函數(shù)內(nèi)部使用了全局變量呢? 21教育教學(xué) 變量的返回值 n = 1#n是全是全局變量局變量 def func(a, b): n = b#這個這個n是在是在函函數(shù)內(nèi)數(shù)內(nèi)存存中新中新生生成

10、的成的局局部變部變量量,不,不是是全局全局變變量量 return a*b s = func(knock, 2) print(s, n)#測測試一下試一下n值值是是否改變否改變 knockknock 1 函數(shù)func()內(nèi)部使用了變量n,并且將變量參數(shù)b賦值給變 量n,為何全局變量n值沒有改變? 22教育教學(xué) 變量的返回值 如果希望讓func()函數(shù)將n當(dāng)作全局變量,需要在變量n使 用前顯式聲明該變量為全局變量,代碼如下。 n = 1#n是全局變量是全局變量 def func(a, b): global n n = b#將局部變量將局部變量b賦值給全局變量賦值給全局變量n return a*b

11、s = func(knock, 2) print(s, n)#測試一下測試一下n值是否改變值是否改變 knockknock 2 23教育教學(xué) 變量的返回值 如果此時的全局變量不是整數(shù)n,而是列表類型ls,會怎么 樣呢?理解如下代碼。 ls = #ls是是全局列表全局列表變變量量 def func(a, b): ls.append(b)#將局將局部變部變量量b增增加加到全到全局局列表列表變變量量ls中中 return a*b s = func(knock, 2) print(s, ls)#測試測試一下一下ls值是否值是否改改變變 knockknock 2 24教育教學(xué) 變量的返回值 如果func

12、()函數(shù)內(nèi)部存在一個真實創(chuàng)建過且名稱為ls的列表 ,則func()將操作該列表而不會修改全局變量,例子如下。 ls = #ls是全局列表變量是全局列表變量 def func(a, b): ls = #創(chuàng)建了名稱創(chuàng)建了名稱為為ls的局部列表的局部列表變變量量列列 ls.append(b)#將局部變量將局部變量b增加到全局列表變增加到全局列表變量量ls中中 return a*b s = func(knock, 3) print(s, ls)#測試一下測試一下ls值是否改變值是否改變 knockknock 25教育教學(xué) 變量的返回值 Python函數(shù)對變量的作用遵守如下原則: 對于簡單數(shù)據(jù)類型變量簡

13、單數(shù)據(jù)類型變量無論是否與全局變量重名,僅在函數(shù)內(nèi) 部創(chuàng) 建和使用,函數(shù)退出后變量被釋放; 簡單數(shù)據(jù)類型變量在用global保留字聲明后,作為全局變量; 對于組合數(shù)據(jù)類型的全局變量組合數(shù)據(jù)類型的全局變量,如果在函數(shù)內(nèi)部沒有被真實創(chuàng) 建的同名變量,則函數(shù)內(nèi)部可直接使用并修改全局變量的值; 如果函數(shù)內(nèi)部真實創(chuàng)建了組合數(shù)據(jù)類型變量,無論是否有同名 全局變量,函數(shù)僅對局部變量進行操作。 26教育教學(xué) 案例精選 例:編寫函數(shù)模擬猜數(shù)游戲。系統(tǒng)隨機產(chǎn)生一個數(shù), 玩家最多可以猜5次,系統(tǒng)會根據(jù)玩家的猜測進行提示, 玩家則可以根據(jù)系統(tǒng)的提示對下一次的猜測進行適當(dāng) 調(diào)整。 27教育教學(xué) 案例精選 from ran

14、dom import randint def guess(maxValue=100, maxTimes=5): value = randint(1,maxValue) #隨機生成一個整數(shù) for i in range(maxTimes): prompt = Start to GUESS: if i=0 else Guess again: #使用異常處理結(jié)構(gòu),防止輸入不是數(shù)字的情況 try: x = int(input(prompt) except: print(Must input an integer between 1 and , maxValue) else: if x = value:

15、 #猜對了 print(Congratulations!) break elif x value: print(Too big) else: print(Too little) else: #次數(shù)用完還沒猜對,游戲結(jié)束,提示正確答案 print(Game over. FAIL.) print(The value is , value) 28教育教學(xué) 小練習(xí): 使用turtle繪制陰陽圖形 29教育教學(xué) datetime庫的使用庫的使用 30教育教學(xué) datetime庫概述 以不同格式顯示日期和時間是程序中最常用到的功能。 Python提供了一個處理時間的標(biāo)準(zhǔn)函數(shù)庫datetime,它提供 了一

16、系列由簡單到復(fù)雜的時間處理方法。datetime庫可以從 系統(tǒng)中獲得時間,并以用戶選擇的格式輸出。 31教育教學(xué) datetime庫概述 datetime庫以類的方式提供多種日期和時間表達方式: 類類datetime.date:可以表示年、月、日等 類類datetime.time:可以表示小時、分鐘、秒、毫秒等 類類datetime.datetime:日期和時間表示的類,其很多功能覆蓋date 和time類 類類datetime.timedelta:時間間隔有關(guān)的類 類類datetime.tzinfo:與時區(qū)有關(guān)的信息表示類 32教育教學(xué) datetime庫解析 使用datetime.now(

17、)獲得當(dāng)前日期和時間對象,使用 方法如下: from datetime import datetime datetime.now() 作用作用:返回一個datetime類型,表示當(dāng)前的日期和時 間,精確到微秒。 from datetime import datetime today = datetime.now() today datetime.datetime(2016, 9, 20, 10, 29, 43, 928549) 33教育教學(xué) datetime庫解析 使用datetime.utcnow()獲得當(dāng)前日期和時間對應(yīng)的UTC (世界標(biāo)準(zhǔn)時間)時間對象,使用方法如下: datetime.

18、utcnow() 作用作用:返回datetime類型,表示當(dāng)前日期和時間的UTC表示,精確到微秒。 today = datetime.utcnow() today datetime.datetime(2016, 9, 20, 2, 35, 1, 427954) 34教育教學(xué) datetime庫解析 datetime.now() 和 datetime.utcnow() 都 返 回 一 個 datetime類型的對象,也可以直接使用datetime()構(gòu)造一個 日期和時間對象,使用方法如下: datetime(year, month, day, hour=0, minute=0,second=0,

19、 microsecond=0) 作用作用:返回一個datetime類型,表示指定的日期和時間, 可以精確到微秒。 35教育教學(xué) datetime庫解析 調(diào)用datetime()函數(shù)直接創(chuàng)建一個datetime對象,表示2016 年9月16日22:33,32秒7微秒,執(zhí)行結(jié)果如下: someday = datetime(2016,9,16,22,33,32,7) someday datetime.datetime(2016, 9, 16, 22, 33, 32, 7) 程序已經(jīng)有了一個datetime對象,進一步可以利用這個對象 的屬性顯示時間,為了區(qū)別datetime庫名,采用上例中的 som

20、eday代替生成的datetime對象 36教育教學(xué) 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返

21、回someday包含的分鐘 someday.second返回someday包含的秒鐘 someday.microsecond返回someday包含的微秒值 37教育教學(xué) 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()采用ISO 8601標(biāo)準(zhǔn)顯示時間 someday.isoweekday()根據(jù)

22、日期計算星期后返回1-7,對應(yīng)星期一到星期日 someday.strftime(format)根據(jù)格式化字符串format進行格式顯示的方法 isoformat()和isoweekday()方法的使用如下: 38教育教學(xué) datetime庫解析 strftime()方法是時間格式化最有效的方法,幾乎可以以任 何通用格式輸出時間 someday.strftime(%Y-%m-%d %H:%M:%S) 2016-09-16 22:33:32 39教育教學(xué) datetime庫解析 格式化字符串日期/時間值范圍和實例 %Y年份00019999,例如:1900 %m月份0112,例如:10 %B月名Ja

23、nuaryDecember,例如:April %b月名縮寫JanDec,例如:Apr %d日期01 31,例如:25 %A星期MondaySunday,例如:Wednesday %a星期縮寫MonSun,例如:Wed %H小時(24h制)00 23,例如:12 %I小時(12h制)01 12,例如:7 %p上/下午AM, PM,例如:PM %M分鐘00 59,例如:26 %S秒00 59,例如:26 40教育教學(xué) datetime庫解析 strftime()格式化字符串的數(shù)字左側(cè)會自動補零,上述格 式也可以與print()的格式化函數(shù)一起使用 from datetime import date

24、time now = datetime.now() now.strftime(%Y-%m-%d) 2016-09-20 now.strftime(%A, %d. %B %Y %I:%M%p) Tuesday, 20. September 2016 01:53PM print(今天今天是是0:%Y年年0:%m月月0:%d日日.format(now) 今天是2016年09月20日 41教育教學(xué) 七段數(shù)碼管繪七段數(shù)碼管繪 制制 42教育教學(xué) 七段數(shù)碼管繪制 七段數(shù)碼管(seven-segment indicator)由7段數(shù)碼管拼 接而成,每段有亮或不亮兩種情況,改進型的七段數(shù)碼管還包 括一個小數(shù)點

25、位置,如圖所示。 43教育教學(xué) 七段數(shù)碼管繪制 七段數(shù)碼管能形成27=128種不同狀態(tài),其中部分狀態(tài)能 夠顯示易于人們理解的數(shù)字或字母含義,因此被廣泛使用 。圖5.5給出了十六進制中16個字符的七段數(shù)碼管表示。 44教育教學(xué) 七段數(shù)碼管繪制 每個0到9的數(shù)字都有相同的七段數(shù)碼管樣式,因此,可以 通過設(shè)計函數(shù)復(fù)用數(shù)字的繪制過程。進一步,每個七段數(shù)碼 管包括7個數(shù)碼管樣式,除了數(shù)碼管位置不同外,繪制風(fēng)格 一致,也可以通過函數(shù)復(fù)用單個數(shù)碼段的繪制過程。 45教育教學(xué) 七段數(shù)碼管繪制 實例代碼7.1e7.1DrawSevenSegDisplay.py 1 2 3 4 5 6 7 8 9 10 11 1

26、2 13 14 15 #e7.1DrawSevenSegDisplay.py import turtle, datetime def drawLine(draw):#繪制單段繪制單段數(shù)碼管數(shù)碼管 turtle.pendown() if draw else turtle.penup() turtle.fd(40) turtle.right(90) def drawDigit(d): #根據(jù)數(shù)根據(jù)數(shù)字繪制七段數(shù)碼管字繪制七段數(shù)碼管 drawLine(True) if d in 2,3,4,5,6,8,9 else drawLine(False) drawLine(True) if d in 0,1

27、,3,4,5,6,7,8,9 else drawLine(False) drawLine(True) if d in 0,2,3,5,6,8,9 else drawLine(False) drawLine(True) if d in 0,2,6,8 else drawLine(False) turtle.left(90) drawLine(True) if d in 0,4,5,6,8,9 else drawLine(False) drawLine(True) if d in 0,2,3,5,6,7,8,9 else drawLine(False) drawLine(True) if d in

28、 0,1,2,3,4,7,8,9 else drawLine(False) 46教育教學(xué) 七段數(shù)碼管繪制 實例代碼7.1e7.1DrawSevenSegDisplay.py 16 17 18 19 20 21 22 23 24 25 26 27 28 29 turtle.left(180) turtle.penup() turtle.fd(20) def drawDate(date):#獲得要獲得要輸出的數(shù)字輸出的數(shù)字 for i in date: drawDigit(eval(i)#注意注意: 通過通過eval()函數(shù)將函數(shù)將數(shù)字變?yōu)檎麛?shù)數(shù)字變?yōu)檎麛?shù) def main(): turtle.s

29、etup(800, 350, 200, 200) turtle.penup() turtle.fd(-300) turtle.pensize(5) drawDate(datetime.datetime.now().strftime(%Y%m%d) turtle.hideturtle() main() 47教育教學(xué) 七段數(shù)碼管繪制 實例代碼定義了drawDigit()函數(shù),該函數(shù)根據(jù)輸入的數(shù)字d 繪制七段數(shù)碼管,結(jié)合七段數(shù)碼管結(jié)構(gòu),每個數(shù)碼管的繪制 采用圖所示順序。 48教育教學(xué) 七段數(shù)碼管繪制 繪制起點在數(shù)碼管中部左側(cè),無論每段數(shù)碼管是否被繪制 出來,turtle畫筆都按順序“畫完”所有7個數(shù)

30、碼管。對于給 定數(shù)字d,哪個數(shù)碼段被繪制出來采用ifelse語句判斷。 8drawLine(True) if d in 2,3,4,5,6,8,9 else drawLine(False) 49教育教學(xué) 七段數(shù)碼管繪制七段數(shù)碼管繪制 50教育教學(xué) 七段數(shù)碼管繪制七段數(shù)碼管繪制 51教育教學(xué) 七段數(shù)碼管繪制 實例代碼7.2e7.2DrawSevenSegDisplay.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #e7.2DrawSevenSegDisplay.py import turtle, dateti

31、me def drawGap(): #繪制繪制數(shù)數(shù)碼碼管間隔管間隔 turtle.penup() turtle.fd(5) def drawLine(draw):#繪制繪制單段數(shù)單段數(shù)碼碼管管 drawGap() turtle.pendown() if draw else turtle.penup() turtle.fd(40) drawGap() turtle.right(90) def drawDigit(d): #根據(jù)根據(jù)數(shù)字數(shù)字繪繪制七制七段段數(shù)碼管數(shù)碼管 drawLine(True) if d in 2,3,4,5,6,8,9 else drawLine(False) drawLin

32、e(True) if d in 0,1,3,4,5,6,7,8,9 else drawLine(False) drawLine(True) if d in 0,2,3,5,6,8,9 else drawLine(False) drawLine(True) if d in 0,2,6,8 else drawLine(False) turtle.left(90) drawLine(True) if d in 0,4,5,6,8,9 else drawLine(False) drawLine(True) if d in 0,2,3,5,6,7,8,9 else drawLine(False) dra

33、wLine(True) if d in 0,1,2,3,4,7,8,9 else drawLine(False) turtle.left(180) turtle.penup() turtle.fd(20) 52教育教學(xué) 七段數(shù)碼管繪制 實例代碼7.2e7.2DrawSevenSegDisplay.py 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 def drawDate(date): turtle.pencolor(red) for i in date: if i = -: turtle.write(年年,

34、font=(Arial, 18, normal) turtle.pencolor(green) turtle.fd(40) elif i = =: turtle.write(月月,font=(Arial, 18, normal) turtle.pencolor(blue) turtle.fd(40) elif i = +: turtle.write(日日,font=(Arial, 18, normal) else: drawDigit(eval(i) def main(): turtle.setup(800, 350, 200, 200) turtle.penup() turtle.fd(-3

35、50) turtle.pensize(5) drawDate(datetime.datetime.now().strftime(%Y-%m=%d+) turtle.hideturtle() main() 53教育教學(xué) 函數(shù)的遞函數(shù)的遞 歸歸 54教育教學(xué) 遞歸的定義 函數(shù)作為一種代碼封裝,可以被其他程序調(diào)用,當(dāng)然, 也可以被函數(shù)內(nèi)部代碼調(diào)用。這種函數(shù)定義中調(diào)用函數(shù)自 身的方式稱為遞歸。就像一個人站在裝滿鏡子的房間中, 看到的影像就是遞歸的結(jié)果。遞歸在數(shù)學(xué)和計算機應(yīng)用上 非常強大,能夠非常簡潔的解決重要問題。 55教育教學(xué) 遞歸的定義 數(shù)學(xué)上有個經(jīng)典的遞歸例子叫階乘,階乘通常定義為: n! n(

36、n 1)(n 2).(1) 這個關(guān)系給出了另一種方式表達階乘的方式: n 0 n! 1 n(n 1)!otherwise 56教育教學(xué) 遞歸的使用方法 微實例微實例5.21:階乘的計算。階乘的計算。 根據(jù)用戶輸入的整數(shù)n,計算并輸出n的階乘值。 微實微實例例5.21m5.1CalFactorial.py 1 2 3 4 5 6 7 def fact(n): if n = 0: return 1 else: return n * fact(n-1) num = eval(input(請輸請輸入入一個一個整整數(shù)數(shù): ) print(fact(abs(int(num) 57教育教學(xué) 遞歸的使用方法遞

37、歸的使用方法 58教育教學(xué) 遞歸的使用方法 微實例微實例5.32:字符串反轉(zhuǎn)。字符串反轉(zhuǎn)。 對于用戶輸入的字符串s,輸出反轉(zhuǎn)后的字符串。 解決這個問題的基本思想是把字符串看作一個遞歸對象。 1 2 def reverse(s): return reverse(s1:) + s0 59教育教學(xué) 遞歸的使用方法 觀察這個函數(shù)的工作過程。s0是首字符,s1:是 剩余字符串,將它們反向連接,可以得到反轉(zhuǎn)字符串。執(zhí) 行這個程序,結(jié)果如下 def reverse(s): return reverse(s1:) + s0 reverse(ABC) . RecursionError: maximum recu

38、rsion depth exceeded 60教育教學(xué) 科赫曲線繪科赫曲線繪 制制 61教育教學(xué) 科赫曲線繪制 自然界有很多圖形很規(guī)則,符合一定的數(shù)學(xué)規(guī)律,例如, 蜜蜂蜂窩是天然的等邊六角形等??坪?Koch)曲線在眾多經(jīng) 典數(shù)學(xué)曲線中非常著名,由瑞典數(shù)學(xué)家馮科赫(HVKoch)于 1904年提出,由于其形狀類似雪花,也被稱為雪花曲線。 62教育教學(xué) 科赫曲線繪制科赫曲線繪制 63教育教學(xué) 科赫曲線繪制 科赫曲線屬于分形幾 何分支,它的繪制過程 體現(xiàn)了遞歸思想,繪制 過程代碼。 實例代碼8.1e8.1DrawKoch.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

39、 16 17 18 19 #e8.1DrawKoch.py import turtle def koch(size, n): if n = 0: turtle.fd(size) else: for angle in 0, 60, -120, 60: turtle.left(angle) koch(size/3, n-1) def main(): turtle.setup(800,400) turtle.speed(0)#控控制繪制速度制繪制速度 turtle.penup() turtle.goto(-300, -50) turtle.pendown() turtle.pensize(2) ko

40、ch(600,3)# 0階科階科赫曲線赫曲線長長度度,階數(shù)階數(shù) turtle.hideturtle() main() 64教育教學(xué) 科赫曲線繪制 實例代碼8.2e8.2DrawKoch.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #e8.2DrawKoch.py import turtle def koch(size, n): if n = 0: turtle.fd(size) else: for angle in 0, 60, -120, 60: turtle.left(angle) koch(size/

41、3, n-1) def main(): turtle.setup(600,600) turtle.speed(0) turtle.penup() turtle.goto(-200, 100) turtle.pendown() turtle.pensize(2) level = 5 koch(400,level) turtle.right(120) koch(400,level) turtle.right(120) koch(400,level) turtle.hideturtle() main() 科赫曲線的雪花效果 65教育教學(xué) 小練習(xí):繪制謝賓斯基三角形 66教育教學(xué) 漢諾塔游戲漢諾塔游戲

42、 67教育教學(xué) 小練習(xí):漢諾塔游戲小練習(xí):漢諾塔游戲 def def honiMove(self,k,x,y,z): #turtle.Screen().clear() if if k1: self.honiMove( k-1, x, z, y) z.push( x.pop() self.honiMove(k - 1, y, x, z) elseelse: z.push(x.pop() 68教育教學(xué) Python內(nèi)置函數(shù)內(nèi)置函數(shù) 69教育教學(xué) Python內(nèi)置函數(shù)(BIF) Python解釋器提供了68個內(nèi)置函數(shù),其中大部分會經(jīng)常用到 abs()id()round()compile()local

43、s() all()input()set()dir()map() any()int()sorted()exec()memoryview() asci()len()str()enumerate()next() bin()list()tuple()filter()object() bool()max()type()format()property() chr()min()zip()frozenset()repr() complex()oct()getattr()setattr() dict()open()globals()slice() divmod()ord()bytes()hasattr()st

44、aticmethod() eval()pow()delattr()help()sum() float()print()bytearray()isinstance()super() hash()range()callable()issubclass()vars() hex()reversed()classmethod()iter() import() 70教育教學(xué) 常用內(nèi)置函數(shù) 內(nèi)置函數(shù)不需要導(dǎo)入任何模塊即可使用 執(zhí)行下面的命令可以列出所有內(nèi)置函數(shù) dir(_builtins_) Python標(biāo)準(zhǔn)庫 input() print() str() range() 71教育教學(xué) 函數(shù)函數(shù)功能簡要說明功

45、能簡要說明 abs(x)返回數(shù)字x的絕對值或復(fù)數(shù)x的模 all(iterable)如果對于可迭代對象中所有元素x都等價于True,也就是對于 所有元素x都有bool(x)等于True,則返回True。對于空的可 迭代對象也返回True any(iterable)只要可迭代對象iterable中存在元素x使得bool(x)為True, 則返回True。對于空的可迭代對象,返回False ascii(obj)把對象轉(zhuǎn)換為ASCII碼表示形式,必要的時候使用轉(zhuǎn)義字符來 表示特定的字符 bin(x)把整數(shù)x轉(zhuǎn)換為二進制串表示形式 bool(x)返回與x等價的布爾值True或False bytes(x)

46、生成字節(jié)串,或把指定對象x轉(zhuǎn)換為字節(jié)串表示形式 callable(obj)測試對象obj是否可調(diào)用。類和函數(shù)是可調(diào)用的,包含 _call_()方法的類的對象也是可調(diào)用的 compile()用于把Python代碼編譯成可被exec()或eval()函數(shù)執(zhí)行的代 碼對象 complex(real, imag)返回復(fù)數(shù) chr(x)返回Unicode編碼為x的字符 常用內(nèi)置函數(shù) 72教育教學(xué) 函數(shù)函數(shù)功能簡要說明功能簡要說明 delattr(obj, name)刪除屬性,等價于del dir(obj)返回指定對象或模塊obj的成員列表,如果不帶參數(shù)則 返回當(dāng)前作用域內(nèi)所有標(biāo)識符 d

47、ivmod(x, y)返回包含整商和余數(shù)的元組(x-x%y)/y, x%y) enumerate(iterable, start) 返回包含元素形式為(0, iterable0), (1, iterable1), (2, iterable2), .的迭代器對象 eval(s, globals, locals) 計算并返回字符串s中表達式的值 exec(x)執(zhí)行代碼或代碼對象x exit()退出當(dāng)前解釋器環(huán)境 filter(func, seq)返回filter對象,其中包含序列seq中使得單參數(shù)函數(shù) func返回值為True的那些元素,如果函數(shù)func為None 則返回包含seq中等價于True

48、的元素的filter對象 float(x)把整數(shù)或字符串x轉(zhuǎn)換為浮點數(shù)并返回 frozenset(x)創(chuàng)建不可變的字典對象 getattr(obj, name, default)獲取對象中指定屬性的值,等價于,如果不 存在指定屬性則返回default的值,如果要訪問的屬性 不存在并且沒有指定default則拋出異常 續(xù)表1常用內(nèi)置函數(shù) 73教育教學(xué) 函數(shù)函數(shù)功能簡要說明功能簡要說明 globals()返回包含當(dāng)前作用域內(nèi)全局變量及其值的字典 hasattr(obj, name)測試對象obj是否具有名為name的成員 hash(x)返回對象x的哈希值,如果x不可哈希則拋出異常

49、help(obj)返回對象obj的幫助信息 hex(x)把整數(shù)x轉(zhuǎn)換為十六進制串 id(obj)返回對象obj的標(biāo)識(內(nèi)存地址) input(提示)顯示提示,接收鍵盤輸入的內(nèi)容,返回字符串 int(x, d)返回實數(shù)(float)、分數(shù)(Fraction)或高精度實數(shù) (Decimal)x的整數(shù)部分,或把d進制的字符串x轉(zhuǎn)換為十 進制并返回,d默認為十進制 isinstance(obj, class- or-type-or-tuple) 測試對象obj是否屬于指定類型(如果有多個類型的話需要 放到元組中)的實例 iter(.)返回指定對象的可迭代對象 len(obj)返回對象obj包含的元素個

50、數(shù),適用于列表、元組、集合、 字典、字符串以及range對象和其他可迭代對象 續(xù)表2常用內(nèi)置函數(shù) 74教育教學(xué) 函數(shù)函數(shù)功能簡要說明功能簡要說明 list(x)、set(x)、 tuple(x)、dict(x) 把對象x轉(zhuǎn)換為列表、集合、元組或字典并返回,或生成 空列表、空集合、空元組、空字典 locals()返回包含當(dāng)前作用域內(nèi)局部變量及其值的字典 map(func, *iterables)返回包含若干函數(shù)值的map對象,函數(shù)func的參數(shù)分別來 自于iterables指定的每個迭代對象, max(x)、 min(x)返回可迭代對象x中的最大值、最小值,要求x中的所有元 素之間可比較大小,允

51、許指定排序規(guī)則和x為空時返回的 默認值 next(iterator, default) 返回可迭代對象x中的下一個元素,允許指定迭代結(jié)束之 后繼續(xù)迭代時返回的默認值 oct(x)把整數(shù)x轉(zhuǎn)換為八進制串 open(name, mode)以指定模式mode打開文件name并返回文件對象 ord(x)返回1個字符x的Unicode編碼 pow(x, y, z=None)返回x的y次方,等價于x * y或(x * y) % z 續(xù)表3常用內(nèi)置函數(shù) 75教育教學(xué) 函數(shù)函數(shù)功能簡要說明功能簡要說明 print(value, ., sep= , end=n, file = sys. stdout, flus

52、h=False) 基本輸出函數(shù) quit()退出當(dāng)前解釋器環(huán)境 range(start, end , step ) 返回range對象,其中包含左閉右開區(qū)間start,end)內(nèi)以 step為步長的整數(shù) reduce(func, sequence, initial) 將雙參數(shù)的函數(shù)func以迭代的方式從左到右依次應(yīng)用至序 列seq中每個元素,最終返回單個值作為結(jié)果。在Python 2.x中該函數(shù)為內(nèi)置函數(shù),在Python 3.x中需要從 functools中導(dǎo)入reduce函數(shù)再使用 repr(obj)返回對象obj的規(guī)范化字符串表示形式,對于大多數(shù)對象有 eval(repr(obj)=obj

53、 reversed(seq)返回seq(可以是列表、元組、字符串、range以及其他可 迭代對象)中所有元素逆序后的迭代器對象 續(xù)表4常用內(nèi)置函數(shù) 76教育教學(xué) 函數(shù)函數(shù)功能簡要說明功能簡要說明 round(x , 小數(shù)位數(shù))對x進行四舍五入,若不指定小數(shù)位數(shù),則返回整數(shù) sorted(iterable, key=None, reverse=False) 返回排序后的列表,其中iterable表示要排序的序列或迭 代對象,key用來指定排序規(guī)則或依據(jù),reverse用來指定 升序或降序。該函數(shù)不改變iterable內(nèi)任何元素的順序 str(obj)把對象obj直接轉(zhuǎn)換為字符串 sum(x, s

54、tart=0)返回序列x中所有元素之和,要求序列x中所有元素必須為 數(shù)字,允許指定起始值start,返回start+sum(x) type(obj)返回對象obj的類型 zip(seq1 , seq2 .) 返回zip對象,其中元素為(seq1i, seq2i, .)形式 的元組,最終結(jié)果中包含的元素個數(shù)取決于所有參數(shù)序列 或可迭代對象中最短的那個 續(xù)表5常用內(nèi)置函數(shù) 77教育教學(xué) 常用內(nèi)置函數(shù) dir()函數(shù)可以查看指定模塊中包含的所有成員或者指定 對象類型所支持的操作。 help()函數(shù)則返回指定模塊或函數(shù)的說明文檔。 import time dir(time) help(time) 78

55、教育教學(xué) 常用內(nèi)置函數(shù) ord()和chr()是一對功能相反的函數(shù),ord()用來返回單個字符的序數(shù)或 Unicode碼,chr()用來返回某序數(shù)對應(yīng)的字符 str()則直接將其任意類型參數(shù)轉(zhuǎn)換為字符串。 ord(a) 97 chr(65) A chr(ord(A)+1) B str(1) 1 str(1234) 1234 str(1,2,3) 1, 2, 3 str(1,2,3) (1, 2, 3) str(1,2,3) set(1, 2, 3) 79教育教學(xué) 常用內(nèi)置函數(shù) max()、min()、sum()這三個內(nèi)置函數(shù)分別用于計算列表、元組或其他可 迭代對象中所有元素最大值、最小值以及所

56、有元素之和,sum()要求元素 支持加法運算,max()和min()則要求序列或可迭代對象中的元素之間可 比較大小。 import random a = random.randint(1,100) for i in range(10) #列表推導(dǎo)式 a 72, 26, 80, 65, 34, 86, 19, 74, 52, 40 print(max(a), min(a), sum(a) 86 19 548 如果需要計算該列表中的所有元素的平均值,可以直接這樣用: sum(a)*1.0/len(a) #Python 2.7.12 54.8 sum(a)/len(a) #Python 3.5.2

57、54.8 80教育教學(xué) 常用內(nèi)置函數(shù) 內(nèi)置函數(shù)max()和min()的key參數(shù)可以用來指定比較規(guī)則 x = 21, 1234, 9 max(x) 9 max(x, key=len) 1234 max(x, key=int) 1234 81教育教學(xué) 常用內(nèi)置函數(shù) 內(nèi)置函數(shù)type()和isinstance()可以判斷數(shù)據(jù)類型。 type(3) #查看3的類型 type(3) in (list, tuple, dict) #判斷3是否為list,tuple或dict類型的實 例 False isinstance(3, int) #判斷3是否為int類型的實例 True isinstance(3j

58、, (int, float, complex) #判斷3是否為int,float或complex類 型 True 82教育教學(xué) 常用內(nèi)置函數(shù) range()是非常常用的內(nèi)置函數(shù),語法格式為range(start, end , step )。 該函數(shù)返回具有惰性求值特點的range對象,其中包含左閉右開區(qū)間 start,end)內(nèi)以step為步長的整數(shù)。參數(shù)start默認為0,step默認為1。 range(5) #start默認為0,step默認為1 range(0, 5) list(_) 0, 1, 2, 3, 4 list(range(1, 10, 2) #指定起始值和步長 1, 3, 5

59、, 7, 9 list(range(9, 0, -2) #步長為負數(shù)時,start應(yīng)比end大 9, 7, 5, 3, 1 83教育教學(xué) 常用內(nèi)置函數(shù) sorted()對列表、元組、字典、集合或其他可迭代對象進行排序并 返回新列表,reversed()對可迭代對象(生成器對象和具有惰性求 值特性的zip、map、filter、enumerate等類似對象除外)進行翻轉(zhuǎn) (首尾交換)并返回可迭代的reversed對象。 x = aaaa, bc, d, b, ba sorted(x, key=lambda item: (len(item), item) #先按長度排序,長度一樣的正常 排序 b, d, ba, bc

溫馨提示

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

評論

0/150

提交評論