#!/usr/bin/python
# -*- coding: UTF-8 -*-
#Python 2.7.5
print "尚省独家赞助"
#from __future__ import print_function
class HanoiTower:
def __init__(self):
self.left = []
self.center = []
self.right = []
self.size = 0
self.count = 0
def init(self):
"""初始化游戏,设置层数并初始化塔"""
while True:
try:
size = int(raw_input("请输入层数(1-10): "))
if 1 <= size <= 10:
self.size = size
self.left = [i*2-1 for i in range(size, 0, -1)]
self.center = []
self.right = []
break
else:
print("层数需在1-10之间!")
except ValueError:
print("请输入有效整数!")
return self.size
def print_tower(self, tower):
"""打印单个塔的一层"""
tower_str = []
for disk in tower:
if disk != -1:
# 计算空格和X的数量
spaces = self.size - (disk - 1) // 2
tower_str.append(" " * spaces + "X" * disk + " " * spaces)
else:
# 空位置用竖线表示
tower_str.append(" " * self.size + "|" + " " * self.size)
return tower_str
def show(self):
"""显示当前游戏状态"""
print("-" * (self.size * 6 + 9))
# 补齐所有塔到相同长度
left_display = self.left + [-1] * (self.size - len(self.left))
center_display = self.center + [-1] * (self.size - len(self.center))
right_display = self.right + [-1] * (self.size - len(self.right))
for i in range(self.size):
left_str = self.print_tower([left_display[i]])[0]
center_str = self.print_tower([center_display[i]])[0]
right_str = self.print_tower([right_display[i]])[0]
print("%s %s %s" % (left_str, center_str, right_str))
print("-" * (self.size * 6 + 9))
print("左塔: 1 中塔: 2 右塔: 3")
def is_valid_move(self, from_tower, to_tower):
"""判断移动是否有效"""
if not from_tower: # 源塔为空
return False
if not to_tower: # 目标塔为空,可以移动
return True
# 源塔顶部小于目标塔顶部时可以移动
return from_tower[-1] < to_tower[-1]
def move_disk(self, from_tower, to_tower):
"""移动圆盘并更新状态"""
if self.is_valid_move(from_tower, to_tower):
disk = from_tower.pop()
to_tower.append(disk)
self.count += 1
return True
return False
def main(self):
"""主游戏循环"""
size = self.init()
min_steps = 2 ** size - 1
print("将左塔完整地移到右塔就是胜利!")
print("左-1 中-2 右-3 退出请输入:quit")
print('例如输入:"1-2"就是将左塔的最上元素放到中塔')
print("%d层的最佳步数是%d" % (size, min_steps))
while True:
print("当前移动了%d步" % self.count)
self.show()
# 检查胜利条件
if self.right == [i*2-1 for i in range(size, 0, -1)]:
if self.count == min_steps:
print("恭喜你使用最少步数%d完成汉诺塔!" % min_steps)
else:
print("恭喜你移动了%d步完成汉诺塔小游戏!" % self.count)
break
# 获取玩家操作
select = raw_input("请操作: ").strip().lower()
if select == "quit":
break
if select in ["1-2", "1-3", "2-1", "2-3", "3-1", "3-2"]:
from_tower_id, to_tower_id = map(int, select.split('-'))
# 映射到对应的塔列表
towers = {1: self.left, 2: self.center, 3: self.right}
from_tower = towers[from_tower_id]
to_tower = towers[to_tower_id]
if not self.move_disk(from_tower, to_tower):
print("操作无效!")
else:
print("操作有误!")
if __name__ == "__main__":
while True:
game = HanoiTower()
game.main()
replay = raw_input("是否再来一局? (y/n): ").strip().lower()
if replay != 'y':
break
Python罗汉塔
最新推荐文章于 2025-12-19 16:26:43 发布
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Python3.9
Conda
Python
Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本
116

被折叠的 条评论
为什么被折叠?



