Python文本游戏退出与错误命令失效问题排查求助
解决房间移动游戏的命令判断优先级异常问题
你的问题出在退出命令的逻辑判断写错了,看这段代码:
elif command == "Exit" or "exit":
这是Python里常见的逻辑错误——"exit"本身是一个非空字符串,在布尔判断里会被视为True,所以这个条件等价于elif (command == "Exit") or True,不管你输入什么非方向的内容,都会触发退出逻辑,这就是无效命令直接退出的原因。
想要解决这个问题,你需要修正退出命令的判断方式,同时保持合理的判断顺序:
修正方案
- 正确书写退出命令的判断逻辑:
你需要明确判断command等于"Exit"或者等于"exit",而不是只写"exit"。或者更友好一点,把输入转为小写后判断,这样不管用户输入"Exit"、"EXIT"还是"exit"都能识别。 - 保持判断顺序:先判断方向命令,再判断退出命令,最后处理无效命令,这样逻辑优先级才正确。
修正后的完整代码
rooms = { 'Foyer': {'name': 'Foyer', 'South': 'Dining Hall', 'North': 'Hallway', 'West': 'Courtyard', 'East': 'Grand Hall'}, 'Dining Hall': {'name': 'Dining Hall', 'South': 'Servants Quarters', 'East': 'Kitchen', 'North': 'Foyer', 'West': 'Drawing Room'}, 'Servants Quarters': {'name': 'Servants Quarters', 'North': 'Dining Hall'}, 'Drawing Room': {'name': 'Drawing Room', 'East': 'Dining Hall'}, 'Kitchen': {'name': 'Kitchen', 'West': 'Dining Hall'}, 'Courtyard': {'name': 'Courtyard', 'East': 'Foyer'}, 'Grand Hall': {'name': 'Grand Hall'}, 'Hallway': {'name': 'Hallway', 'South': 'Foyer', 'East': 'Private Library'}, 'Private Library': {'name': 'Private Library', 'West': 'Hallway', 'East': 'Master Bedroom'}, 'Master Bedroom': {'name': 'Master Bedroom', 'West': 'Private Library'} } directions = ['North', 'South', 'East', 'West'] player_room = rooms['Foyer'] while True: print() print('You have entered the {}.'.format(player_room['name'])) command = input('\nEnter a direction: North, South, East, or West (or type exit to quit)') # 先判断方向命令 if command in directions: if command in player_room: player_room = rooms[player_room[command]] else: print("You face a wall. There is no doorway here.") # 再判断退出命令(转为小写,兼容各种大小写输入) elif command.lower() == "exit": print("Play again soon.") break # 最后处理无效命令 else: print("Type a cardinal direction to move. Or type 'exit' to quit. Directions are case-sensitive.")
关键修改说明
- 把退出判断改成
command.lower() == "exit",这样用户输入任何大小写的"exit"都能触发退出,同时避免了逻辑错误。 - 保持判断顺序:方向→退出→无效命令,确保每种输入都能进入正确的分支。
内容的提问来源于stack exchange,提问作者Hom
相关产品推荐
相关产品推荐

