《Python程序設(shè)計(jì)案例教程》 課件 單元5 函數(shù)_第1頁
《Python程序設(shè)計(jì)案例教程》 課件 單元5 函數(shù)_第2頁
《Python程序設(shè)計(jì)案例教程》 課件 單元5 函數(shù)_第3頁
《Python程序設(shè)計(jì)案例教程》 課件 單元5 函數(shù)_第4頁
《Python程序設(shè)計(jì)案例教程》 課件 單元5 函數(shù)_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Python編程基礎(chǔ)函數(shù)的定義與調(diào)用一、函數(shù)的定義二、函數(shù)的調(diào)用引入4

合作共贏作為構(gòu)建人類命運(yùn)共同體的前提、核心和目的,有分工就有合作的需要,有合作才能有分工者之間的共贏。

在Python中,函數(shù)的重要作用就是實(shí)現(xiàn)分工合作的模塊化程序設(shè)計(jì)。

Python中函數(shù)的應(yīng)用非常廣泛,除了可以直接使用的內(nèi)置函數(shù)外,Python還支持自定義函數(shù),即將一段有規(guī)律的、可重復(fù)使用的代碼定義成函數(shù),從而達(dá)到一次編寫、多次調(diào)用的目的。一、函數(shù)的定義5函數(shù)定義語法:def函數(shù)名([形式參數(shù)列表]):函數(shù)體其中,函數(shù)定義以關(guān)鍵字def開始,隨后是函數(shù)的名(例如print),函數(shù)名可以是任何合法的Python標(biāo)識(shí)符;[]表示可選內(nèi)容,如果函數(shù)需要一些輸入信息,我們可以在括號(hào)內(nèi)指定這些參數(shù),參數(shù)可以是零個(gè)、一個(gè)或多個(gè),當(dāng)有多個(gè)參數(shù)時(shí),各參數(shù)之間使用逗號(hào)隔開;函數(shù)定義以冒號(hào)(:)結(jié)束。函數(shù)定義之后的所有縮進(jìn)代碼都屬于函數(shù)體。一、函數(shù)的定義6【例】定義一個(gè)名為hello()的問候函數(shù),該函數(shù)的功能是輸出“Hello”字符串。#定義一個(gè)問候函數(shù)defhello():print('Hello')7二、函數(shù)調(diào)用函數(shù)調(diào)用的一般形式如下所示。函數(shù)名([實(shí)際參數(shù)列表])其中,函數(shù)名即指的是要調(diào)用的函數(shù)的名稱;實(shí)際參數(shù)列表指的是當(dāng)初創(chuàng)建函數(shù)時(shí)要求傳入的各個(gè)形式參數(shù)的值。8二、函數(shù)調(diào)用【例】編寫求和函數(shù)(求1~100的和),然后調(diào)用函數(shù)輸出求和結(jié)果。defsum():#定義函數(shù)#函數(shù)體,求1~100的和s=0i=1whilei<=100:s=s+ii+=1print("sum=%d"%(s))sum()#調(diào)用函數(shù)輸出結(jié)果【運(yùn)行結(jié)果】sum=5050感謝您的觀看Python編程基礎(chǔ)函數(shù)的參數(shù)一、形參和實(shí)參二、默認(rèn)值參數(shù)三、可變參數(shù)形式參數(shù)又稱形參,是函數(shù)所需的輸入信息,我們?cè)诤瘮?shù)定義時(shí)指定形參。【例】定義一個(gè)問候函數(shù),該函數(shù)的功能是基于用戶名輸出不同的問候信息。defhello(name):

print('Hello%s'%(name))13一、形參和實(shí)參一、形參和實(shí)參實(shí)際參數(shù)又稱實(shí)參,是我們調(diào)用函數(shù)時(shí)傳遞的數(shù)據(jù)。當(dāng)我們調(diào)用具有參數(shù)的函數(shù)時(shí),需要傳遞相應(yīng)的數(shù)據(jù),例如:defhello(name):

