• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python绘制汉诺塔

    本文实例为大家分享了python绘制汉诺塔的具体代码,供大家参考,具体内容如下

    源码:

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

    效果图:

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 看看如何用Python绘制小米新版天价logo
    • Python绘制分类图的方法
    • 用Python的绘图库(matplotlib)绘制小波能量谱
    • python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
    • python 绘制斜率图进行对比分析
    • 通过python读取txt文件和绘制柱形图的实现代码
    • python爬取股票最新数据并用excel绘制树状图的示例
    • 用python 绘制茎叶图和复合饼图
    • 教你怎么用python绘制dotplot
    上一篇:彻底解决pip下载pytorch慢的问题方法
    下一篇:利用python实现汉诺塔游戏
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python绘制汉诺塔 python,绘制,汉诺塔,python,