python绘制汉诺塔
本文实例为大家分享了python绘制汉诺塔的具体代码,供大家参考,具体内容如下
源码:
importturtle
classStack:
def__init__(self):
self.items=[]
defisEmpty(self):
returnlen(self.items)==0
defpush(self,item):
self.items.append(item)
defpop(self):
returnself.items.pop()
defpeek(self):
ifnotself.isEmpty():
returnself.items[len(self.items)-1]
defsize(self):
returnlen(self.items)
defdrawpole_3():#画出汉诺塔的poles
t=turtle.Turtle()
t.hideturtle()
defdrawpole_1(k):
t.up()
t.pensize(10)
t.speed(100)
t.goto(400*(k-1),100)
t.down()
t.goto(400*(k-1),-100)
t.goto(400*(k-1)-20,-100)
t.goto(400*(k-1)+20,-100)
drawpole_1(0)#画出汉诺塔的poles[0]
drawpole_1(1)#画出汉诺塔的poles[1]
drawpole_1(2)#画出汉诺塔的poles[2]
defcreat_plates(n):#制造n个盘子
plates=[turtle.Turtle()foriinrange(n)]
foriinrange(n):
plates[i].up()
plates[i].hideturtle()
plates[i].shape("square")
plates[i].shapesize(1,8-i)
plates[i].goto(-400,-90+20*i)
plates[i].showturtle()
returnplates
defpole_stack():#制造poles的栈
poles=[Stack()foriinrange(3)]
returnpoles
defmoveDisk(plates,poles,fp,tp):#把poles[fp]顶端的盘子plates[mov]从poles[fp]移到poles[tp]
mov=poles[fp].peek()
plates[mov].goto((fp-1)*400,150)
plates[mov].goto((tp-1)*400,150)
l=poles[tp].size()#确定移动到底部的高度(恰好放在原来最上面的盘子上面)
plates[mov].goto((tp-1)*400,-90+20*l)
defmoveTower(plates,poles,height,fromPole,toPole,withPole):#递归放盘子
ifheight>=1:
moveTower(plates,poles,height-1,fromPole,withPole,toPole)
moveDisk(plates,poles,fromPole,toPole)
poles[toPole].push(poles[fromPole].pop())
moveTower(plates,poles,height-1,withPole,toPole,fromPole)
myscreen=turtle.Screen()
drawpole_3()
n=int(input("请输入汉诺塔的层数并回车:\n"))
plates=creat_plates(n)
poles=pole_stack()
foriinrange(n):
poles[0].push(i)
moveTower(plates,poles,n,0,2,1)
myscreen.exitonclick()
效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。