print('Hello%s'%(name))hello('Python')【運(yùn)行結(jié)果】HelloPython一、形參和實(shí)參函數(shù)的參數(shù)傳遞是指將實(shí)際參數(shù)傳遞給形式參數(shù)的過程,即函數(shù)在被調(diào)用時(shí),向其傳遞實(shí)參,將實(shí)參引用傳遞給形參。如果函數(shù)有多個(gè)形參,則需要使用逗號(hào)進(jìn)行分隔,當(dāng)函數(shù)在被調(diào)用時(shí)會(huì)將實(shí)參按照相應(yīng)的位置依次傳遞給形參,也就是說將第一個(gè)實(shí)參傳遞給第一個(gè)形參,將第二個(gè)實(shí)參傳遞給第二個(gè)形參,以此類推?!纠烤帉懞瘮?shù),接受兩個(gè)整數(shù),并輸出其中最大數(shù)。defprintMax(a,b):#定義函數(shù)printMax(a,b)ifa>b:print(a,'isthemax')else:print(b,'isthemax')printMax(8,5)#調(diào)用函數(shù)printMax(a,b)【運(yùn)行結(jié)果】8isthemax16一、形參和實(shí)參二、默認(rèn)值參數(shù)定義函數(shù)時(shí),可以為函數(shù)的參數(shù)設(shè)置默認(rèn)值,這個(gè)參數(shù)被稱為默認(rèn)值參數(shù)。帶有默認(rèn)值參數(shù)的函數(shù)定義語法如下所示。def函數(shù)名(…,形參名=默認(rèn)值):函數(shù)體【例】在函數(shù)定義中使用默認(rèn)值參數(shù)。defnew_member(name,student_id,grade="大一"):#定義函數(shù)中使用默認(rèn)值參數(shù)print("姓名",name)print("學(xué)號(hào)",student_id)print("年級(jí)",grade)print("---------------------------")return#調(diào)用函數(shù)new_member("張三","0001")new_member("李四","0002","大二")18二、默認(rèn)值參數(shù)【運(yùn)行結(jié)果】姓名

張三學(xué)號(hào)0001年級(jí)

大一---------------------------姓名

李四學(xué)號(hào)0002年級(jí)

大二---------------------------默認(rèn)值參數(shù)必須出現(xiàn)在函數(shù)參數(shù)列表的最右端,任何一個(gè)默認(rèn)值參數(shù)右邊不能有非默認(rèn)值參數(shù)。19二、默認(rèn)值參數(shù)基本語法格式如下所示。def函數(shù)名([形參列表,]*a,**a):

函數(shù)體*a用來接收任意多個(gè)實(shí)參并將其放在一個(gè)元組中。**a是用來接收多個(gè)“鍵-值”對(duì)實(shí)參并將其放在字典中。20三、可變參數(shù)【例】使用可變參數(shù)*a。>>>defdemo1(*a):print(a)>>>demo1('大一','大二','大三')('大一','大二','大三')三、可變參數(shù)【例】使用不定長參數(shù)**a。>>>defdemo2(**a):foriteminkwargs.items():print(item)>>>demo2(張三='大一',李四='大二',王五='大三')('張三','大一')('李四','大二')('王五','大三')三、可變參數(shù)感謝您的觀看Python編程基礎(chǔ)return語句函數(shù)并非總是直接輸出數(shù)據(jù),它還可以處理一些數(shù)據(jù),并返回一個(gè)或一組值。函數(shù)返回的值被稱為返回值。26引入Python中,用def語句創(chuàng)建函數(shù)時(shí),可以用return語句指定應(yīng)該返回的值,該返回值可以是任意類型。調(diào)用函數(shù)的一方,可以使用變量來接收函數(shù)的返回結(jié)果。函數(shù)中,使用return語句的語法格式如下:

return[返回值]其中,返回值參數(shù)可以指定,也可以省略不寫(將返回空值None)。27return語句return語句【例】定義循環(huán)求和函數(shù),要求把求和結(jié)果返回。defsum(num1,num2):s=0whilenum1<=num2:s=s+num1num1+=1returns#使用return語句把求和結(jié)果返回s2=sum(1,100)#函數(shù)賦值給變量print("sum=%d"%(s2))print(sum(1,100))#函數(shù)返回值作為其他函數(shù)的實(shí)際參數(shù)執(zhí)行程序,運(yùn)行結(jié)果如下所示。sum=50505050return語句特別強(qiáng)調(diào):以下情況Python將認(rèn)為該函數(shù)以returnNone結(jié)束。-函數(shù)沒有return語句-函數(shù)有return語句但是沒有執(zhí)行到-只有return關(guān)鍵字而沒有返回值【例】定義求商函數(shù),使用return語句根據(jù)條件判斷有選擇性地返回。30return語句【運(yùn)行結(jié)果】感謝您的觀看Python編程基礎(chǔ)函數(shù)的嵌套和遞歸一、函數(shù)的嵌套二、遞歸函數(shù)函數(shù)在定義時(shí)還可以在其內(nèi)部嵌套定義另外一個(gè)函數(shù),此時(shí)嵌套的函數(shù)稱為外層函數(shù),被嵌套的函數(shù)稱為內(nèi)層函數(shù)。【例】在outer()函數(shù)中嵌套定義inner()函數(shù)。defouter(a,b):#定義外層函數(shù)outer()result=a+bprint("我是外層函數(shù)")print(result)

