利用python实现汉诺塔游戏


Posted in Python onMarch 01, 2021

本文实例为大家分享了python实现汉诺塔游戏的具体代码,供大家参考,具体内容如下

一.汉诺塔

汉诺塔问题是一个经典的递归问题,对于这个问题,我们可以把它简单的去看成是如何用n-1去表示n。
在A,B,C三个柱子上,我们先假设A柱上只有两个盘子,那么很简单,只需要把最上面的那个盘子移到B柱上,再把A柱上最下面的盘子移到C柱上,最后把B柱的盘子移到C柱就可以了。
假设我们有n个盘子,那么可以把最下面的盘子看成是第n个盘子,而我们要做的是把上面n-1个盘子移到B柱上,再把第n个盘子移到C柱。我们可以把B柱视为主中转站。
在将n-1个盘子移到B柱的过程中,我们需要借助C柱作为分中转站,当完成n-1个盘子的移动时,此时B柱上存在n-1个盘子,而我们接下来要做的,和之前类似,就是借助把n-2个盘子移动到A柱,把第n-1个盘子移动到C柱。在移动n-2个盘子到A柱时,我们同样要借助C作为分中转站。

二.实例代码

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()

三.结果显示

1.首先,会显示出如下页面:

利用python实现汉诺塔游戏

因此,我们输入汉诺塔层数。

利用python实现汉诺塔游戏

2.turtle库演示结果

利用python实现汉诺塔游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python显示进度条的方法
Sep 20 Python
python入门之语句(if语句、while语句、for语句)
Jan 19 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
Python模块文件结构代码详解
Feb 03 Python
python实现登录密码重置简易操作代码
Aug 14 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python统计函数库scipy.stats的用法解析
Feb 25 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
python能做哪些生活有趣的事情
Sep 09 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 Python
python绘制汉诺塔
Mar 01 #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
You might like
Linux操作系统安装LAMP环境
2015/06/26 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
python 网络爬虫初级实现代码
2016/02/27 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
关于Python作用域自学总结
2019/06/10 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
给老婆的保证书范文
2014/04/28 职场文书
大专学生求职信
2014/07/04 职场文书
优秀教师事迹材料
2014/12/15 职场文书
个人年终总结范文
2015/03/09 职场文书
新学期开学标语2015
2015/07/16 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
如何理解及使用Python闭包
2021/06/01 Python
SQL注入详解及防范方法
2021/12/06 MySQL