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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。