Python新手求助:如何重构违反DRY原则的重复分支选择代码?
Python三次左右选择流程的代码优化方案
你的代码核心是实现三次左右(l/r)选择的交互,但嵌套结构导致大量重复代码,完全违反DRY(Don't Repeat Yourself)原则。下面是具体的优化思路和实现:
优化思路
- 循环替代嵌套层级:固定3次选择,用
for循环直接控制次数,避免重复编写输入和判断逻辑 - 场景对话结构化存储:把每一步选择对应的反馈文本用字典存储,根据用户选择动态调取,省去重复的
print代码 - 输入合法性校验:封装一个获取有效选择的函数,确保用户只能输入
l或r,避免重复处理无效输入的情况
优化后代码
# 定义各步骤的场景对话,键为选择路径(比如第一次选r、第二次选l的路径是"r-l") scene_dialogues = { "1-r": "你选择了右,看到一扇紧闭的木门,接下来要向左还是向右前进?", "1-l": "你选择了左,看到一条黑暗的走廊,接下来要向左还是向右前进?", "2-r-r": "你再次选择右,木门缓缓打开,里面是一间堆满书籍的书房,接下来要向左还是向右前进?", "2-r-l": "你选择左,走廊尽头出现了通往地下室的楼梯,接下来要向左还是向右前进?", "2-l-r": "你选择右,走廊旁的房间透出微光,接下来要向左还是向右前进?", "2-l-l": "你再次选择左,走到了一扇铁门前,接下来要向左还是向右前进?", # 第三次选择的结局对话 "3-r-r-r": "你推开书房的后门,来到了一个小花园,探索结束!", "3-r-r-l": "你从书房返回走廊,遇到了一只小猫,探索结束!", "3-r-l-r": "你走下地下室,发现了一箱旧玩具,探索结束!", "3-r-l-l": "你在地下室深处找到了一个宝箱,探索结束!", "3-l-r-r": "你走进亮着微光的房间,里面是一间卧室,探索结束!", "3-l-r-l": "你从房间回到走廊,找到了出口,探索结束!", "3-l-l-r": "你打开铁门,外面是一条小巷,探索结束!", "3-l-l-l": "你沿着铁门旁的小路走,来到了小镇广场,探索结束!" } def get_valid_choice(step): """获取用户的有效选择(l或r)""" while True: choice = input(f"第{step}次选择:Choose Right(r) or Left(l): ").strip().lower() if choice in ["l", "r"]: return choice print("输入无效,请输入l或r!") # 记录用户的选择路径 choice_path = [] for step in range(1, 4): # 获取有效选择 current_choice = get_valid_choice(step) choice_path.append(current_choice) # 生成当前步骤的场景键 scene_key = f"{step}-{'-'.join(choice_path)}" # 打印对应对话 print(scene_dialogues[scene_key]) # 打印最终结局 final_key = f"3-{'-'.join(choice_path)}" print(scene_dialogues[final_key])
代码说明
- 场景对话字典:把每个选择分支对应的文本统一存储,后续只需根据用户的选择路径调取,避免重复写
print语句 - 输入验证函数:
get_valid_choice函数负责处理用户输入,确保只能输入l或r,重复的输入校验逻辑只写一次 - 循环控制流程:用
for循环执行3次选择,每次记录用户的选择,生成对应的场景键,动态获取对话内容,彻底消除嵌套重复
内容的提问来源于stack exchange,提问作者Asher Hein
相关产品推荐
相关产品推荐