definner():#定義內(nèi)層函數(shù)inner()print("我是內(nèi)層函數(shù)")inner()#outer()函數(shù)外調(diào)用inner()函數(shù)一、函數(shù)的嵌套注意:inner()函數(shù)只在定義開始到outer()函數(shù)結(jié)束范圍內(nèi)有效Python還允許在一個(gè)函數(shù)中調(diào)用另外一個(gè)函數(shù),這就是函數(shù)的嵌套調(diào)用?!纠亢瘮?shù)的嵌套調(diào)用。defouter(a,b):#定義外層函數(shù)outer()result=a+bprint("我是外層函數(shù)")print(result)definner():#定義內(nèi)層函數(shù)inner()print("我是內(nèi)層函數(shù)")inner()#調(diào)用函數(shù)inner()outer(1,2)一、函數(shù)的嵌套執(zhí)行程序,運(yùn)行結(jié)果如下所示。我是外層函數(shù)3我是內(nèi)層函數(shù)函數(shù)在定義時(shí)可以直接或間接地調(diào)用其他函數(shù)。若函數(shù)直接或間接地調(diào)用自身,則這個(gè)函數(shù)被稱為遞歸函數(shù),Python支持函數(shù)的遞歸調(diào)用。直接遞歸調(diào)用間接遞歸調(diào)用

提示這兩種遞歸調(diào)用都是無休止地調(diào)用自身。因此,為了防止無限遞歸,所有遞歸函數(shù)都需要設(shè)定終止條件。二、遞歸函數(shù)二、遞歸函數(shù)遞歸函數(shù)的一般定義格式如下:

def

函數(shù)名([參數(shù)列表]):

if邊界條件:

rerun結(jié)果 else:

return遞歸公式【例】用遞歸函數(shù)求解n!(n為整數(shù))。deffunc(num):ifnum==0:return1else:returnnum*func(num-1)num=int(input("請(qǐng)輸入一個(gè)整數(shù):"))result=func(num)print(f"{num}!=%d"%result)程序運(yùn)行效果二、遞歸函數(shù)n!=1*2*3*…*n,可以分為以下兩種情況:1.當(dāng)n=0時(shí),所得的結(jié)果為1。

邊界條件2.當(dāng)n>0時(shí),所得的結(jié)果為n*(n-1)!。

遞歸公式階乘n!deffunc(4):ifnum==0:return1else:return4*func(3)deffunc(3):ifnum==0:return1else:return3*func(2)deffunc(2):ifnum==0:return1else:return2*func(1)deffunc(1):ifnum==0:return1else:return1*func(0)deffunc(0):ifnum==0:return111264!=24二、遞歸函數(shù)通常使用遞歸函數(shù)解決結(jié)構(gòu)相似的問題,它可以采用遞歸的方式,將一個(gè)復(fù)雜的大型問題轉(zhuǎn)化為與原問題結(jié)構(gòu)相似的、規(guī)模較小的若干個(gè)子問題,之后再對(duì)最小化的子問題求解,從而得到原問題的解。感謝您的觀看Python編程基礎(chǔ)變量的作用域一、局部變量二、全局變量三、global關(guān)鍵字當(dāng)一個(gè)程序中包含多個(gè)函數(shù)時(shí),可在各函數(shù)中分別定義變量。變量并非在程序的任意位置都可以被訪問,其訪問權(quán)限取決于變量定義的位置,其所處的有效范圍稱為變量的作用域。一個(gè)變量在函數(shù)外部定義和在函數(shù)內(nèi)部定義,其作用域是不同的。根據(jù)變量作用域的不同,可將變量分為局部變量(LocalVariable)和全局變量(GlobalVariable)兩種類型。46引入局部變量是指在函數(shù)內(nèi)部定義的變量,它的作用域僅限于函數(shù)內(nèi)部,出了函數(shù)就不能使用。【例】局部變量的使用。deftest_one():number=10 #局部變量print(number) #函數(shù)內(nèi)部訪問局部變量test_one()print(number) #函數(shù)外部訪問局部變量【運(yùn)行結(jié)果】10

