python绘制汉诺塔


Posted in Python onMarch 01, 2021

本文实例为大家分享了python绘制汉诺塔的具体代码,供大家参考,具体内容如下

源码:

import turtle
class Stack:
  def __init__(self):
    self.items = []
  def isEmpty(self):
    return len(self.items) == 0
  def 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(): # 画出汉诺塔的poles
  t = 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绘制汉诺塔

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python发送arp欺骗攻击代码分析
Jan 16 Python
Python简单删除列表中相同元素的方法示例
Jun 12 Python
Python优先队列实现方法示例
Sep 21 Python
Python3 中文文件读写方法
Jan 23 Python
Python格式化日期时间操作示例
Jun 28 Python
PyQt5实现简易计算器
May 30 Python
Python Flask框架扩展操作示例
May 03 Python
python装饰器练习题及答案
Nov 01 Python
python列表生成器迭代器实例解析
Dec 19 Python
python实现人机五子棋
Mar 25 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
如何利用Python实现一个论文降重工具
Jul 09 Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 #Python
Python 里最强的地图绘制神器
Mar 01 #Python
Python的collections模块真的很好用
Mar 01 #Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 #Python
Python创建自己的加密货币的示例
Mar 01 #Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 #Python
详解Django中的FBV和CBV对比分析
Mar 01 #Python
You might like
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
vue登录注册实例详解
2019/09/14 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
Python中一般处理中文的几种方法
2019/03/06 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
毕业生实习鉴定
2013/12/11 职场文书
单位人事专员介绍信
2014/01/11 职场文书
座谈会主持词
2014/03/20 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
python实现学员管理系统(面向对象版)
2022/06/05 Python