返回顶部
首页 > 资讯 > 后端开发 > Python >用turtle库显示汉诺塔问题的过程
  • 429
分享到

用turtle库显示汉诺塔问题的过程

过程汉诺turtle 2023-01-31 00:01:20 429人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

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

一、什么是汉诺塔问题?

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

 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

二、静态的方法

1、代码如下:

  

1 def func(n,A,B,C):
2     if n== 1:
3         print(A,'-->',C)
4     else:
5         func(n-1,A,C,B)
6         func(1,A,B,C)
7         func(n-1,B,A,C)
8 num = input()
9 func(int(num),'A','B','C')

 

2、运行结果如下:

  

    这是一个静态过程。

 

三、动态过程

1、用turtle库的代码如下:

  

 1 import turtle
 2  
 3 class Stack:
 4     def __init__(self):
 5         self.items = []
 6     def isEmpty(self):
 7         return len(self.items) == 0
 8     def push(self, item):
 9         self.items.append(item)
10     def pop(self):
11         return self.items.pop()
12     def peek(self):
13         if not self.isEmpty():
14             return self.items[len(self.items) - 1]
15     def size(self):
16         return len(self.items)
17  
18 def drawpole_3():#画出汉诺塔的poles
19     t = turtle.Turtle()
20     t.hideturtle()
21     def drawpole_1(k):
22         t.up()
23         t.pensize(10)
24         t.speed(100)
25         t.Goto(400*(k-1), 100)
26         t.down()
27         t.goto(400*(k-1), -100)
28         t.goto(400*(k-1)-20, -100)
29         t.goto(400*(k-1)+20, -100)
30     drawpole_1(0)#画出汉诺塔的poles[0]
31     drawpole_1(1)#画出汉诺塔的poles[1]
32     drawpole_1(2)#画出汉诺塔的poles[2]
33  
34 def creat_plates(n):#制造n个盘子
35     plates=[turtle.Turtle() for i in range(n)]
36     for i in range(n):
37         plates[i].up()
38         plates[i].hideturtle()
39         plates[i].shape("square")
40         plates[i].shapesize(1,8-i)
41         plates[i].goto(-400,-90+20*i)
42         plates[i].showturtle()
43     return plates
44  
45 def pole_stack():#制造poles的栈
46     poles=[Stack() for i in range(3)]
47     return poles
48  
49 def moveDisk(plates,poles,fp,tp):#把poles[fp]顶端的盘子plates[mov]从poles[fp]移到poles[tp]
50     mov=poles[fp].peek()
51     plates[mov].goto((fp-1)*400,150)
52     plates[mov].goto((tp-1)*400,150)
53     l=poles[tp].size()#确定移动到底部的高度(恰好放在原来最上面的盘子上面)
54     plates[mov].goto((tp-1)*400,-90+20*l)
55  
56 def moveTower(plates,poles,height,fromPole, toPole, withPole):#递归放盘子
57     if height >= 1:
58         moveTower(plates,poles,height-1,fromPole,withPole,toPole)
59         moveDisk(plates,poles,fromPole,toPole)
60         poles[toPole].push(poles[fromPole].pop())
61         moveTower(plates,poles,height-1,withPole,toPole,fromPole)
62  
63 myscreen=turtle.Screen()
64 drawpole_3()
65 n=int(input("请输入汉诺塔的层数并回车:\n"))
66 plates=creat_plates(n)
67 poles=pole_stack()
68 for i in range(n):
69     poles[0].push(i)
70 moveTower(plates,poles,n,0,2,1)
71 myscreen.exitonclick()

 

  这是我从网上找来的动态过程的程序。我输入的层数为5层

 

2、运行的过程如下:

        因为我自己拍的视频传不上来,所以我就去网上找了一个视频,而且刚好都是5层。视频链接如下:

 https://www.bilibili.com/video/av38671130/?p=1

 

        这是我用电脑截的图:  

    

    

  

 

 到这里运行的过程就结束啦~~~~

 

--结束END--

本文标题: 用turtle库显示汉诺塔问题的过程

