You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文本游戏退出与错误命令失效问题排查求助

解决房间移动游戏的命令判断优先级异常问题

你的问题出在退出命令的逻辑判断写错了,看这段代码:

elif command == "Exit" or "exit":

这是Python里常见的逻辑错误——"exit"本身是一个非空字符串,在布尔判断里会被视为True,所以这个条件等价于elif (command == "Exit") or True,不管你输入什么非方向的内容,都会触发退出逻辑,这就是无效命令直接退出的原因。

想要解决这个问题,你需要修正退出命令的判断方式,同时保持合理的判断顺序:

修正方案

  1. 正确书写退出命令的判断逻辑:
    你需要明确判断command等于"Exit"或者等于"exit",而不是只写"exit"。或者更友好一点,把输入转为小写后判断,这样不管用户输入"Exit"、"EXIT"还是"exit"都能识别。
  2. 保持判断顺序:先判断方向命令,再判断退出命令,最后处理无效命令,这样逻辑优先级才正确。

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:50:24