Python列表求和代码结果不符问题排查与修复咨询
订单金额计算错误的原因分析与修复
问题原因
你的代码条件判断逻辑存在漏洞:每个菜品判断都是独立的if语句,且最后一个else仅和**最后一个if(即判断Cheeseburger的条件)**绑定,而非整个条件分支。
以输入Water Nachos Water Cheeseburger为例:
- 处理
Water时,会触发if i == "Water"加4,同时因为不满足if i == "Cheeseburger",会执行else再加5,单次Water实际累加9 - 处理
Nachos时,触发if i == "Nachos"加6,同样不满足Cheeseburger的条件,执行else加5,单次Nachos实际累加11 - 处理
Cheeseburger时,仅触发对应的if加10,不会执行else
最终总和:9+11+9+10=39,与你得到的错误结果完全吻合。
修复方案
方案1:改用elif串联条件判断
把独立的if改成elif,确保每个订单项只会匹配一个条件,else仅在没有匹配到任何预设菜品时执行:
x = input("What are your orders?") orders = x.split() # split()本身返回列表,无需额外转list total = 0 # 避免用sum作为变量名,它是Python内置函数 for item in orders: if item == "Nachos": total += 6 elif item == "Pizza": total += 6 elif item == "Water": total += 4 elif item == "Cheeseburger": total += 10 else: total += 5 print(total)
方案2:用字典映射菜品价格(更简洁易维护)
把菜品和价格存入字典,遍历订单时直接取值,后续新增菜品只需修改字典,代码扩展性更强:
x = input("What are your orders?") orders = x.split() price_map = { "Nachos": 6, "Pizza": 6, "Water": 4, "Cheeseburger": 10 } total = 0 for item in orders: total += price_map.get(item, 5) # 找不到对应菜品时默认加5 print(total)
两种方案测试输入Water Nachos Water Cheeseburger,都会得到预期的24。
内容的提问来源于stack exchange,提问作者jgreene2
相关产品推荐
相关产品推荐