本文链接: https://lsjlt.com/news/181601.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 用turtle库显示汉诺塔问题的过程
    一、什么是汉诺塔问题?    一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在...
    99+
    2023-01-31
    过程 汉诺 turtle
  • 使用Python实现汉诺塔问题示例
    目录前言1.先谈一下什么是递归?2.简而言之就是:3.过程为:4.递归的关键是:汉诺塔问题1.问题描述2.问题分析 递归的过程:3.代码(Python)4.结果展示前言 汉诺塔问题是...
    99+
    2023-05-17
    Python 实现 Python 汉诺塔问题
  • JavaSE求解汉诺塔问题的示例代码
    目录1.问题描述2.画图分析3.问题讲解  4.代码实现1.问题描述 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。 大梵...
    99+
    2024-04-02
  • 如何使用Python实现汉诺塔问题
    前言汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆...
    99+
    2023-05-15
    Python
  • 怎么使用Python实现汉诺塔问题
    今天小编给大家分享一下怎么使用Python实现汉诺塔问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言汉诺塔问题是一个经...
    99+
    2023-07-06
  • C#利用递归算法解决汉诺塔问题
    目录一、什么是递归二、汉诺塔问题1.汉诺塔的故事2.解决思路3.怎么解决汉诺塔问题4.具体代码实现三、完整代码一、什么是递归 方法调用自己的行为就是递归,递归必须要有终止条件,不然它...
    99+
    2024-04-02
  • Java用递归方法解决汉诺塔问题详解
    目录前言一、问题描述二、问题分析三、解决方案四、示例前言 博主之前有写过关于递归问题的思维模式: 递归的思路 下面将用这种思维模式来求解经典汉诺塔问题。 一、问题描述 汉诺塔(又称河...
    99+
    2024-04-02
  • C#怎么利用递归算法解决汉诺塔问题
    本篇内容介绍了“C#怎么利用递归算法解决汉诺塔问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是递归方法调用自己的行为就是递归,递...
    99+
    2023-06-30
  • JavaSE递归求解汉诺塔问题的思路与方法
    目录1. 汉诺塔的介绍和玩法2. 汉诺塔问题的思路3. 用递归的代码实现 总结1. 汉诺塔的介绍和玩法 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古...
    99+
    2022-11-13
    javase递归求解汉诺塔 用递归求解汉诺塔问题 递归实现汉诺塔问题java
  • Java编程用栈来求解汉诺塔问题的代码实例(非递归)
    【题目】   汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有N层的时候,打印最优移动过程和最优移动总步数。【解答】   上一篇用的是递归的方法解...
    99+
    2023-05-31
    java ava
  • Java通过递归算法解决迷宫与汉诺塔及八皇后问题
    目录1.递归的重要规则2.递归的三个案例1.老鼠出迷宫2.汉诺塔3.八皇后1.递归的重要规则 在执行一个方法时,就创建一个新的受保护的独立空间(栈空间)。方法的局部变量时独立的,不会...
    99+
    2024-04-02
  • Java怎么通过递归算法解决迷宫与汉诺塔及八皇后问题
    本篇内容介绍了“Java怎么通过递归算法解决迷宫与汉诺塔及八皇后问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.递归的重要规则在执行一...
    99+
    2023-06-30
  • 关于Python使用turtle库画任意图的问题
    目录环境配置Turtle扫盲1.绘图窗体的设置2.画笔控制函数3.形状绘制函数Turtle画任意图1.经典案例2.画任意图片环境配置 系统:Windows10 版本:python 3...
    99+
    2024-04-02
  • 怎么解决终端下vim汉字显示不正常的问题
    这篇文章主要讲解了“怎么解决终端下vim汉字显示不正常的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决终端下vim汉字显示不正常的问题”吧!locale为gb18030当前目录下...
    99+
    2023-06-10
  • 数据库显示日期时仅仅显示“年-月-日”的问题
    日期时间实际上存放的是年-月-日 时:分:秒,但是仅仅显示了年-月-日,未显示时分秒信息。解决方法:工具-首选项-数据库》NLS日期格式:YYYY-MM-DD HH24:MI:SS,保存后重新查询。 ...
    99+
    2024-04-02
  • 解决el-tree节点过滤不显示下级的问题
    目录显示下级的方法我们需求方觉得还可以再优化思路总结显示下级的方法 elementui的节点过滤默认是不显示下级的 代码在 :filter-node-method="fil...
    99+
    2023-05-17
    el-tree节点过滤 el-tree过滤不显示下级 节点过滤不显示下级
  • php使用urlencode、urldecode解决汉字乱码问题的示例
    本文将为大家详细介绍“php使用urlencode、urldecode解决汉字乱码问题的示例”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“php使用urlencode、urldecode解决汉字乱码问题的示例...
    99+
    2023-06-06
  • 怎么解决Linux下程序库Ncurses显示中文乱码的问题
    怎么解决Linux下程序库Ncurses显示中文乱码的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  有几个关键点:  1.gcc编译时用,gcc -lncurses...
    99+
    2023-06-13
  • 解决PHP数据库中爱好无法显示的问题
    为了解决PHP数据库中爱好无法显示的问题,首先需要确认数据库中的数据是否正确存储和连接是否成功。在进行数据库查询时,需要确保代码正确、逻辑清晰,避免出现错误导致无法显示爱好的情况。接下...
    99+
    2024-02-29
    数据库 php 显示
  • Android使用Notification,通知无法显示的问题
    今天看着《第一行代码》,准备实现一下书中所说的notification通知功能。非常简单的代码如下所示 @Override public voi...
    99+
    2022-06-06
    notification Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作