You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现克重阶梯计价、计算费用与优惠并修复if elif逻辑错误

问题成因

  1. if/elif判断顺序错误。elif分支是从上到下依次匹配,只要命中第一个符合条件的分支就会终止后续判断。你设置的第二个分支条件equation > 50已经完全覆盖了第三个分支equation >= 180的适用场景,导致第三个分支永远不会被执行。
  2. 判断基准错误。你用初始单价20美元/克算出的总价作为阶梯判断依据,而题目要求的阶梯规则是以克重阈值为判断标准,逻辑和规则不匹配,还容易出现换算错误。
  3. 档位和单价对应错误。你第二个分支使用的14.2857美元/克是14克档位的单价,不符合2.5克到6克区间的计价要求。
  4. 如果出现多个分支同时输出的情况,大概率是你实际运行的代码中误将某个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:36:03