1. 程式人生 > >python運用turtle 畫出漢諾塔搬運過程

python運用turtle 畫出漢諾塔搬運過程

ole square 文件中 isempty str data- mce top family

1.打開 IDLE 點擊File-New File 新建立一個py文件

技術分享圖片

2.py文件中輸入如下代碼

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), 300)
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): #按照輸入的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,300)
plates[mov].goto((tp-1)*400,300)
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()

技術分享圖片

3. 點擊Run-Run Module 或者F5 運行程序

技術分享圖片

這個時候會出現兩個窗口,在左邊窗口按照提示輸入,右邊則是turtle的畫布

技術分享圖片

4 輸入的數字越大,花的時間更久,然後要防止自己的電腦cpu過載!!

可自行輸入別的數字

python運用turtle 畫出漢諾塔搬運過程