Traceback(mostrecentcalllast):

File"D:/PycharmProjects/untitled/1.py",line5,in<module>

print(number) #函數(shù)外部訪問局部變量

NameError:name'number'isnotdefined47一、局部變量二、全局變量除了在函數(shù)內(nèi)部定義變量,Python還允許在所有函數(shù)的外部定義變量,這樣的變量稱為全局變量。和局部變量不同,全局變量的默認(rèn)作用域是整個(gè)程序,即全局變量既可以在各個(gè)函數(shù)的外部使用,也可以在各函數(shù)內(nèi)部使用。二、全局變量【例】全局變量的使用。number=10 #全局變量deftest_one():print(number) #函數(shù)內(nèi)部訪問全局變量test_one()print(number) #函數(shù)外部訪問全局變量【運(yùn)行結(jié)果】1010三、global關(guān)鍵字如果想要在函數(shù)內(nèi)部給一個(gè)定義在函數(shù)外的變量賦值,那么這個(gè)變量就不能是局部的,她的作用域必須是全局的,這時(shí),就可以通過global關(guān)鍵字來聲明這個(gè)變量為全局變量。使用global關(guān)鍵字可分為以下兩種情況。

情況一:一個(gè)變量已經(jīng)在函數(shù)外定義,如果在函數(shù)內(nèi)需要為這個(gè)變量賦值,并要將這個(gè)賦值結(jié)果反映到函數(shù)外,可以在函數(shù)內(nèi)用global聲明這個(gè)變量,將其聲明為全局變量。情況二:在函數(shù)內(nèi)部直接將一個(gè)變量聲明為全局變量,即便在函數(shù)外沒有聲明該變量,但是當(dāng)函數(shù)執(zhí)行后,被global修飾的變量仍將增加為新的全局變量。三、global關(guān)鍵字【例】用global關(guān)鍵字聲明變量為全局變量。>>>defdemo():globalx#使用global聲明變量x為全局變量x=3y=4print(x,y)>>>x=5#函數(shù)外定義全局變量x值為5>>>demo()#調(diào)用demo()函數(shù)34>>>x#函數(shù)外訪問x變量3>>>y#函數(shù)外訪問y變量Traceback(mostrecentcalllast):File"<input>",line1,in<module>NameError:name'y'isnotdefined感謝您的觀看Python編程基礎(chǔ)匿名函數(shù)匿名函數(shù)Python有一種特殊的函數(shù)叫“匿名函數(shù)”,它其實(shí)是沒有使用def語句定義函數(shù)的標(biāo)準(zhǔn)方式,而是用lambda關(guān)鍵字的方式來簡略定義的函數(shù)。匿名函數(shù)沒有函數(shù)名,而是將函數(shù)名作為函數(shù)結(jié)果進(jìn)行返回。55匿名函數(shù)匿名函數(shù)定義如下所示。函數(shù)名=lambda[參數(shù)列表]:表達(dá)式其中,表達(dá)式表示函數(shù)要進(jìn)行的操作?!纠磕涿瘮?shù)的定義和使用>>>f=lambdaa,b:a+b>>>f(1,2)3匿名函數(shù)常用在臨時(shí)需要一個(gè)類似于函數(shù)的功能,但又不想定義函數(shù)的場(chǎng)合。56匿名函數(shù)【例】給定多位學(xué)生信息(包括學(xué)號(hào)、姓名和成績),按成績排序后輸出。stu=[{'num':'202201','name':'張三','score':89},{'num':'202202','name':'李四','score':95},{'num':'202203','name':'王五','score':85}] #定義學(xué)生信息stu.sort(key=lambdax:x['score']) #按成績排序forsinstu:print('學(xué)號(hào):',s['num'],'姓名:',s['name'],'成績:',s['score']) #輸出列表【運(yùn)行結(jié)果】學(xué)號(hào):202203姓名:王五成績:85學(xué)號(hào):202201姓名:張三成績:89學(xué)號(hào):202202姓名:李四成績:9557匿名函數(shù)具有以下特點(diǎn):1)lambda表達(dá)式中只包含一個(gè)表達(dá)式,函數(shù)體比def簡單很多,代碼更加簡潔;2)lambda表達(dá)式的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去;3)匿名函數(shù)擁有自己的命名空間,且不能訪問自己參數(shù)列表之外或全局命名空間里的參數(shù)。匿名函數(shù)感謝您的觀看Python編程基礎(chǔ)模塊一、模塊的定義和分類二、模塊的導(dǎo)入和使用63一個(gè).py?件就可以稱之為一個(gè)模塊,模塊用來歸置類、函數(shù)、變量和可執(zhí)行代碼,將功能類似的類或者函數(shù)放到同一模塊,使代碼結(jié)構(gòu)更加清晰。一、模塊的定義和分類64模塊可以分為三類:(1)內(nèi)置標(biāo)準(zhǔn)模塊(?稱標(biāo)準(zhǔn)庫):Python解釋器自帶,可以執(zhí)?help(‘modules’)查看所有Python?帶模塊列表。(2)第三?模塊(又稱第三方庫):開源模塊,可通過“pipinstall模塊名”聯(lián)網(wǎng)安裝,手動(dòng)安裝之后才可使用。(3)自定義模塊:用戶自己自行編寫的尾綴.py的文件。為了更好地組織模塊,通常會(huì)把多個(gè)模塊放在一個(gè)包中。一、模塊的定義和分類65導(dǎo)入模塊的方式:(1)import模塊名(2)from模塊名import功能名(3)from模塊名import*(4)import模塊名as別名(5)from模塊名import功能名as別名二、模塊的導(dǎo)入與使用66在Python中用關(guān)鍵字import來引入某個(gè)模塊。語法結(jié)構(gòu)如下所示。import模塊名1,模塊名2,...使用模塊里的函數(shù)時(shí),語法結(jié)構(gòu)如下所示。模塊名.函數(shù)名()#使用模塊里的函數(shù)【例】使用import導(dǎo)入模塊。importdatetimex=datetime.datetime.now()print(x)【運(yùn)行結(jié)果】2022-10-2714:30:12.2171521.import導(dǎo)入67from…import語句允許編寫人員只導(dǎo)入模塊的一部分。語法結(jié)構(gòu)如下所示。from模塊名import函數(shù)名(變量名)1,函數(shù)名(變量名)2....【例】使用from…import語句導(dǎo)入模塊。fromtimeimportgmtimeifgmtime().tm_year==2022:foriinrange(1,13):print(str(gmtime().tm_year)+'年'+str(i)+'月')2.from…import語句68把一個(gè)模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間時(shí),還可以使用from…import*語句,語法結(jié)構(gòu)如下所示。from模塊名import*3.from…import*

