利用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实现360皮肤按钮控件示例
Feb 21 Python
Python字符串处理函数简明总结
Apr 13 Python
深入理解Python中变量赋值的问题
Jan 12 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
Python实现多进程的四种方式
Feb 22 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
PHP实现MySQL更新记录的代码
2008/06/07 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
python批量同步web服务器代码核心程序
2014/09/01 Python
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
如何通过python画loss曲线的方法
2019/06/26 Python
python安装scipy的步骤解析
2019/09/28 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
python语言是免费还是收费的?
2020/06/15 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
工商学院毕业生个人自我评价
2013/09/19 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
教师个人年终总结
2015/02/11 职场文书
结婚十年感言
2015/07/31 职场文书
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python