python面对对象汉诺塔_如何使用python实现的汉诺塔的小程序
python是面向?qū)ο蟮恼Z言,但是做面向過程的操作,也是得心應(yīng)手。
代碼如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from requests.exceptions import RequestException
#定義棧,作為塔的數(shù)據(jù)結(jié)構(gòu)
class Stack(object):
def __init__(self, name):
self.items = []
self.name = name;
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items) - 1]
def size(self):
return len(self.items)
#定義移動的塊
class Block(object):
def __init__(self, size, location):
self.size = size
self.location = location
def setlocation(location):
self.location = location
#移動漢諾塔
def moveblock(s1,s2):
if(s1.size() > 0):
if (s2.size() ==0) or ((s2.size() > 0) and (s2.peek().id > s1.peek().id)):
b = s1.pop()
s2.push(b)
b.location = s2.name
print (b.id, s1.name, "--->", s2.name)
else:
print("can not move")
#顯示漢諾塔
def display(s1,s2,s3):
disp(s1)
disp(s2)
disp(s3)
def disp(s):
st=Stack(s.name)
print(s.name)
while(s.size()>0):
b = s.pop()
print(b.id)
st.push(b)
while(st.size()>0):
s.push(st.pop())
#移動漢諾塔
def hanoi(n, a, b, c):
if (n == 1):
moveblock(a, c)
else:
hanoi(n - 1, a, c, b)
moveblock(a, c)
hanoi(n - 1, b, a, c)
#主程序,傳入漢諾塔的層高
def main(n):
#定義三個塔
sLeft = Stack("left")
sMiddles = Stack("middle")
sRights = Stack("right")
# 定義n層Block
for i in range(n):
block = Block(n-i,"left")
sLeft.push(block)
display(sLeft, sMiddles, sRights)
hanoi(n, sLeft, sMiddles, sRights)
display(sLeft,sMiddles, sRights)
if __name__ == ‘__main__‘:
main(5)
程序運行結(jié)果:
left
1
2
3
4
5
middle
right
1 left ---> right
2 left ---> middle
1 right ---> middle
3 left ---> right
1 middle ---> left
2 middle ---> right
1 left ---> right
4 left ---> middle
1 right ---> middle
2 right ---> left
1 middle ---> left
3 right ---> middle
1 left ---> right
2 left ---> middle
1 right ---> middle
5 left ---> right
1 middle ---> left
2 middle ---> right
1 left ---> right
3 middle ---> left
1 right ---> middle
2 right ---> left
1 middle ---> left
4 middle ---> right
1 left ---> right
2 left ---> middle
1 right ---> middle
3 left ---> right
1 middle ---> left
2 middle ---> right
1 left ---> right
left
middle
right
1
2
3
4
5
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的python面对对象汉诺塔_如何使用python实现的汉诺塔的小程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lambda也是python_Pytho
- 下一篇: 有中国银行卡可以贷款吗