如何用更简洁的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
相关产品推荐
相关产品推荐

