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编写android截屏脚本双击运行即可
Jul 21 Python
python中enumerate的用法实例解析
Aug 18 Python
python3.5仿微软计算器程序
Mar 30 Python
python实现一组典型数据格式转换
Dec 15 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
基于python实现文件加密功能
Jan 06 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
Python基础之数据类型知识汇总
May 18 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用户指南-cookies部分
2006/10/09 PHP
php常用ODBC函数集(详细)
2013/06/24 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
js跳转页面方法总结
2014/01/29 Javascript
javascript常见用法总结
2014/05/22 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
wxPython的安装与使用教程
2018/08/31 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
好军嫂事迹材料
2014/01/15 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
入股协议书范本
2014/11/01 职场文书
简历中自我评价范文
2015/03/11 职场文书
推荐信范文大全
2015/03/27 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python