python第五章课后答案汉诺塔_用python编写一个程序,得到汉诺塔的解决方案
古代有一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。
有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座来放盘子。
现在我编写一个程序(其实就是运用了递归思想)输入一个正整数,表示汉诺塔内的盘子个数n(1<=n<=64)然后输出移动的步骤。
步骤一:代码如下:
def move(x,y):
print("%s --> %s"%(x,y))
def hanoi(n,one,two,three):
if n==1:
move(one,three)
else:
hanoi(n-1,one,three,two)
move(one,three)
hanoi(n-1,two,one,three)
def main():#main函数
m=int(input())#输入盘子个数
hanoi(m,'A','B','C')
main()
步骤二:执行代码,现在我输入4,即4个盘子,看看搬运的步骤是怎么样的:
附:用turtle画出步骤则更直观,也更有趣,下面用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()#代码参考https://blog.csdn.net/beerbread134/article/details/69226991
python第五章课后答案汉诺塔_用python编写一个程序,得到汉诺塔的解决方案相关推荐
- 通信原理樊信昌_通信原理樊信昌第五章课后答案
通信原理樊信昌第五章课后答案 更多相关问题 下列账簿中,一般采用活页账形式的是() [单选题]<天启宫词>中有一诗句:纤玉剥残双郭索,落花蝶舞唾生香.此句描绘的是吃哪种美食的场景 . 拉卜 ...
- 数据结构(C语言)第二版 第五章课后答案
数据结构(C语言)第二版 第五章课后答案 1~5 A D D C A 6~10 C C B D C 11~15 B C A C A 1.选择题 (1)把一棵树转换为二叉树后,这棵二叉树的形态是(A) ...
- Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt(100)方法显示0到100之间的前50个随机整数
Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt方法显示0到100之间的前50个随机整数 题目 赘述 代码 题目 ...
- python第五章课后题答案_python程序设计基础(嵩天)第五章课后习题部分答案
原博文 2019-10-13 13:50 − 第五章p1515.2:实现isodd()函数,参数为整数,如果参数为奇数,返回true,否则返回false.def isodd(s): x=eval(s) ...
- python第三章课后答案_XX医学院本科各专业《Python》第三章习题与答案-2020年实用精品...
XX医学院本科各专业<Python>第三章习题与答案 一.填空题 1.python语言提供.和3种数字类型.(整数.浮点数.复数) 2.整数类型有4种进制表示,默认情况采用十进制,二进制数 ...
- (~最新合集~)计算机网络谢希仁第七版 第五章课后答案
5-01 试说明运输层在协议栈中的地位和作用,运输层的通信和网络层的通信有什么重要区别?为什么运输层是必不可少的? 答:运输层处于面向通信部分的最高层,同时也是用户功能中的最低层,向它上面的应用层提供 ...
- 【传智播客】Javaweb程序设计任务教程 黑马程序员 第五章 课后答案
所有章节答案合集-->传送门 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.简述什么是会话技术? 2.简述Cookie与Session的区别?(至少写出3点) 3.请设 ...
- python从入门到实践答案博客园_《Python从入门到实践》--第八章 函数 课后练习4...
题目: 8-12 三明治 :编写一个函数,它接受顾客要在三明治中添加的一系列食材.这个函数只有一个形参(它收集函数调用中提供的所有食材),并打印一条消息,对顾客 点的三明治进行概述.调用这个函数三次, ...
- python第五章课后编程题答案_Python核心编程-第五章课后习题
5-1 整形 讲讲 Python 普通整型和长整型的区别 答:在2.7版本基本淡化了区别.真要区分的话,普通整型是32位或者64位,而长整型只与PC内存有关,很大就是了 5-2 运算符 (a) 写一个 ...
- python第五章课后题答案超星_MOOC网课章节答案_Python 语言程序设计见面课测试答案...
[单选,A1型题] 能疏肝.暖肝,治肝寒气滞诸痛的是() [单选,A4型题,A3/A4型题] 男,32岁,进食后上腹饱胀不适,伴返酸.烧心.嗳气.食欲不振,临床诊断为慢性胃炎.该病治疗中不正确的是() ...
最新文章
- 移动平台自动化测试:appium(二)
- PHP学习笔记-Cookie
- C++ 默认参数和占位符
- 2022年学Web前端怎么样?还有发展前景吗?
- Ubuntu iso下载地址(14、16、18)
- Java设计模式之七大结构型模式(附实例和详解)
- -lc++ 和 添加 libc++.tbd 居然是等价的
- Dialogue and Conversational Agents
- win10 笔记本 右下角出现 天气的解决办法
- WebRTC系列补充--native音量控制level
- “三位一体”新驱动,基因检测行业走向交叉应用
- c语言输出n转义字符串,C语言转义字符介绍和示例
- JS Turbo空气悬浮鼓风机
- 手把手做一个JSP入门程序(九):购物车的基本实现(Servlet)
- 【RESTful】REST 与 RESTful 理解与实践
- Opencv学习之:如何将矩阵转换成图片,如何将图片转换成矩阵
- html5图片本地缓存,HTML5: 本地缓存
- BFS团战可以输、提莫必须死(转载)
- Realme的Login接入过程记录
- CodeForcesRound377 732
热门文章
- 鸿蒙和想象部落哪个好些,还是想说说鸿蒙
- python 车牌识别训练模型_使用Python基于HyperLPR/Mask-RCNN的中文车牌识别
- pc工具不支持stb的加密方式_微信协议分析 pc端记录实现不死号
- 向英雄联盟生涯致敬,三十行Python代码爬取LOL官网英雄皮肤图片
- asp.net C#后台实现下载文件的几种方法
- 由浅入深探究mysql索引结构原理、性能分析与优化
- 如何将一个String和多个String值进行比较
- Kerio Network Monitor
- C# 泛型2---排序
- [CLR团队公告]CLR基础研究团队纲领