




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
5.1函數(shù)的基本用法
5.2函數(shù)的參數(shù)傳遞
5.3函數(shù)的遞歸調(diào)用
5.4變量的作用域
5.5精選案例第5章函數(shù)考綱考點
函數(shù)的定義和使用
函數(shù)的參數(shù)傳遞:可選參數(shù)傳遞、參數(shù)名稱傳遞、函數(shù)的返回值
變量的作用域:局部變量和全局變量知識導(dǎo)圖5.1函數(shù)的基本用法函數(shù)是一段具有特定功能的、可重用的語句組,通過函數(shù)名來表示和調(diào)用。經(jīng)過定義,一組語句等價于一個函數(shù),在需要使用這組語句的地方,直接調(diào)用函數(shù)名稱即可。因此,函數(shù)的使用包括兩部分:函數(shù)的定義和函數(shù)的調(diào)用。??5.1.1函數(shù)的定義在Python中,定義一個函數(shù)使用def保留字,函數(shù)定義包括兩部分:函數(shù)名和函數(shù)體,函數(shù)名用于標(biāo)識函數(shù),函數(shù)體中則包含了實現(xiàn)特定功能的代碼塊。語法形式如下:def<函數(shù)名>(<形參列表>):<函數(shù)體>return<返回值列表>函數(shù)名:用于唯一標(biāo)識這個函數(shù),符合標(biāo)識符的命名規(guī)則。形參列表:代表了函數(shù)的輸入值,在函數(shù)內(nèi)部進行計算和操作,是在函數(shù)定義時聲明的參數(shù),可以有零個、一個或多個,多個參數(shù)由逗號分隔,當(dāng)沒有參數(shù)時也要保留圓括號。形式參數(shù)不需要聲明類型,也不需要指定函數(shù)返回值類型。函數(shù)體:是函數(shù)每次被調(diào)用時執(zhí)行的代碼,由一行或多行語句組成。??例如,一個乘法函數(shù),示例代碼如下:defmultiply_numbers(a,b):returna*b說明:multiply_numbers是一個乘法函數(shù),它接受兩個參數(shù)a和b,然后使用“*”運算符計算這兩個數(shù)字的乘積,并返回結(jié)果。由于需要返回值,所以要使用return和返回值列表。函數(shù)也可以沒有返回值,沒有返回值的函數(shù),僅表示執(zhí)行了函數(shù)體部分的代碼功能。??例如,問候函數(shù),示例代碼如下:defmultiply_numbers(a,b):returna*b說明:該函數(shù)沒有返回值,僅在調(diào)用時執(zhí)行語句“print("Hello,{}!".format(name))”。當(dāng)一個函數(shù)被定義后,它僅僅只是一段存在于代碼中的靜態(tài)代碼塊。它不會自行執(zhí)行,也不會對程序產(chǎn)生任何影響。只有當(dāng)函數(shù)被調(diào)用時,它才會被激活,并執(zhí)行其中的代碼。調(diào)用函數(shù)可以理解為給函數(shù)發(fā)出一個執(zhí)行的命令,使其從靜態(tài)變?yōu)閯討B(tài)。??5.1.2函數(shù)的調(diào)用調(diào)用函數(shù)的基本語法格式如下:<函數(shù)名>(<實參列表>)例如,對乘法函數(shù)的完整調(diào)用過程,示例代碼如下:defmultiply_numbers(a,b):#乘法函數(shù)的定義
returna*bprint(multiply_numbers(3,5))#乘法函數(shù)的調(diào)用說明:一般而言實參列表必須與形參列表一一對應(yīng)??函數(shù)是從“print(multiply_numbers(3,5))”語句開始被調(diào)用,最后執(zhí)行完函數(shù)內(nèi)容后,也是回到了“print(multiply_numbers(3,5))”語句調(diào)用的位置;函數(shù)中有兩個形參a,b,調(diào)用函數(shù)的print()語句也有兩個實參3,5;完整的程序中,函數(shù)要先定義好才能被調(diào)用,所以通常情況下函數(shù)定義放在程序的開始部分,或者至少在函數(shù)調(diào)用之前。??5.1.3函數(shù)的返回值函數(shù)通過return語句來返回值,可以返回任何類型的值,包括整數(shù)、浮點數(shù)、字符串、列表、字典等,函數(shù)也可以返回多個值,實際上是通過返回一個元組來實現(xiàn)的。示例代碼如下:>>>defexap(x,y,z): returnx*y+z>>>s=exap(3,5,7)>>>print(s)22說明:理解函數(shù)如何通過return語句返回計算結(jié)果,并且這個返回值可以被賦值給其他變量或用于其他計算。??如何在Python中定義一個返回多個值的函數(shù),并如何調(diào)用這樣的函數(shù)來獲取這些返回值。函數(shù)可以返回元組,這個元組可以包含任意數(shù)量的元素,每個元素都是函數(shù)內(nèi)部計算的一個結(jié)果。>>>defexap(x,y,z): returnx*y+z,x+y+z,x*y%z>>>print(exap(3,5,7))(22,15,1)??return語句可以將結(jié)果返回給調(diào)用者,但只要return語句被執(zhí)行,函數(shù)的執(zhí)行將立即結(jié)束,無論是否有其余的代碼。示例代碼如下:defexample_func():print("Beforereturnstatement")return"Hello"print("Afterreturnstatement")#這行代碼將不會被執(zhí)行print(example_func())其運行結(jié)果為:BeforereturnstatementHello??如果函數(shù)中沒有return語句,或者return后面沒有跟任何值,那么該函數(shù)將返回None,示例代碼如下:defno_return():x=3print(no_return())其運行結(jié)果為:None??函數(shù)的返回值可以被賦值給一個變量,或者用于其他計算,初學(xué)者往往把在函數(shù)內(nèi)部使用print()函數(shù)進行輸出視為返回值,請務(wù)必區(qū)分清楚,返回值是需要明確使用return語句的。??5.1.4lambda函數(shù)在python中,有時候我們可能只需要一個簡單的函數(shù),只使用一次,并不需要給它起個名字。lambda函數(shù)的語法通常使用關(guān)鍵字"lambda"來表示。它后面緊跟著參數(shù)列表,然后是一個冒號和一個表達式,表示函數(shù)的返回值,其語法格式如下:<函數(shù)名>=lambda<參數(shù)>:<表達式>這種格式等價于:def<函數(shù)名>(<參數(shù)>):return<表達式>??lambda函數(shù)可以接受任意數(shù)量的參數(shù),但只能返回一個表達式的值。例如,計算兩個數(shù)的和。示例代碼如下:>>>f=lambdax,y:x+y>>>f(7,8)15說明:一般而言建議謹(jǐn)慎使用lambda函數(shù),lambda函數(shù)主要用作一些特定函數(shù)或方法的參數(shù),它有一些固定使用方式,建議逐步掌握。一般情況,建議初學(xué)者使用def定義的普通函數(shù)。??5.1.5pass語句pass語句在Python中表示一個空操作,即它不執(zhí)行任何實際的操作或產(chǎn)生任何效果。它只是一個占位符,用于在語法上需要一個語句,但實際上不需要執(zhí)行任何操作時使用。pass語句的語法非常簡單,只需要使用關(guān)鍵字pass即可。它沒有任何參數(shù)或額外的語法要求。示例代碼如下:defmy_function():pass說明:函數(shù)my_function()什么都不做,調(diào)用它不會有任何效果。??pass語句的主要作用是保持程序結(jié)構(gòu)的完整性。在編寫代碼時,有時我們可能需要定義一個函數(shù)或類的結(jié)構(gòu),但暫時還沒有實現(xiàn)具體的功能。這時,我們可以使用pass語句作為一個臨時的占位符,以確保程序的語法正確性。稍后,我們可以再來填充具體的實現(xiàn)代碼。需要注意的是,pass語句只是一個臨時的占位符,不應(yīng)該被用于實際的程序邏輯中。一旦程序的功能實現(xiàn)完成,應(yīng)該及時替換掉pass語句,以確保程序的完整性和可讀性。5.2函數(shù)的參數(shù)傳遞??函數(shù)的參數(shù)傳遞是函數(shù)中數(shù)據(jù)交互的核心機制之一,理解并掌握參數(shù)傳遞的概念,將使我們能夠編寫出更加準(zhǔn)確、高效且符合預(yù)期的代碼。函數(shù)的參數(shù)傳遞是通過形參和實參的交互實現(xiàn)的。??5.2.1形參和實參形式參數(shù),簡稱“形參”,是在定義函數(shù)時使用的,形式參數(shù)的命名只要符合“標(biāo)識符”命名規(guī)則即可。調(diào)用函數(shù)時傳遞的參數(shù)稱為“實際參數(shù)”,簡稱“實參”。當(dāng)函數(shù)定義和調(diào)用時,無論有沒有參數(shù),一對括號必須有。定義函數(shù)時不需要聲明形式參數(shù)類型,解釋器會根據(jù)實參的類型自動推斷形參類型。??例如,比較大小,找較大值。示例代碼如下:defprintMax(a,b):ifa>b:print(a,"較大值")else:print(b,"較大值")printMax(10,20)??在Python中,參數(shù)傳遞是通過對象引用來進行的,當(dāng)向函數(shù)傳遞參數(shù)時,實際上是傳遞了對象的引用。如果在函數(shù)內(nèi)部修改了對象的值,這個修改會對外部參數(shù)造成影響嗎?這需要分成兩種情況來討論。??當(dāng)傳遞一個列表或字典這樣的可變對象時,函數(shù)內(nèi)部對變量的修改會影響到函數(shù)外部的原始對象可變對象參數(shù)傳遞b=[10,20]print("b的初始引用為:",id(b))deff2(m):print("m的初始引用為:",id(m))m.append(30)print("m運算后的引用:",id(m))f2(b)#調(diào)用f2,實參為bprint("調(diào)用結(jié)束后b的引用為:",id(b))print("調(diào)用結(jié)束后b的值為:",b)print("調(diào)用結(jié)束后m的值為:",m)其運行結(jié)果為:b的初始引用為:2361275969416m的初始引用為:2361275969416m運算后的引用:2361275969416調(diào)用結(jié)束后b的引用為:2361275969416調(diào)用結(jié)束后b的值為:[10,20,30]Traceback(mostrecentcalllast):File"D:/可變對象.py",line10,in<module>print("調(diào)用結(jié)束后m的值為:",m)NameError:name'm'isnotdefined??對于不可變類型的參數(shù),如整數(shù)、浮點數(shù)和字符串,在函數(shù)內(nèi)部直接修改形參的值不會影響實參。不可變對象參數(shù)傳遞b=3print("b的初始引用為:",id(b))defadd1(a):print("a的初始引用為:",id(a))a+=1print("運算后a的引用為:",id(a))print("運算后a的值為:",a)add1(b)#調(diào)用add1()函數(shù),實參為bprint("調(diào)用結(jié)束后b的引用為:",id(b))print("調(diào)用結(jié)束后b的值為:",b)print("調(diào)用結(jié)束后a的值為:",a)其運行結(jié)果為:b的初始引用為:1985553168a的初始引用為:1985553168運算后a的引用為:1985553200運算后a的值為:4調(diào)用結(jié)束后b的引用為:1985553168調(diào)用結(jié)束后b的值為:3Traceback(mostrecentcalllast):File"D:/不可變對象.py",line11,in<module>print("調(diào)用結(jié)束后a的值為:",a)NameError:name'a'isnotdefined??python采用的是基于值的自動內(nèi)在管理模式,變量并不直接存儲值,而是存儲值的引用。從此角度而言,在python語言中,函數(shù)不存在傳值調(diào)用。??5.2.2位置參數(shù)傳遞在python中,位置參數(shù)傳遞是一種基本的傳遞方式。它要求當(dāng)函數(shù)被調(diào)用時,實參和形參的順序必須嚴(yán)格一致,并且實參和形參的數(shù)量必須相同。>>>defadd(a,b,c):#所有形參都是位置參數(shù)
print(a,b,c) returna+b+c>>>add(2,3,4)#調(diào)用add(),實參分別為2,3,42349>>>add(2,4,3)2439>>>add(1,2,3,4)#實參與形參數(shù)量不同,出錯Traceback(mostrecentcalllast):File"<pyshell#27>",line1,in<module>add(1,2,3,4)TypeError:add()takes3positionalargumentsbut4weregiven??5.2.3可選參數(shù)傳遞可選參數(shù)的傳遞是一種靈活且方便的函數(shù)調(diào)用機制。在調(diào)用函數(shù)時是否為默認(rèn)參數(shù)傳遞實參是可選的,具有較大的靈活性。可選參數(shù)是在函數(shù)定義的時候設(shè)定的,當(dāng)函數(shù)被調(diào)用時,如果沒有傳入對應(yīng)的參數(shù)值,就會使用函數(shù)定義時的可選參數(shù)的默認(rèn)值替代,函數(shù)定義時的語法格式如下:def<函數(shù)名>(<必選參數(shù)列表>,<可選參數(shù)>=<默認(rèn)值>):<函數(shù)體>return<返回值列表>??可選參數(shù)一般都放置在必選參數(shù)的后面,即定義函數(shù)時,先給出所有必選參數(shù),然后再分別列出每個可選參數(shù)及對應(yīng)的默認(rèn)值,否則會提示語法錯誤。>>>defgreet(name,prefix="Hello,"): print(prefix+name)>>>greet("Mike")Hello,Mike>>>greet("Jone",prefix="Hi,")Hi,Jone??5.2.4參數(shù)名稱傳遞參數(shù)名稱的傳遞通常指的是在函數(shù)調(diào)用時,通過指定參數(shù)的名稱來傳遞對應(yīng)的值,其語法格式如下:<函數(shù)名>(<參數(shù)名>=<實際值>)示例代碼如下:>>>defgreet(name,prefix="Hello,"): print(prefix+name)>>>greet(name="Mike")Hello,Mike>>>greet(prefix="Hi,",name="Mike")Hi,Mike??5.2.5可變長度參數(shù)的傳遞可變長度參數(shù)的傳遞指的是在函數(shù)調(diào)用時,可以傳遞不定數(shù)量的參數(shù)。Python提供了兩種形式*args和**kwargs,這兩種形式是在函數(shù)定義時使用的,使用這兩種形式就意味著允許函數(shù)接收不確定數(shù)量的實際參數(shù),并在函數(shù)體內(nèi)部訪問這些參數(shù)。??*args(一個星號):將多個參數(shù)收集到一個“元組”對象中。示例代碼如下:*args形式>>>defexap(*p): print(p)>>>exap(5,6,7)(5,6,7)>>>exap(5,6,7,8)(5,6,7,8)說明:在實際代碼中,*args是更常見的命名約定,但這里使用了*p,原理是一樣的。??**kwargs(兩個星號):將多個參數(shù)收集到一個“字典”對象中。示例代碼如下:**kwargs形式>>>defexap(**p): foriteminp.items(): print(item)>>>exap(x=5,y=6,z=7)('z',7)('x',5)('y',6)說明:示例中展示了如何調(diào)用exap函數(shù)并傳遞三個關(guān)鍵字參數(shù):x=5,y=6,z=7。函數(shù)接收這些參數(shù)并將它們作為字典項進行遍歷,然后打印出每一對鍵值對。需要注意的是,字典在Python中是無序的,所以打印出的順序可能與參數(shù)傳遞的順序不同。在實際代碼中,**kwargs是更常見的命名約定,但這里使用了**p,原理是一樣的。這種方式在處理用戶提供的配置選項、屬性設(shè)置等場景時非常有用。5.3函數(shù)的遞歸調(diào)用??在Python語言程序設(shè)計中,函數(shù)的遞歸調(diào)用是一種強大而靈活的編程技術(shù)。通過允許函數(shù)在其定義中調(diào)用自身,可以解決許多復(fù)雜的問題,并且可以以更加簡潔和直觀的方式表達某些算法。??5.3.1遞歸的定義遞歸指的是在函數(shù)的定義中,函數(shù)直接或間接地調(diào)用自身的過程。這種自我調(diào)用的機制使得函數(shù)能夠在處理問題的過程中逐步推進,直到滿足遞歸終止條件。遞歸調(diào)用通常涉及到一個或多個參數(shù)的變化,以便逐步接近終止條件,從而確保遞歸能夠在有限步驟內(nèi)停止。??在遞歸中,“基例”和“鏈條”是兩個重要的概念?;˙aseCase):基例是一個或多個不需要再次遞歸的情況或條件,也稱為遞歸終止條件。它是遞歸函數(shù)中最簡單或最小規(guī)模的實例,可以直接求解而無需進一步遞歸?;拇嬖诖_保了遞歸調(diào)用不會無限循環(huán),當(dāng)遞歸調(diào)用到達基例時,遞歸將停止并返回結(jié)果。??鏈條(RecursiveChain):鏈條指的是遞歸調(diào)用中的一系列函數(shù)調(diào)用。在遞歸函數(shù)中,當(dāng)一個函數(shù)調(diào)用自身時,就形成了一個遞歸鏈條。每個遞歸調(diào)用都會創(chuàng)建一個新的函數(shù)實例,并在堆棧中保存當(dāng)前函數(shù)的狀態(tài)。當(dāng)遞歸調(diào)用到達基例時,遞歸鏈條開始逐步返回結(jié)果,直到最終得到原始問題的解。??在設(shè)計和實現(xiàn)遞歸函數(shù)時,需要仔細考慮基例和鏈條的定義和處理。確?;軌蛘_終止遞歸,并避免無限循環(huán)或棧溢出等問題。同時,也需要注意遞歸鏈條的效率和性能,避免過多的遞歸調(diào)用導(dǎo)致性能下降。??5.3.2遞歸的使用遞歸的實現(xiàn)和使用涉及以下幾個步驟:1.定義遞歸函數(shù):基例和遞歸規(guī)則。2.確定輸入?yún)?shù)3.實現(xiàn)基例4.實現(xiàn)遞歸規(guī)則5.合并子問題的解??下面是一個使用Python實現(xiàn)遞歸的示例,計算一個數(shù)的階乘。示例代碼如下:deffactorial(n):#基例
ifn==0:return1#遞歸規(guī)則
else:returnn*factorial(n-1)說明:遞歸的工作方式是先一直深入到最底層的基例,然后逐層返回,每個返回層都會根據(jù)遞歸規(guī)則進行計算。??使用遞歸時需要注意以下幾點:(1)確?;龡l件的正確性:基例條件應(yīng)該能夠正確終止遞歸,并返回正確的解。否則,遞歸可能無限循環(huán)或無法得出正確的結(jié)果。(2)注意遞歸深度:遞歸調(diào)用會創(chuàng)建函數(shù)實例并在堆棧中保存狀態(tài),如果遞歸深度過大,可能導(dǎo)致棧溢出或性能下降。因此,在設(shè)計遞歸算法時需要注意控制遞歸的深度和復(fù)雜度。??5.3.3遞歸的舉例例5-1求斐波那契數(shù)列第n項的值,n由用戶輸入:程序分析:用戶輸入n,輸出為斐波那契數(shù)列第n項的值,斐波那契數(shù)列是一個常見的遞歸問題,它的定義如下:F(1)=0,F(xiàn)(2)=1,F(xiàn)(n)=F(n-1)+F(n-2)(n>=2)。以下是使用遞歸計算斐波那契數(shù)列的Python代碼:deffibonacci(n):ifn<=0:return"輸入錯誤!n必須為正整數(shù)。"elifn==1:return0elifn==2:return1else:returnfibonacci(n-1)+fibonacci(n-2)
n=int(input("請輸入n的值(n為正整數(shù)):"))print("斐波那契數(shù)列第{}項為:{}".format(n,fibonacci(n)))??例5-2字符串處理:字符串的全排列程序分析:全排列是將一個字符串的所有字符重新排列,得到所有可能的排列組合。通過遞歸調(diào)用,我們可以實現(xiàn)字符串的全排列。右邊是一個使用遞歸實現(xiàn)字符串全排列的示例代碼:defpermute(s,l,r):ifl==r:print(''.join(s))else:foriinrange(l,r+1):s[l],s[i]=s[i],s[l]#交換字符
permute(s,l+1,r)#遞歸調(diào)用,處理剩余部分的排列
s[l],s[i]=s[i],s[l]#回溯,撤銷交換
#測試全排列函數(shù)string="ABC"n=len(string)s=list(string)permute(s,0,n-1)5.4變量的作用域??變量的作用域是指變量在代碼中的有效范圍或可見性。它定義了變量在何處可以被訪問和操作。根據(jù)程序中變量所在的位置和作用范圍,變量分為局部變量和全局變量。局部變量作用域在函數(shù)內(nèi)部,全局變量的作用域可以跨越多個函數(shù)。??5.4.1局部變量局部變量指在函數(shù)內(nèi)部定義的變量,僅在函數(shù)內(nèi)部有效,當(dāng)函數(shù)退出時變量將不再存在。示例代碼如下:defmy_function():x=1010#局部變量
print(x)print(my_function())print(x)#引發(fā)錯誤,因為x作用范圍已結(jié)束其運行結(jié)果如下:1010NoneTraceback(mostrecentcalllast):File"/局部變量.py",line5,in<module>print(x)NameError:name'x'isnotdefined??5.4.2全局變量全局變量指在函數(shù)外部定義的變量。不管是局部變量還是全局變量,其作用域都是從定義的位置開始的,在此之前無法訪問。全局變量在函數(shù)內(nèi)部使用時,需要提前使用保留字global聲明,否則會自動創(chuàng)建新的局部變量。其語法格式如下:global<全局變量>??示例代碼如下:>>>defexap(): globalx#創(chuàng)建全局變量x x=3 y=4 print(x,y) >>>x=5#在函數(shù)外部定義了全局變量x>>>x5>>>exap()#調(diào)用函數(shù),此次調(diào)用給全局變量x重新賦值為334>>>x#x是全局變量,最后賦值為3,所以值為33>>>y#y是函數(shù)內(nèi)的局部變量,已不存在。Traceback(mostrecentcalllast):File"<pyshell#66>",line1,in<module>yNameError:name'y'isnotdefined??如果全局變量與局部變量具有相同的名字,那么局部變量會在自己的作用域內(nèi)覆蓋同名的全局變量。示例代碼如下:>>>defexap(): x=10#此處為局部變量x print(x)>>>x=8#此處為全局變量x>>>x8>>>exap()#調(diào)用函數(shù)后,輸出的是局部變量x的值10>>>x#函數(shù)調(diào)用結(jié)束后,不影響全局變量x的值85.5精彩案例??例5-3編寫程序,輸入任意的兩個整數(shù),求其最大公約數(shù)和最小公倍數(shù),其中要求求最大公約數(shù)和最小公倍數(shù)用函數(shù)完成,且返回值為一個元組,元組中第一個元素為最大公約數(shù),第二個元素為最小公倍數(shù)。程序分析:求最大公約數(shù)一般用歐幾里德輾轉(zhuǎn)相除法。具體做法是:用較大數(shù)除以較小數(shù),再用出現(xiàn)的余數(shù)去除除數(shù),如此反復(fù),直到最后余數(shù)為0。最后的除數(shù)就是這兩個數(shù)的最大公約數(shù),求得了最大公約數(shù),最小公倍數(shù)為兩數(shù)之積除以最大公約數(shù)。??defgcd_lcm(a,b):p=a*bwhilea%b!=0:a,b=b,a%breturn(b,p//b)x=eval(input("請輸入第一個正整數(shù):"))y=eval(input("請輸入第二個正整數(shù):"))m,n=gcd_lcm(x,y)print("{}和{}的最大公約數(shù)為:{},最小公倍數(shù)為:{}".format(x,y,m,n))說明:求最大公約數(shù)的函數(shù),在標(biāo)準(zhǔn)庫math和fractions中都有提供,其函數(shù)名為gcd(),所以其實也可以直接使用。可以試著改寫以上程序??defgcd_lcm(a,b):importmathc=math.gcd(a,b)return(c,(a*b)//c)x=eval(input("請輸入第一個正整數(shù):"))y=eval(input("請輸入第二個正整數(shù):"))m,n=gcd_lcm(x,y)print("{}和{}的最大公約數(shù)為:{},最小公倍數(shù)為:{}".format(x,y,m,n))??例5-4做一個有動態(tài)效果的生日賀卡,如圖所示:程序分析:此賀卡的動態(tài)效果可以用turtle庫的繪制過程顯現(xiàn)出來,圖形分別是三邊形、四邊形、五邊形、六邊形、七邊形??梢詫⒗L制n邊形設(shè)計成為一個函數(shù)draw_polygon(n),函數(shù)的參數(shù)為n,如果參數(shù)為3,則繪制三角形,參數(shù)為4,則繪制四邊形。填充色隨機出現(xiàn),所以要用到random庫。??defdraw_polygon(n):t.pd()t.begin_fill()t.color((r.random(),r.random(),r.random()))t.circle(40,steps=n)t.end_fill()t.up()t.fd(-200)foriinrange(3,8):draw_polygon(i)t.up()t.fd(100)t.goto(-50,-80)t.color("green")t.pd()t.write("生日快樂",font=("宋體",18,"bold"))t.hideturtle()t.done()??例5-5編程實現(xiàn)隨機地出10道四則運算題,限時1分鐘內(nèi)答題,并給出分?jǐn)?shù)和答案。程序分析:首先我們需要產(chǎn)生隨機的10道題目,因此可以設(shè)計一個隨機生成10道題目的函數(shù),很顯然需要用到隨機函數(shù)庫random。當(dāng)題目出給用戶后,我們需要與用戶進行交互,獲取用戶的輸入,并判斷用戶輸入的答案正確與否,也需要將此部分設(shè)計為一個函數(shù)。接下來,我們需要統(tǒng)計用戶10道題目完成后的分?jǐn)?shù),將此部分也設(shè)計為一個函數(shù)。最后主程序部分主要完成時間的統(tǒng)計,因此需要用到time庫。??importrandomimporttime
defrandom_int(start,end):#生成隨機整數(shù)
returnrandom.randint(start,end)
defrandom_operator():#生成隨機運算符
returnrandom.choice(['+','-','*','/'])
defgenerate_question():#生成四則運算題目
a=random_int(1,20)b=random_int(1,20)operator=random_operator()ifoperator=='+':question="{}{}{}=".format(a,operator,b)answer=a+belifoperator=='-':question="{}{}{}=".format(a,operator,b)answer=a-belifoperator=='*':
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第2.6講 指數(shù)與指數(shù)函數(shù)(解析版)-2024年高考數(shù)學(xué)一輪復(fù)習(xí)精講精練寶典(新高考專用)
- 浙教版2023小學(xué)信息技術(shù)六年級上冊《算法的多樣性》教學(xué)設(shè)計及反思
- (一模)萍鄉(xiāng)市2025年高三第一次模擬考試歷史試卷(含答案解析)
- 2025年B2B營銷業(yè)務(wù) AI提示詞手冊
- 陶瓷攔水帶施工方案
- 高樓地鐵隧道施工方案
- 砂漿基礎(chǔ)知識培訓(xùn)課件
- 2025年山東聊城高三一模高考數(shù)學(xué)試卷試題(含答案詳解)
- 2025年藥具科技工作培訓(xùn)標(biāo)準(zhǔn)教案
- 寫贈予房產(chǎn)合同范例
- 2024-2025學(xué)年第二學(xué)期天域全國名校協(xié)作體高三3月聯(lián)考 地理試卷(含答案)
- 修理木橋施工合同范本
- 學(xué)校2025年每日兩小時體育活動方案-陽光體育活力四溢
- 錘擊式PHC預(yù)應(yīng)力混凝土管樁貫入度的控制
- 新教科版一年級科學(xué)下冊第一單元第6課《哪個流動得快》課件
- 屋面種植土垂直施工方案
- 2025年新人教PEP版英語三年級下冊全冊課時練習(xí)
- 《愛耳日課件》課件
- 2024年安徽中醫(yī)藥高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2025年保密工作計劃(3篇)
評論
0/150
提交評論