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解析基于xml格式的日志文件
Feb 25 Python
python开发利器之ulipad的使用实践
Mar 16 Python
python之pandas用法大全
Mar 13 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
容易被忽略的Python内置类型
Sep 03 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 Python
python实现双人五子棋(终端版)
Dec 30 Python
python 如何在list中找Topk的数值和索引
May 20 Python
OpenCV-Python模板匹配人眼的实例
Jun 08 Python
Python 多线程处理任务实例
Nov 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安全性需要注意的几点事项
2014/07/17 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
搭建vue开发环境
2018/07/19 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
python进阶教程之循环对象
2014/08/30 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
python中defaultdict的用法详解
2017/06/07 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
python如何快速生成时间戳
2020/07/21 Python
Python 合并拼接字符串的方法
2020/07/28 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
北京SQL新华信咨询
2016/09/30 面试题
小学门卫岗位职责
2013/12/17 职场文书
给校长的建议书300字
2014/05/16 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL