Python画汉诺塔
源码:
import turtle
class Stack:def __init__(self):self.items = []def isEmpty(self):return len(self.items) == 0def 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(): # 画出汉诺塔的polest = 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画汉诺塔相关推荐
- python 游戏 —— 汉诺塔(Hanoita)
python 游戏 -- 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...
- 汉诺塔游戏java下载,利用python实现汉诺塔游戏
本文实例为大家分享了python实现汉诺塔游戏的具体代码,供大家参考,具体内容如下 一.汉诺塔 汉诺塔问题是一个经典的递归问题,对于这个问题,我们可以把它简单的去看成是如何用n-1去表示n. 在A,B ...
- 用 python 解决汉诺塔问题并附带演示过程
用 python 解决汉诺塔问题并附带演示过程 参考文章: (1)用 python 解决汉诺塔问题并附带演示过程 (2)https://www.cnblogs.com/shinawear/p/1061 ...
- 使用Python查看汉诺塔移动详细过程
汉诺塔属于比较经典的问题,详见以前的文章Python模拟汉诺塔问题移动盘子的过程,基于非递归算法的汉诺塔游戏之Python实现. 本文代码功能:模拟移动汉诺塔上的盘子,并实时显示3根柱子上盘子的情况. ...
- python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例
Python汉诺塔递归问题 python请用递归算法编程解决汉诺塔问题 在线等 关于python递归函数实现汉诺塔 def move(n,a,b,c): #1 if n==1: #2 print(a, ...
- python递归算法 - 汉诺塔问题
python递归算法 - 汉诺塔问题 经典汉诺塔问题: 有三根柱子a,b,c,在一根柱子a上,从下往上按照从大到小的顺序摞着64片黄金圆盘.把所有圆盘从下往上按从大到小的顺序重新摆放在另一根柱子c上. ...
- python堆栈汉诺塔非递归_汉诺塔问题的递归解法和非递归解法(python语言实现)...
汉诺塔问题的非递归解法(python语言类解法) #!/usr/bin/env python #coding:utf-8 import sys import time reload(sys) sys. ...
- 如何用python写汉诺塔游戏的辅助
今天我来分享如何用python写一个游戏的辅助 大游戏的外挂我们写不了但是我们可以写个小游戏–汉诺塔 的外挂,这个游戏相信很多同学都玩过. 开始是三层,还很简单,四层还好,五层六层就有点费脑壳了. 话 ...
- Python实现汉诺塔代码
def hanoi(n,x,y,z):if n == 1:print(x,'-->',c)else:hanoi(n-1,x,z,y) #将前n-个盘子从x移动到y上hanoi(1,x,y,z) ...
最新文章
- [读书笔记]C#中get与set的用法
- python 之GUI设计:Entry组件
- PMcaff O2O 产品峰会:行业最强干货,BAT总监级最佳实战 | 火热报名
- 程序员面试系列——插入排序
- 使用tensoflow serving来部署模型推理节点
- java数学函数Math类
- 单页面响应式模板:黑石
- 如何使用计算机上合并计算方法,Excel2019中合并计算的使用方法
- Pdf 插入图片 | 指定位置插入图片 不改变原格式 直接操作 pdf
- SX1278超时设置与计算
- 杨建荣的学习笔记排行榜(r2笔记100天)
- 阿里身份实名认证实例
- 海思方案技术研发交流群/海思方案供需交流群
- mysql中幻读出现的原因及解决方案
- java计算机毕业设计校园环境保护监督系统源程序+mysql+系统+lw文档+远程调试
- 美团招博士后啦!深度学习、强化学习、计算机视觉与NLP、法学方向
- php 科试题,科学网—《数据库系统原理与技术》试题库试题与参考答案选编6 - 程学先的博文...
- 如何用最短时间学会数据分析?
- 抖音短视频KOL推广真的有效果吗?
- 最小二乘法求解线性回归模型