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字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
python开发之文件操作用法实例
Nov 13 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
快速了解Python相对导入
Jan 12 Python
python tornado微信开发入门代码
Aug 24 Python
python提取包含关键字的整行数据方法
Dec 11 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python快排算法详解
Mar 04 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
基于python实现名片管理系统
2018/11/30 Python
浅谈python常用程序算法
2019/03/22 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
详解python如何引用包package
2020/06/07 Python
详解Python IO口多路复用
2020/06/17 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
访谈节目策划方案
2014/05/15 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL