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

Python字典校验输入时无法同时识别方向、退出参数怎么办

简化版龙文本游戏输入校验Bug修复

问题现象

代码预期支持两类合法用户输入:移动方向指令、退出指令,但实际运行时始终无法同时识别两类参数:

  • 初始版本输入exit可正常识别,输入south持续弹出「Invalid entry」提示无法通过校验
  • 调整代码后又出现仅能识别south、无法识别exit的问题

核心错误原因

  • 布尔运算逻辑错误:校验循环中写的validate['down' and 'exits']不符合Python语法规则。非空字符串做and运算时会返回最后一个真值,'down' and 'exits'实际运算结果为'exits',这行代码等价于while next_move not in validate['exits'],也就是仅判断输入是否是字符串exit的子串,自然无法识别south;如果手动把键改成'down',又会变成仅判断输入是否是south的子串,无法识别exit
  • 成员判断逻辑漏洞:if next_move in validate['down']是判断输入是否为字符串south的子串,而非判断输入和有效值完全相等,会出现输入s/so这类短字符也被误判为合法的问题
  • 无效分支语句:else块中的next_move in validate['exits']仅做了布尔计算,没有实际分支控制作用,只要走到else分支就会直接执行退出,不管输入内容是什么
  • 输入鲁棒性缺失:没有对用户输入做大小写、首尾空格的统一处理,用户输入South/south这类格式时会被误判为无效
  • 字符串语法错误:初始input提示的字符串直接折行书写,会触发Python语法报错

修正后可运行代码

# 房间映射字典,定义房间之间的连通关系
rooms = {
        'Great Hall': {'South': 'Bedroom'},
        'Bedroom': {'North': 'Great Hall', 'East': 'Cellar'},
        'Cellar': {'West': 'Bedroom'}
    }

# 打印空行优化终端显示
print('\n' * 10)

# 初始化游戏状态
print('Your starting and current location is the Great Hall.\n')
current_room = 'Great Hall'
# 定义当前场景下的合法输入集合
valid_inputs = {'south', 'exit'}

# 获取用户初始输入,统一转小写、去除首尾空格避免格式问题
next_move = input('You can only travel south from the Great Hall. \nEnter south to continue or exit:').strip().lower()

# 循环校验输入,直到用户输入合法值
while next_move not in valid_inputs:
    print('\nInvalid entry.\n')
    next_move = input('\nEnter south or exit:').strip().lower()

# 分支处理合法输入
if next_move == 'south':
    print('\nYou are now in the Bedroom.')
    current_room = 'Bedroom'
else:
    exit('\nThanks for playing. Goodbye.')

内容的提问来源于stack exchange,提问作者TammyJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:57:42