語句注意:“from模塊名import*”語句與“import模塊名”都能導(dǎo)入指定模塊的全部內(nèi)容,但是相比之下,“import模塊名”導(dǎo)入方式使用更加方便,因此在程序開發(fā)中更推薦使用“import模塊名”的方式導(dǎo)入指定模塊全部內(nèi)容。69Python支持導(dǎo)入模塊時(shí)為模塊設(shè)置別名,語法結(jié)構(gòu)如下所示。import模塊名as別名

from模塊名import功能名as別名4.as別名【例】使用as關(guān)鍵字設(shè)置別名。>>>importtimeastt#導(dǎo)入模塊時(shí)設(shè)置別名為tttime.sleep(1)>>>NameErrorTraceback(mostrecentcalllast)<ipython-input-2-07a34f5b1e42>in<module>()---->1time.sleep(1)NameError:name'time'isnotdefined>>>tt.sleep(1)#使用別名才能調(diào)用方法>>>fromtimeimportsleepassp#導(dǎo)入方法時(shí)設(shè)置別名sleep(1)>>>NameErrorTraceback(mostrecentcalllast)<ipython-input-5-82e5c2913b44>in<module>()---->1sleep(1)NameError:name'sleep'isnotdefined>>>sp(1)#使用別名才能調(diào)用方法感謝您的觀看Python編程基礎(chǔ)任務(wù)1設(shè)計(jì)飲品自動(dòng)售貨機(jī)程序隨著無人新零售經(jīng)濟(jì)的崛起,商場(chǎng)、車站、大廈等各種場(chǎng)所都引入了無人飲品自動(dòng)售貨機(jī),方便人們選購自己想要的飲品。購買者選擇想要的飲品,通過投幣或掃碼的方式支付,支付成功后從出貨口取出飲品。本任務(wù)將帶領(lǐng)大家編寫Python程序,利用函數(shù)設(shè)計(jì)具有顯示飲品信息、計(jì)算總額等功能的飲品自動(dòng)售貨機(jī)程序。73任務(wù)描述功能需求1.展示商品信息("可口可樂":2.5元,"百事可樂":2.5元,"冰紅茶":3元,"脈動(dòng)":3.5元,"果繽紛":3元,"綠茶":3元,"茉莉花茶":3元,"尖叫":2.5元);2.提示用戶輸入購買的商品和數(shù)量;3.計(jì)算需要支付的總金額。74任務(wù)實(shí)施完成本任務(wù),我們需要定義函數(shù)分別實(shí)現(xiàn)相關(guān)功能。1.定義函數(shù)all_goods(),利用字典結(jié)構(gòu)存儲(chǔ)飲品信息,使用return語句把飲品信息返回。75任務(wù)實(shí)施2.定義函數(shù)show_goods()用來顯示飲品信息。76任務(wù)實(shí)施3.定義函數(shù)total()用來計(jì)算需要支付的總金額。77任務(wù)實(shí)施4.定義一個(gè)控制飲品自動(dòng)售貨機(jī)操作流程的函數(shù)main()。78任務(wù)實(shí)施感謝您的觀看Python編程基礎(chǔ)任務(wù)2

