導航:首頁 > 編程語言 > python編寫漢諾塔游戲

python編寫漢諾塔游戲

發布時間:2024-02-24 12:03:59

python漢諾塔非遞歸

python漢諾塔非遞歸,運用list和function知識的解答

無論stack還是recursion都是從漢諾塔的原理去解決問題,但如果已經想清楚漢諾塔的原理,其實只用把答案print出來就行了

先找規律:

一層:A-->C


兩層:A-->B

-------

A-->C

-------

B-->C


三層:A-->C

A-->B

C-->B

-------

A-->C

-------

B-->A

B-->C

A-->C


注意到n層漢諾塔有(2**n) - 1 個步驟,而中間的一步(兩個分割線之間)都是「A-->C」,中間的這一步將這一層漢諾塔的解分為上下兩個部分

仔細觀察,上面一部分是將上一層的解中所有的B,C交換,下面一部分是將上一層的解中所有的A,B交換

例如第二層是:

A-->B

A-->C

B-->C

第三層上部分就將第二層的解的C換成B,B換成C,即得出:

A-->C

A-->B

C-->B

第三層下部分就將第二層的解的A換成B,B換成A,即得出:

B-->A

A-->C

C-->B

這個規律同樣適用於第一層,和以後的所有層

然後就好辦了,代碼如圖:

代碼

其中convertAB,convertBC就是AB交換,BC交換的函數,這兩個函數可以自己定義,用中間變數即可

❷ 標題:用Python編碼描述漢諾塔步驟

#-*-coding:utf-8-*-
count=0
defhano():

defhanoi(n,x,y,z):
globalcount
count+=1
ifn==1:
print('Monving%d'%n,'from',x,'to',z)
else:
hanoi(n-1,x,z,y)
print('Monving%d'%n,'from',x,'to',z)
hanoi(n-1,y,x,z)
returnhanoi
n=int(input("請輸入漢諾塔的層數:"))
hano()(n,'source','helper','target')
print(":",str(count))

-----------分-割-線-是-我----------------

復制分割線以上的代碼,保存為hannoi.py,在python 3 下運行,得到結果如題所示。

❸ 漢諾塔python

Solves the Towers of Hanoi problem on n discs. The discs are labeled
* in increasing order of size from 1 to n and the poles are labeled
* A, B, and C.
*
* % java Hanoi 3
* Move disc 1 from A to C
* Move disc 2 from A to B
* Move disc 1 from C to B
* Move disc 3 from A to C
* Move disc 1 from B to A
* Move disc 2 from B to C
* Move disc 1 from A to C
以上為模擬結果,從結果中找遞歸規律,你的疑點也能得到解決

❹ 哪位大佬有python漢諾塔的教程

學到遞歸的時候有個漢諾塔的練習,漢諾塔應該是學習計算機遞歸演算法的經典入門案例了,所以本人覺得可以寫篇博客來表達一下自己的見解。這markdown編輯器還不怎麼會用,可能寫的有點格式有點丑啦,各位看官多多見諒.
網上找了一張漢諾塔的圖片,漢諾塔就是利用用中間的柱子把最左邊的柱子上的圓盤依次從大到小疊上去,說白了就是c要跟原來的a一樣

童鞋們理解了漢諾塔的遞歸演算法原理後,可以寫個程序來試試,這里只是學到Python的遞歸所以用了Python,童鞋們可以用其他語言實現,漢諾塔確實能幫助理解遞歸原理,遞歸在程序設計中的重要性不言而喻啦!

❺ python語言漢諾塔(hanoi)問題

把每次移動操作 獨立出來,寫成move操作
然後吧每次移動的邏輯寫成hanoi,然後加上重復
hanoi裡面執行hanoi、就是遞歸了

❻ python請用遞歸演算法編程解決漢諾塔問題 在線等

這是Python3系統自帶的一個例子,估計就是這個意思,本來他是6個盤子,按照你要求改成4個了。遞歸演算法沒問題,描述也非常詳細 ;)

#!/usr/bin/envpython3
fromturtleimport*
classDisc(Turtle):
def__init__(self,n):
Turtle.__init__(self,shape="square",visible=False)
self.pu()
self.shapesize(1.5,n*1.5,2)#square-->rectangle
self.fillcolor(n/6.,0,1-n/6.)
self.st()
classTower(list):
"Hanoitower,asubclassofbuilt-intypelist"
def__init__(self,x):
"createanemptytower.xisx-positionofpeg"
self.x=x
defpush(self,d):
d.setx(self.x)
d.sety(-150+34*len(self))
self.append(d)
defpop(self):
d=list.pop(self)
d.sety(150)
returnd
defhanoi(n,from_,with_,to_):
ifn>0:
hanoi(n-1,from_,to_,with_)
to_.push(from_.pop())
hanoi(n-1,with_,from_,to_)
defplay():
onkey(None,"space")
clear()
try:
hanoi(6,t1,t2,t3)
write("pressSTOPbuttontoexit",
align="center",font=("Courier",16,"bold"))
exceptTerminator:
pass#turtledemouserpressedSTOP
defmain():
globalt1,t2,t3
ht();penup();goto(0,-225)#writerturtle
t1=Tower(-250)
t2=Tower(0)
t3=Tower(250)
#maketowerof6discs
foriinrange(4,0,-1):
t1.push(Disc(i))
#preparespartanicuserinterface;-)
write("pressspacebartostartgame",
align="center",font=("Courier",16,"bold"))
onkey(play,"space")
listen()
return"EVENTLOOP"
if__name__=="__main__":
msg=main()
print(msg)
mainloop()

❼ python解決漢諾塔問題

解漢諾塔最簡單的做法就是遞歸:

類似如何將大象裝進冰箱:1)將冰箱門打開;2)把大大象放進去;3)把冰箱門關上……

我們將所有的盤都在同一個桿上從大到小排列視為【完美狀態】,那麼,目標就是將最大碟片為n的完美狀態從a桿移到b桿,套用裝大象的思路,這個問題同樣是三步:

1)把n-1的完美狀態移到另一個桿上;

2)把n移到目標桿上;

3)把n-1的完美狀態移到目標桿上。

如下:

閱讀全文

與python編寫漢諾塔游戲相關的資料

熱點內容
python計運算元網掩碼 瀏覽:57
加密u盤製作成iso鏡像 瀏覽:491
oppo大文件夾圖標 瀏覽:173
用cmd打開python文件 瀏覽:366
程序員磁碟知識 瀏覽:584
左摟右抱命令 瀏覽:931
法律大還是行政命令大 瀏覽:354
中國銀行手機app在哪裡刷臉 瀏覽:900
epidata如何編程 瀏覽:989
助眠解壓玩具電動 瀏覽:235
4k顯示器編程 瀏覽:267
什麼錯誤在編譯時會發現 瀏覽:700
學會自己解壓英語 瀏覽:44
安卓豪華版是什麼意思 瀏覽:684
c語言編程軟體打開 瀏覽:21
碧藍航線圖片文件夾位置 瀏覽:671
winme編譯 瀏覽:522
淘寶上買東西發順豐快遞地址都加密嗎 瀏覽:415
批處理編譯VS代碼 瀏覽:891
uchar哪個編譯器 瀏覽:28