• Turtle库的建立——汉诺塔


    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("请输入汉诺塔的层数并回车:
    "))
    
    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这部分,可以得到你想要限制的盘的个数,这样就完成了汉诺塔问题。

  • 相关阅读:
    ASP计算周开始和一年有多少周及某年第一周开始日期
    http://www.lancen.net/
    JSP的对象
    两个SQL语句
    sql 分頁
    网页特效制作汇总
    存储过程 解密
    一个计算周次和本周时间范围的代码(c#)
    Java试题
    如何在 VS 2005 里调试 Javascript
  • 原文地址:https://www.cnblogs.com/asd516970982/p/10597803.html
Copyright © 2020-2023  润新知