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. 超详细的遗传算法(Genetic Algorithm)解析

    https://blog.csdn.net/u010451580/article/details/51178225 https://www.jianshu.com/p/c82f09adee8f 00 ...

  2. centos 7.2 同步北京时间 ,多台机器同步时间

    linux 系统没有北京时间,同步的是上海时间 linux 系统有两个时钟:一个是硬件时钟,即BIOS时间:另一个是系统时钟,是linux系统Kernel(内核)时间. 系统开启时,系统会读取硬件时间 ...

  3. spreed&rest

    ES6变化-spreed&rest … 展开&收集运算符: 此运算符在不同地方使用有不同的功效,可以从写和读两个角度考虑. 写:function test (…arg){}; test ...

  4. 【JDBC】java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

    在使用阿里的druid 时,报了一个异常java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized ...

  5. python--第十七天总结(Django)

    基本配置 一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: pytho ...

  6. vim 常用指令总结

    vim的好处(四大好处) vim具有大量的操作技巧,编辑能力强大且速度比其他工具快的多! (这里举个简单的小例子:将每行的前四个字母复制到每行的末尾; 将文本中的所有word替换为words; 等等很 ...

  7. Ubuntu16.04 git上网速度慢的解决方法.

    1.打开网站 IPAddress.com ,输入github.com和github.global.ssl.fastly.net,获取他们的域名对应的ip地址 2.sudo vi /etc/hosts ...

  8. 21-matlab 迷宫题

    dfs: 注意matlab里面的全局变量的使用 test.m: clc; clear; global A ii dx dy vis minpath path A=... [1 1 1 1 1 1 1 ...

  9. php操作redis数据库方法总结

    一.安装php_redis扩展,用以操作redis http://pecl.php.net/package/redis 选择自已系统php版本对应的扩展. 二.redis连接与验证 <?php ...

  10. PHP整理--PHP语法

    PHP是一门动态交互的计算机语言,动态交互都需要服务器; 我们所了解过的静态交互都有:html,css,js: 1.我们学习PHP需要服务器,当我们没有服务器的条件时,PHPstudy给我们提供了一个 ...