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之编写类之二方法
Oct 11 Python
在Django中创建第一个静态视图
Jul 15 Python
python实现机器人行走效果
Jan 29 Python
Django如何自定义分页
Sep 25 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
python实现按首字母分类查找功能
Oct 31 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
Python字符串常规操作小结
Apr 03 Python
使用scrapy实现增量式爬取方式
Jun 21 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 ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
php错误日志简单配置方法
2016/07/11 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
python正则表达式match和search用法实例
2015/03/26 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
python版本的仿windows计划任务工具
2018/04/30 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
我的网上商城创业计划书
2013/12/26 职场文书
事业单位接收函
2014/01/10 职场文书
岗位职责说明书
2014/05/07 职场文书
工作会议方案
2014/05/21 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
Nginx下配置Https证书详细过程
2021/04/01 Servers
解析MySQL索引的作用
2022/03/03 MySQL