代码如下:

(此代码最多可支持七层)

import turtleclass Stack:def __init__(self):self.items = []def isEmpty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):return self.items.pop()def peek(self):if not self.isEmpty():return self.items[len(self.items) - 1]def size(self):return len(self.items)def drawpole_3():#画出汉诺塔的polest = turtle.Turtle()t.hideturtle()def drawpole_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]def creat_plates(n):#制造n个盘子plates=[turtle.Turtle() for i in range(n)]for i in range(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()return platesdef pole_stack():#制造poles的栈poles=[Stack() for i in range(3)]return polesdef moveDisk(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)def moveTower(plates,poles,height,fromPole, toPole, withPole):#递归放盘子if height >= 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()
for i in range(n):poles[0].push(i)
moveTower(plates,poles,n,0,2,1)
myscreen.exitonclick()

实现过程见注释;

效果如下

转载于:https://www.cnblogs.com/DXL123/p/10596939.html

用turtle实现动态汉诺塔相关推荐

  1. 汉诺塔递归问题的分析与Python实现

    背景 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘(如图).游戏的目标:把A杆上的金盘 ...

  2. 【python】 turtle实现汉诺塔游戏动画过程

    [python] turtle实现汉诺塔游戏动画过程 import turtle class Stack: #面向对象,定义一个类def __init__(self):self.items = []d ...

  3. python turtle绘图-案例集锦(小猪佩奇、哆啦A梦、小黄人、樱花树、皮卡丘、汉诺塔、高达、星空等)

    1.小猪佩奇: import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255, 155, 192), &qu ...

  4. Python3趣味系列题4------非递归解决三阶汉诺塔以及动态展示过程

    一.问题描述 法国数学家爱德华·卢卡斯曾编写过一个关于印度的古老传说:在世界中心贝拿勒斯的圣庙里,一块黄铜板上插着三根宝石针,印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的 ...

  5. 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...

  6. python 游戏 —— 汉诺塔(Hanoita)

    python 游戏 -- 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...

  7. Python汉诺塔问题

    汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆 ...

  8. python汉诺塔问题_Python汉诺塔问题

    汉诺塔描述 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3 ...

  9. labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的. 对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作 ...

  10. python汉诺塔运行程序_用python编写一个程序,得到汉诺塔的解决方案

    古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示. 有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘 ...

最新文章

  1. 项目进度,你汇报清楚了么?
  2. 卸载Android虚拟机里的项目(cmd)
  3. java常用代码解析_Java设计模式常用原则代码解析
  4. android 接百度SDK遇到的坑(百度地图BD09经纬度转高德地图GCJ02经纬度)
  5. Python学习笔记-数字类型
  6. KVO 的代码简洁使用
  7. excel 使用连接符合并单元格内容或者给单元格内容添加信息
  8. Flask: 跨域上传的回调方案
  9. 关于typedef的用法总结(转)
  10. php正弦函数图像,Go语言输出正弦函数(Sin)图像
  11. adb官方最新下载链接和常用操作
  12. Java解压压缩包(zip/rar/7z)
  13. 用python画一个机器猫歌词_Python实现海贼王的歌词组成词云图
  14. Learn UML with JUDE
  15. 写一个php简单的递归函数
  16. osgEarth .earth 文件详情
  17. linux学习-安装centos
  18. Linux忘记密码的解决方法
  19. 一颗 “不安分” 的螺丝钉
  20. 最为详细的Docker总结

热门文章

  1. 求求你们了,别再写满屏的 if/ else 了!
  2. 虐哭无数人的烧脑刑侦科推理题,程序员一秒解
  3. 《区块链》都火了两年多了,你还不知道它是什么?
  4. 记住:永远不要在MySQL中使用utf8,请使用utf8mb4
  5. 运维必读:避免故障、拒绝背锅的六大原则!
  6. 运维的日常:如果回到18岁,你还会选择运维行业么?
  7. Android中突发情况数据的保存和恢复
  8. onSaveInstanceState onRestoreInstanceState
  9. top 100 liked Q (26-)
  10. Java中单例设计模式总结