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中xrange和range的区别
May 13 Python
Python实现的数据结构与算法之快速排序详解
Apr 22 Python
Python对列表排序的方法实例分析
May 16 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
Python列表推导式与生成器表达式用法示例
Feb 08 Python
详解django三种文件下载方式
Apr 06 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
Django如何实现密码错误报错提醒
Sep 04 Python
PyTorch的Debug指南
May 07 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
js中位运算的运用实例分析
2018/12/11 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
使用pandas读取csv文件的指定列方法
2018/04/21 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
Django数据库操作之save与update的使用
2020/04/01 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
python中entry用法讲解
2020/12/04 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
抽象类和接口的区别
2012/09/19 面试题
应届大学生求职信
2013/12/01 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
2014年司法局工作总结
2014/12/11 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
焦点访谈观后感
2015/06/11 职场文书
中秋联欢会主持词
2015/07/04 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
Pandas加速代码之避免使用for循环
2021/05/30 Python
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers