介绍
本篇文章给大家分享的是有关使用python怎么实现一个汉诺塔游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
一。汉诺塔
汉诺塔问题是一个经典的递归问题,对于这个问题,我们可以把它简单的去看成是如何用n - 1去表示n。
在A, B, C三个柱子上,我们先假设一个柱上只有两个盘子,那么很简单,只需要把最上面的那个盘子移到B柱上,再把一个柱上最下面的盘子移到C柱上,最后把B柱的盘子移到C柱就可以了。
假设我们有n个盘子,那么可以把最下面的盘子看成是第n个盘子,而我们要做的是把上面n - 1个盘子移到B柱上,再把第n个盘子移到C柱。我们可以把B柱视为主中转站。
在将n - 1个盘子移到B柱的过程中,我们需要借助C柱作为分中转站,当完成n - 1个盘子的移动时,此时B柱上存在n - 1个盘子,而我们接下来要做的,和之前类似,就是借助把2个盘子移动到柱,把第n - 1个盘子移动到C柱。在移动2个盘子到一个柱时,我们同样要借助C作为分中转站。
二。实例代码
import 海龟 class 堆栈: 自我,def __init__ (): 时间=self.items 才能;[] 自我,def isEmpty (): return 才能len (self.items),==0 ,def 推动(自我,,项): self.items.append才能(项) ,def 流行(自我): return 才能;self.items.pop () 自我,def peek (): if 才能;not  self.isEmpty (): ,,return self.items (len (self.items),安康;1] def 才能;大小(自我): ,,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), 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) #画出汉诺塔的波兰人[0] ,drawpole_1(1) #画出汉诺塔的波兰人[1] ,drawpole_1(2) #画出汉诺塔的波兰人[2] def creat_plates (n): #制造n个盘子 ,盘子=[turtle.Turtle (), for 小姐:拷贝范围(n)) ,for 小姐:拷贝范围(n): 盘子才能[我].up () 盘子才能[我].hideturtle () 盘子才能[我].shape (“square") 盘子才能[我].shapesize(我) 盘子才能[我].goto(-400、-90 + 20 *我) 盘子才能[我].showturtle () return 才能;盘子 def pole_stack(): #制造波兰人的栈 堆栈,波兰人=[(),for 小姐:拷贝范围(3)) return 两极 def moveDisk(盘子,波兰人、fp、tp): #把波兰人(fp)顶端的盘子板(mov)从两极(fp)移到极点(tp) ,mov=波兰人(fp) .peek () ,盘子(mov) .goto ((fp-1) * 400150) ,盘子(mov) .goto ((tp-1) * 400150) (tp), l=波兰人.size() #确定移动到底部的高度(恰好放在原来最上面的盘子上面) ,盘子(mov) .goto ((tp-1) * 400, -90 + 20 * l) def moveTower(板、两极、高度、fromPole, toPole,, withPole): #递归放盘子 ,if height 祝辞=,1: moveTower才能(盘子,波兰人,高度1、fromPole withPole, toPole) moveDisk才能(盘子,波兰人,fromPole toPole) 波兰人(toPole)才能.push(波兰人[fromPole] .pop ()) moveTower才能(盘子,波兰人,高度1、withPole toPole, fromPole) myscreen=turtle.Screen () drawpole_3 () n=int(输入(“请输入汉诺塔的层数并回车:\ n")) 盘子=creat_plates (n) 波兰人=pole_stack () for 小姐:拷贝范围(n): ,波兰人[0].push(我) moveTower(盘子,波兰人,n, 0、2、1) myscreen.exitonclick ()
以上就是使用python怎么实现一个汉诺塔游戏,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。