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实现网站文件的全备份和差异备份
Nov 30 Python
Python字符串替换实例分析
May 11 Python
Python利用ansible分发处理任务
Aug 04 Python
Python的shutil模块中文件的复制操作函数详解
Jul 05 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
Python 共享变量加锁、释放详解
Aug 28 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
详解基于Scrapy的IP代理池搭建
Sep 29 Python
教你利用python实现企业微信发送消息
May 23 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 判断常量,变量和函数是否存在
2009/04/26 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
python脚本设置系统时间的两种方法
2016/02/21 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
Python的信号库Blinker用法详解
2020/12/31 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
Shell如何接收变量输入
2016/08/06 面试题
《手指教学》反思
2014/02/14 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle