如何避免Python多输入组合场景下的嵌套if-elif-else冗余?
如何避免针对多组Y/N输入写大量嵌套条件判断?
先看你现在的输入代码(纠正Python里的类型转换错误,应该用str()而非string()):
user_input_1 = str(input("Y/N")) user_input_2 = str(input("Y/N")) ... user_input_10 = str(input("Y/N"))
问题很明确:10个Y/N输入有2^10=1024种组合,每个组合对应不同操作,要是用嵌套if-elif-else写,得搞出几百上千行冗余代码,维护起来简直噩梦。
直接用字典映射就能解决这个问题,思路很简单:把所有输入拼成一个字符串当键,对应的值就是该组合要执行的函数,直接通过键找操作,完全不用嵌套条件。
具体实现步骤
1. 简化输入收集,拼成统一的键
别写10行重复的输入代码,用循环搞定,还能加个输入校验防止用户瞎输:
inputs = [] for _ in range(10): res = input("Y/N").strip().upper() # 强制校验输入只能是Y或N while res not in ("Y", "N"): res = input("别瞎输,就输Y或N:").strip().upper() inputs.append(res) # 把10个输入拼成一个字符串,比如"YYYYYYYYYY"或"YNYNYNYNYN" input_key = "".join(inputs)
2. 给每个组合定义对应操作函数
按业务需求写每个组合要执行的逻辑,函数名尽量贴合实际功能,别搞抽象命名:
def handle_all_y(): # 全Y对应的操作 print("执行全选是的业务逻辑") def handle_y_n_alternate(): # Y/N交替对应的操作 print("执行Y和N交替的业务逻辑") # 剩下的1022种组合,对应写各自的函数就行...
3. 用字典做映射,直接调用对应函数
把输入组合和函数一一对应放进字典,然后通过输入的键直接触发操作,还能加个默认处理应对意外情况:
action_map = { "YYYYYYYYYY": handle_all_y, "YNYNYNYNYN": handle_y_n_alternate, # 把所有组合的键值对都放进来... } # 执行操作,找不到对应组合就走默认逻辑 action_map.get(input_key, lambda: print("当前输入组合无对应操作"))()
额外优化小技巧
- 如果好几个组合的操作逻辑差不多,可以提取公共函数,减少重复代码
- 要是组合太多,写字典的时候可以按规律批量生成(比如用循环生成某些有规律的键值对)
- 函数名尽量用业务相关的命名,比如
handle_user_confirm_all()比do_case1好懂100倍
内容的提问来源于stack exchange,提问作者eternity
相关产品推荐
相关产品推荐

