如何用Python实现克重阶梯计价、计算费用与优惠并修复if elif逻辑错误
问题成因
if/elif判断顺序错误。elif分支是从上到下依次匹配,只要命中第一个符合条件的分支就会终止后续判断。你设置的第二个分支条件equation > 50已经完全覆盖了第三个分支equation >= 180的适用场景,导致第三个分支永远不会被执行。- 判断基准错误。你用初始单价20美元/克算出的总价作为阶梯判断依据,而题目要求的阶梯规则是以克重阈值为判断标准,逻辑和规则不匹配,还容易出现换算错误。
- 档位和单价对应错误。你第二个分支使用的14.2857美元/克是14克档位的单价,不符合2.5克到6克区间的计价要求。
- 如果出现多个分支同时输出的情况,大概率是你实际运行的代码中误将某个
elif写成了独立的if语句,独立if不会受前面分支的影响,会挨个判断执行,就会出现多次输出的问题。
修复方案
首先梳理清楚题目给定的阶梯计价规则,按克重阈值从高到低匹配,避免低阈值分支覆盖高阈值分支,同时统一计算逻辑减少重复代码,修复后的代码如下:
# 读取输入的克重 grams = float(input("请输入目标克数:")) # 按最高单价计算的原价,用于计算优惠 original_total = grams * 20 # 从高到低匹配克重阈值,获取对应档位的单价 if grams >= 28: unit_price = 360 / 28 elif grams >= 14: unit_price = 180 / 14 elif grams >= 6: unit_price = 100 / 6 elif grams >= 2.5: unit_price = 50 / 2.5 else: unit_price = 20 # 计算最终价格和节省金额 final_total = grams * unit_price saved = original_total - final_total # 输出结果 print(f'That would be $ {round(final_total, 2)}') if saved > 0: print(f'You saved $ {round(saved, 2)}')
这个写法的优势:
- 直接以克重为判断基准,完全匹配题目给出的阶梯规则,不会出现换算错误
- 从最高克重阈值开始判断,不会出现分支覆盖的问题
- 所有计算逻辑统一,没有重复代码,后续调整档位只需要修改对应分支的阈值和单价即可
内容的提问来源于stack exchange,提问作者NewWalker
相关产品推荐
相关产品推荐