求解漢諾塔問題

漢諾塔游戲是一款風(fēng)靡全球的益智游戲,它讓玩家們可以通過完成各種不同的挑戰(zhàn),來鍛煉自己的思維能力和解決問題的能力。該游戲是指在一座漢諾塔內(nèi),有三根柱子,編號(hào)A、B、C,柱子A自下而上、由大到小按順序放置有64個(gè)盤子。游戲的目標(biāo):把A柱子上的盤子全部移到C柱子上,并保持原有順序疊好全盤。每次只能移動(dòng)一個(gè)盤子,并且在移動(dòng)過程中三根柱子上都始終保持大盤在下、小盤在上的狀態(tài)。82任務(wù)描述本任務(wù)將帶領(lǐng)大家編寫Python程序,使用遞歸函數(shù)求解漢諾塔問題。此任務(wù)用遞歸函數(shù)求解漢諾塔問題時(shí),可以先將漢諾塔游戲抽象為數(shù)學(xué)問題。假設(shè)移動(dòng)盤子數(shù)為N。此時(shí)可分為三個(gè)子步驟來完成。步驟一:以C柱子為中介,從A柱子將1至N-1號(hào)盤子移至B柱子。步驟二:將A柱子中剩下的第N號(hào)盤子移至C柱子。步驟三:以A柱子為中介,從B柱子將1至N-I號(hào)盤子移至C柱子。83任務(wù)實(shí)施本任務(wù)可設(shè)計(jì)遞歸函數(shù)hanoi(n,a,b,c)其中n、a、b和c分別表示盤子數(shù)、源柱、中介柱和目標(biāo)柱。當(dāng)函數(shù)調(diào)用一次,盤子數(shù)減1,當(dāng)盤子數(shù)減至1時(shí),遞歸結(jié)束。84任務(wù)實(shí)施本任務(wù)可設(shè)計(jì)遞歸函數(shù)hanoi(n,a,b,c)(其中n、a、b和c分別表示盤子數(shù)、源柱、中介柱和目標(biāo)柱。)如果n為1,則將這一個(gè)盤子從a柱直接移到c柱,n=1是遞歸的臨界條件。否則執(zhí)行以下步驟:1.遞歸調(diào)用hanoi(n-1,a,c,b),將n-1個(gè)盤子借助c柱從a柱移到b柱。2.將第n號(hào)盤子從a柱移到c柱。3.遞歸調(diào)用hanoi(n-1,b,a,c),將n-1個(gè)盤子借助a柱從b柱移到c柱。85任務(wù)實(shí)施defhanoi(n,a,b,c):

if(n==1):

#直接將盤子從a移動(dòng)到c

print(a+"->"+c)returnelse:

#先將n-1個(gè)盤子從a移到b

hanoi(n-1,a,c,b)

#再將1個(gè)盤子從a移到c

print(a+"->"+c)

#最后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論