源码:

import turtle
class 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 plates
def pole_stack():  # 制造poles的栈poles = [Stack() for i in range(3)]return poles
def 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()

效果图:


Python画汉诺塔相关推荐

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

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

  2. 汉诺塔游戏java下载,利用python实现汉诺塔游戏

    本文实例为大家分享了python实现汉诺塔游戏的具体代码,供大家参考,具体内容如下 一.汉诺塔 汉诺塔问题是一个经典的递归问题,对于这个问题,我们可以把它简单的去看成是如何用n-1去表示n. 在A,B ...

  3. 用 python 解决汉诺塔问题并附带演示过程

    用 python 解决汉诺塔问题并附带演示过程 参考文章: (1)用 python 解决汉诺塔问题并附带演示过程 (2)https://www.cnblogs.com/shinawear/p/1061 ...

  4. 使用Python查看汉诺塔移动详细过程

    汉诺塔属于比较经典的问题,详见以前的文章Python模拟汉诺塔问题移动盘子的过程,基于非递归算法的汉诺塔游戏之Python实现. 本文代码功能:模拟移动汉诺塔上的盘子,并实时显示3根柱子上盘子的情况. ...

  5. python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例

    Python汉诺塔递归问题 python请用递归算法编程解决汉诺塔问题 在线等 关于python递归函数实现汉诺塔 def move(n,a,b,c): #1 if n==1: #2 print(a, ...

  6. python递归算法 - 汉诺塔问题

    python递归算法 - 汉诺塔问题 经典汉诺塔问题: 有三根柱子a,b,c,在一根柱子a上,从下往上按照从大到小的顺序摞着64片黄金圆盘.把所有圆盘从下往上按从大到小的顺序重新摆放在另一根柱子c上. ...

  7. python堆栈汉诺塔非递归_汉诺塔问题的递归解法和非递归解法(python语言实现)...

    汉诺塔问题的非递归解法(python语言类解法) #!/usr/bin/env python #coding:utf-8 import sys import time reload(sys) sys. ...

  8. 如何用python写汉诺塔游戏的辅助

    今天我来分享如何用python写一个游戏的辅助 大游戏的外挂我们写不了但是我们可以写个小游戏–汉诺塔 的外挂,这个游戏相信很多同学都玩过. 开始是三层,还很简单,四层还好,五层六层就有点费脑壳了. 话 ...

  9. Python实现汉诺塔代码

    def hanoi(n,x,y,z):if n == 1:print(x,'-->',c)else:hanoi(n-1,x,z,y) #将前n-个盘子从x移动到y上hanoi(1,x,y,z) ...

最新文章

  1. [读书笔记]C#中get与set的用法
  2. python 之GUI设计:Entry组件
  3. PMcaff O2O 产品峰会:行业最强干货,BAT总监级最佳实战 | 火热报名
  4. 程序员面试系列——插入排序
  5. 使用tensoflow serving来部署模型推理节点
  6. java数学函数Math类
  7. 单页面响应式模板:黑石
  8. 如何使用计算机上合并计算方法,Excel2019中合并计算的使用方法
  9. Pdf 插入图片 | 指定位置插入图片 不改变原格式 直接操作 pdf
  10. SX1278超时设置与计算
  11. 杨建荣的学习笔记排行榜(r2笔记100天)
  12. 阿里身份实名认证实例
  13. 海思方案技术研发交流群/海思方案供需交流群
  14. mysql中幻读出现的原因及解决方案
  15. java计算机毕业设计校园环境保护监督系统源程序+mysql+系统+lw文档+远程调试
  16. 美团招博士后啦!深度学习、强化学习、计算机视觉与NLP、法学方向
  17. php 科试题,科学网—《数据库系统原理与技术》试题库试题与参考答案选编6 - 程学先的博文...
  18. 如何用最短时间学会数据分析?
  19. 抖音短视频KOL推广真的有效果吗?
  20. 最小二乘法求解线性回归模型

热门文章

  1. 0112 - 借用纸币发行门票
  2. mysql快速部署主从复制
  3. Python 爬虫的工具列表
  4. laravel学习笔记------Route::resource和Form-Model-Binding
  5. 递归大总结之台阶问题
  6. 链表相关的面试题型总结
  7. Jsvm2 与 prototype.js 组合 應用心得
  8. TubeMQ 万亿级分布式消息中间件
  9. Gradle项目同步失败错误
  10. php读取doc pdf文件,PHP读取创建txt,doc,xls,pdf类型文件