如何使用循环避免条件判断语句中的重复代码逻辑
优化方案
你这段重复的分支逻辑完全可以通过「预构建选项映射+通用逻辑复用」的方式重构,不需要写冗余的多分支判断,也不需要硬编码索引。
原有代码的问题
- 8个分支的执行逻辑100%重复,仅取商品的索引不同,后续增删商品需要修改大量重复代码,极易出错
- 每次进入分支都重复执行
list(dairyDict.keys())、list(dairyDict.values())做字典到列表的转换,存在不必要的性能开销 - 依赖字典的插入顺序匹配索引,在Python3.7以下版本中字典默认无序,会出现商品匹配错误的问题
- 没有处理非法输入的场景,用户输错编码时程序无任何反馈
重构步骤
- 先在业务初始化阶段(只需要执行1次)构建选项ID到商品信息的映射表,彻底避免重复的类型转换和索引硬编码:
# 一次性提取乳制品分类下的所有商品,生成选项映射 dairy_items = list(dairyDict.items()) item_option_map = {} for index, (item_key, item_price) in enumerate(dairy_items): # 按原有规则生成选项ID:A1对应第1个商品,A2对应第2个,以此类推 option_code = f"A{index + 1}" # 按原有逻辑截取商品名(去掉key前4位的分类前缀) item_name = item_key[4:] item_option_map[option_code] = (item_name, item_price)
- 把原来所有
if-elif分支全部替换为下面的通用逻辑,功能和原有代码完全一致:
if itemInput in item_option_map: quantityInput = input('Please state quantity of item: ') product_name, product_price = item_option_map[itemInput] # 按原有格式拼接购物车条目 shoppingList.append( f"Product:{product_name} -- Quantity: {quantityInput} -- Price: ${float(product_price):.2f}" ) additionalitemcategoryPrompt(quantityInput) else: # 可选:增加非法输入提示,原有代码无该逻辑,不需要可以删除 print("无效的商品编码,请重新输入")
重构收益
- 代码量压缩80%以上,后续新增/删除乳制品商品时,只需要修改
dairyDict的内容,映射表会自动生成对应选项,不需要修改任何判断逻辑 - 仅做1次字典转列表的操作,性能更好
- 逻辑更清晰,不存在重复代码,排查问题时不需要逐分支核对
- 补充了非法输入的处理,交互体验更好
内容的提问来源于stack exchange,提问作者Raj Boi
相关产品推荐
相关产品推荐

