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

如何用更简洁的Python代码处理文本游戏中的所有用户输入?

优化文本游戏输入处理的代码方案

核心问题分析

原代码嵌套多层while循环,存在逻辑重复、冗余杂乱的问题,且未正确接收choose_dir()的返回值(这会导致user_dir无法更新,是潜在bug)。

优化后的代码

def change_room():
    # 定义合法方向集合,成员查找效率更高
    valid_dirs = {'N', 'S', 'E', 'W'}
    while True:
        # 每次循环重新获取用户输入,确保值更新
        user_dir = choose_dir()
        
        # 校验输入是否为合法方向
        if user_dir not in valid_dirs:
            print("Invalid entry.")
            continue
        
        # 校验该方向是否可达
        if rooms[current_room][user_dir] == 'None':
            print("Can't go that way.")
            continue
        
        # 输入合法且方向可达,退出循环
        break
    
    # 此处添加切换房间的逻辑,例如:
    # current_room = rooms[current_room][user_dir]

优化点说明

  • 用单个while True循环替代多层嵌套,逻辑线性清晰,避免重复代码
  • 使用集合存储合法方向,相比列表,成员查找的效率更高(小数据量差异不明显,但符合Python最佳实践)
  • 修正了原代码中未接收choose_dir()返回值的问题,确保每次输入后user_dir能正确更新
  • 分层校验:先检查输入合法性,再检查方向可达性,不符合条件就直接进入下一轮循环,无需嵌套

额外建议

  • 如果你的rooms字典中,不可达方向存储的是Python空值None而非字符串'None',请将判断条件改为if rooms[current_room][user_dir] is None:,这是更规范的写法
  • 确保choose_dir()函数正确返回用户输入的方向(建议统一转为大写,避免大小写不匹配),示例如下:
def choose_dir():
    return input("Please enter a direction (N/S/E/W): ").strip().upper()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:15:43