改写汉诺塔程序为类的形式,增加init函数初始化汉诺塔的层 数,并实例化生成不同层数的汉诺塔实现挪动
时间: 2023-11-20 16:43:57 浏览: 83
一个关于汉诺塔的程序
以下是改写后的代码:
```python
class Hanoi:
def __init__(self, n):
self.n = n
self.tower1 = list(range(n, 0, -1))
self.tower2 = []
self.tower3 = []
def move(self, source, target):
disk = source.pop()
target.append(disk)
def solve(self, source, target, auxiliary, n):
if n == 1:
self.move(source, target)
else:
self.solve(source, auxiliary, target, n-1)
self.move(source, target)
self.solve(auxiliary, target, source, n-1)
def print_towers(self):
for i in range(self.n):
print(self.tower1[i] if len(self.tower1) > i else ' ', end=' ')
print(self.tower2[i] if len(self.tower2) > i else ' ', end=' ')
print(self.tower3[i] if len(self.tower3) > i else ' ', end=' ')
print()
n = int(input("Enter the number of disks: "))
hanoi = Hanoi(n)
hanoi.print_towers()
hanoi.solve(hanoi.tower1, hanoi.tower3, hanoi.tower2, n)
hanoi.print_towers()
```
在这个类中,我们使用了 `__init__` 函数来初始化汉诺塔的层数,并将三个塔的列表作为属性进行了定义。`move` 函数用于将某个塔的顶部盘子弹出并放入目标塔的顶部。`solve` 函数实现了递归的汉诺塔算法。`print_towers` 函数用于打印当前三个塔的状态。
最后,我们通过实例化 `Hanoi` 类来生成不同层数的汉诺塔,并调用 `solve` 函数来实现挪动。
阅读全文