其他分享
首页 > 其他分享> > 汉诺塔

汉诺塔

作者:互联网

 

 

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(200*(k-1), 100)
t.down()
t.goto(200*(k-1), -100)
t.goto(200*(k-1)-20, -100)
t.goto(200*(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,8-i)
plates[i].goto(-200,-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)*200,150)
plates[mov].goto((tp-1)*200,150)
l=poles[tp].size()
plates[mov].goto((tp-1)*200,-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()

标签:200,goto,汉诺塔,self,poles,plates,def
来源: https://www.cnblogs.com/gzzfh/p/12603244.html