Turtle库的建立——汉诺塔

1、首先是要用递归方法来完成这个汉诺塔法则

2、其次,就要编程好代码以及熟练掌握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():

    t = turtle.Turtle()

    t.hideturtle()

    def drawpole_1(k):

        t.up()

        t.pensize(10)

        t.speed(100)

        t.goto(400*(k-1), 400)

        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)

    drawpole_1(1)

    drawpole_1(2)

def creat_plates(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,20-i)

        plates[i].goto(-400,-90+20*i)

        plates[i].showturtle()

    return plates

def pole_stack():

    poles=[Stack() for i in range(3)]

    return poles

def moveDisk(plates,poles,fp,tp):

    mov=poles[fp].peek()

    plates[mov].goto((fp-1)*400,550)

    plates[mov].goto((tp-1)*400,550)

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

  (盘子最多19个)

二、  试验结果如下:

三、  实验说明:

我们可以更改代码(drawpole_1)这个函数中的

第一个t.goto中400可改为其他来达到你想要的杆的长度

再更改

函数中的

20-i这部分,可以得到你想要限制的盘的个数,这样就完成了汉诺塔问题。

Turtle库的建立——汉诺塔的更多相关文章

  1. python中关于汉诺塔问题和使用turtle库实现其搬运过程

    一.汉诺塔问题 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按 ...

  2. Python实现汉诺塔问题的可视化(以动画的形式展示移动过程)

    学习Python已经有一段时间了,也学习了递归的方法,而能够实践该方法的当然就是汉诺塔问题了,但是这次我们不只是要完成对汉诺塔过程的计算,还要通过turtle库来体现汉诺塔中每一层移动的过程. 一.设 ...

  3. 用turtle库实现汉诺塔问题~~~~~

    汉诺塔问题 问题描述和背景: 汉诺塔是学习"递归"的经典入门案例,该案例来源于真实故事.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬ ...

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

    用turtle库显示汉诺塔问题的过程 一.什么是汉诺塔问题? 一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.把这n个盘子从A座移到C座,但每次只能移 ...

  5. turtle库实现汉诺塔

    import turtleturtle.screensize(800,800) class Stack: def __init__(self): self.items = [] def isEmpty ...

  6. python运用turtle 画出汉诺塔搬运过程

    python运用turtle 画出汉诺塔搬运过程 1.打开 IDLE 点击File-New File 新建立一个py文件 2.向py文件中输入如下代码 import turtle class Stac ...

  7. 运用Turtle实现汉诺塔的可视化运行(递归算法)

    运用Turtle实现汉诺塔的可视化运行(递归算法) 汉诺塔问题又名河内塔问题,是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...

  8. 用turtle实现动态汉诺塔

    代码如下: (此代码最多可支持七层) import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): ...

  9. 递归可视化之汉诺塔的动画实现(turtle海龟)

    import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): def push(self, ite ...

随机推荐

  1. Linux命令:source

    语法 source filename 说明 . 的同义词

  2. makefile(一)

    Makefile的一个具体的实例 来源:http://blog.sina.com.cn/s/blog_73d4d5fa0100paiy.html (2011-03-06 23:10:02) 转载▼ 标 ...

  3. 项目管理第一篇(PROJECT MANAGEMENT A Systems Approach to Planning, Scheduling, and Controlling)

    请把梦想和野心带上,这是我哥对我说的. 几年下来,人浑浑噩噩,梦想和野心像锋利的石头在水中慢慢被磨平,今天就再次记住,不要让焦虑和失望伴随着人生和家庭. 这是H A R O L D K E R Z N ...

  4. Django启动报错笔记

    NO.1: You have 15 unapplied migration(s). Your project may not work properly until you apply the mig ...

  5. cv2.error: openCV报错

    运行openCV程序,出现了.cv2.error: OpenCV(4.1.0) D:\Build\OpenCV\opencv-4.1.0\modules\imgproc\src\color.cpp:1 ...

  6. Java的对象传参问题

    在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.之前有搜过相关的知识点一直理解的是:Java的传参方式中主要有两种: ...

  7. rsync镜像命令

    rsync -e 'ssh -p 19809' -av wwwroot root@3.3.3.3:/home/download/ 参数详解 编辑 -v, --verbose 详细模式输出 -q, -- ...

  8. spring boot + apache camel 传输文件

    一 sftp搭建略 这里简单说一下为什么使用sftp.ftp和sftp各有优点,差别并不是太大.sftp安全性好,性能比ftp低.ftp对于java来说并不复杂,效率也高.之所以使用sftp主要是可以 ...

  9. Appium 学习三:Appium-Desktop 填坑

    之前使用appium执行自动化脚本,现使用appium-desktop  遇到了一些问题 1.使用name定位的报错   Locator Strategy 'name' is not supporte ...

  10. C#入门课程之基础认识

    命名规则: 注意变量名的第一个字符必须是字母.下划线.以及@字符 字面值: 字符串字面值: 用Unicode表示一个字符方式:\uxxxx,其中xxxx表示4位的十六进制数,下面两种表示方式一致: u ...