用turtle库显示汉诺塔问题的过程
用turtle库显示汉诺塔问题的过程
一、什么是汉诺塔问题?
一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座来放盘子。

二、静态的方法
1、代码如下:
def func(n,A,B,C):
if n== 1:
print(A,'-->',C)
else:
func(n-1,A,C,B)
func(1,A,B,C)
func(n-1,B,A,C)
num = input()
func(int(num),'A','B','C')
2、运行结果如下:
  
这是一个静态过程。
三、动态过程
1、用turtle库的代码如下:
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()
这是我从网上找来的动态过程的程序。我输入的层数为5层
2、运行的过程如下:
因为我自己拍的视频传不上来,所以我就去网上找了一个视频,而且刚好都是5层。视频链接如下:
https://www.bilibili.com/video/av38671130/?p=1
这是我用电脑截的图:
    
    
  
到这里运行的过程就结束啦~~~~
用turtle库显示汉诺塔问题的过程的更多相关文章
- 用turtle库实现汉诺塔问题~~~~~
		
汉诺塔问题 问题描述和背景: 汉诺塔是学习"递归"的经典入门案例,该案例来源于真实故事. ...
 - turtle库实现汉诺塔
		
import turtleturtle.screensize(800,800) class Stack: def __init__(self): self.items = [] def isEmpty ...
 - python运用turtle 画出汉诺塔搬运过程
		
python运用turtle 画出汉诺塔搬运过程 1.打开 IDLE 点击File-New File 新建立一个py文件 2.向py文件中输入如下代码 import turtle class Stac ...
 - 用turtle实现动态汉诺塔
		
代码如下: (此代码最多可支持七层) import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): ...
 - python中关于汉诺塔问题和使用turtle库实现其搬运过程
		
一.汉诺塔问题 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按 ...
 - 用python turtle实现汉诺塔的移动
		
1.汉诺塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...
 - Python实现汉诺塔问题的可视化(以动画的形式展示移动过程)
		
学习Python已经有一段时间了,也学习了递归的方法,而能够实践该方法的当然就是汉诺塔问题了,但是这次我们不只是要完成对汉诺塔过程的计算,还要通过turtle库来体现汉诺塔中每一层移动的过程. 一.设 ...
 - 4柱汉诺塔(zz)
		
多柱汉诺塔可以用Frame–Stewart算法来解决. The Frame–Stewart algorithm, giving a presumably optimal solution for fo ...
 - 3D屏保程序:汉诺塔
		
学过程序的人一定记得汉诺塔.我们学的第一个程序是HelloWorld,而碰到的第一个坑就是汉诺塔,短短十几行代码,不知花费了多少时间精力去理解.我记得当年的开发环境还是蓝屏的,汉诺塔程序的输出还是一行 ...
 
随机推荐
- ibatis Order By注入问题
			
上周六单位被扫描出SQL注入漏洞 经过检查,发现ibatis框架都可能出现这个问题.如果有需求,让你实现页面grid所有字段都能排序,你会怎么做呢? 最简单的做法就是从页面把字段名,排序类型传回来,然 ...
 - wcf 配置与代码创建
			
<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <s ...
 - Python学习---重点模块之pickle
			
仅仅支持Python里面的函数等相关功能的实现,而且pickle写入的内容是看不出来的,读取的时候要求有原内容 pickled的写入: import pickle def fun(): print(' ...
 - iostat -x命令诊断
			
-x 参数iostat还有一个比较常用的选项-x,该选项将用于显示和io相关的扩展数据. iostat -d -x -k 1 10Device: rrqm/s wrqm/s r/s w/ ...
 - GoAccess分析Nginx日志详解
			
一.为了提高 GoAccess 分析准确度,建议配置 nginx.conf 的 log_format 项如下: log_format main '$remote_addr - $remote_user ...
 - July 26th 2017 Week 30th Wednesday
			
A man can't ride your back unless it is bent. 你的腰不弯,别人就不能骑在你的背上. Have you ever ride a horse, or ride ...
 - 支持FreeMarker需要哪些JAR包?
			
FreeMarker所需的全部jar包,Jar包:struts2-core-2.0.11.2.jar,xwork-2.0.5.jar,ognl-2.6.11.jar,freemarker-2.3.8. ...
 - Oracle 数据库视图与基表的关系
			
本文转载自:http://www.linuxidc.com/Linux/2015-03/115165.htm 一:首先解释什么是视图: 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中 ...
 - (一)自定义ViewGroup绘制出菜单
			
从网上学习了hyman大神的卫星菜单实现,自己特意亲自又写了一编代码,对自定义ViewGroup的理解又深入了一点.我坚信只有自己写出来的知识才会有更加好的的掌握.因此也在自己的博客中将这个卫星菜单的 ...
 - Selenium基础知识(详解IDE命令、css及xpath定位一)
			
1. ide常用命令,参考 http://sariyalee.iteye.com/blog/1743350 2. ide介绍,参考 http://blog.csdn.net/oscar999/art ...