如何使用python实现的汉诺塔的小程序

Posted Montai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用python实现的汉诺塔的小程序相关的知识,希望对你有一定的参考价值。

python是面向对象的语言,但是做面向过程的操作,也是得心应手。

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from requests.exceptions import RequestException

#定义栈,作为塔的数据结构
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)

程序运行结果:

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

 

以上是关于如何使用python实现的汉诺塔的小程序的主要内容,如果未能解决你的问题,请参考以下文章

用python turtle实现汉诺塔的移动

汉诺塔的递归算法

递归3之汉诺塔的实现

python汉诺塔非递归

7-17 汉诺塔的非递归实现 (25分)

汉诺塔的非递归实现(栈)