資源簡介
本人的程序設計通識課期末大作業源代碼和說明文檔,歡迎大家參考,共同學習python

代碼片段和文件信息
#本程序是一個漢諾塔遞歸演示動畫
#用戶可以通過按鈕選擇觀看3至6個盤子的漢諾塔演示
#作者:周易?5090379144
#2011年6月13日
from?visual?import?*
from?visual.controls?import?*
scene=display(title=‘Hannoi‘width=1200?height=700)
scene.autoscale=0
R=0.5?????????????????????????#圓盤的單位半徑大小
height?=?0.6??????????????????#圓盤單位垂直間隔
distance?=?7.8????????????????#三個塔座之間的間隔距離
#畫三個塔座
post1?=?cylinder(pos=(-7.8-20)axis?=?(050)?radius?=?0.25color?=?(0.350.91))
base1?=?cylinder(pos=(-7.8-20)axis?=?(00.30)?radius?=?3.3color?=?(0.50.80.9))
post2?=?cylinder(pos=(0-20)axis?=?(050)?radius?=?0.25color?=?(0.40.91))
base2?=?cylinder(pos=(0-20)axis?=?(00.30)?radius?=?3.3color?=?(0.50.80.9))
postV?=?cylinder(pos=(7.8-20)axis?=?(050)?radius?=?0.25color?=?(0.40.91))
base3?=?cylinder(pos=(7.8-20)axis?=?(00.30)?radius?=?3.3color?=?(0.50.80.9))
#圓盤類
class?Plate:
????#初始化圓盤,在第一個塔座上放number個圓盤
????def?__init__(selfnumber):
????????self.number?=?number
????????self.plates?=?[]
????????self.P1?=?number
????????self.P2?=?0
????????self.P3?=?0
????????for?i?in?range(1number+1):
????????????rod?=?cylinder(pos=(-7.8-2+(number-i+1)*0.60)?axis=(00.40)
???????????????????????????radius=i*Rcolor?=?(10.91))
????????????self.plates.append(rod)
????#將第n塊圓盤從第fromX個塔移到第toY個塔
????def?move(selfnfromXtoY):
????????rate(50000)
????????if?toY?==?1:
????????????self.P1=self.P1+1
????????????x?=?-distance
????????????y?=?-2?+?(self.P1)*height
????????elif?toY?==?2:
????????????self.P2=self.P2+1
????????????x?=?0
????????????y?=?-2?+?(self.P2)*height
????????else:
????????????self.P3=self.P3+1
????????????x?=?distance
????????????y?=?-2?+?self.P3*height
????????if?fromX?==?1:
????????????self.P1?=?self.P1-1
????????elif?fromX?==?2:
????????????self.P2?=?self.P2-1
????????else:
????????????self.P3?=?self.P3-1
????????????
????????self.plates[n-1].velocity=vector(xy0)-self.plates[n-1].pos
????????for?j?in?range(120000):
????????????self.plates[n-1].pos?=?self.plates[n-1].pos?+?self.plates[n-1].velocity*0.00005
????????self.plates[n-1].pos?=?(xy0)
????#?將所有的plates飛出窗口并刪除所有的plates
????def?delete(self):???
????????rate(20000)
????????for?i?in?range(0self.number):
????????????for?j?in?range(142000):
????????????????self.plates[i].pos?=?self.plates[i].pos?+?vector(020)*0.0001*(i+1)?#?讓飛離速度變快
????????????print?i
????????for?i?in?range(self.number-10):
????????????del?self.plates[i]
????????del?self.plates
#漢諾塔遞歸算法實現?????
def?Move(nxyplate):
????print?“將第?“+str(n)+“?個盤從?“+str(x)+“?柱移至?“+str(y)+“?柱“;
????plate.move(nxy)
????return?plate
????
def?Hannoi(n?a?b?c?plate):
????if?n==1:
????????plate?=?Move(1acplate);
????else:
????????Hannoi(n-1acbplate);
????????plate?=?Move(nacplate);
????????Hannoi(n-1bacplate);
????????
#n?=?input(“Please?enter?the?number?of?the?plates.?“)
#scene.stereo?=??‘redcyan‘
#放3個盤子
def?change1():?#?Called?by?controls?when?button1?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4824??2011-06-13?13:04??大作業\hannoi4.py
?????文件?????311808??2011-06-13?13:01??大作業\漢諾塔動畫演示文檔.doc
?????目錄??????????0??2011-06-13?13:01??大作業
-----------?---------??----------?-----??----
???????????????316632????????????????????3
評論
共有 條評論