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

Python中如何校验兑换奖品总花费避免积分余额低于0

问题根因

你的代码核心问题出在判断条件错误:你直接将奖品兑换数量和当前积分余额做对比,没有先计算该类奖品的总花费(数量×对应单价)再做校验。比如你余额100,兑换3个单价35的木质蛇,3<100判断为真,实际总花费105>100,扣减后余额自然变成负数。
另外你代码里重复复用prize1、prize2变量属于不必要的写法,建议用结构化的方式管理奖品配置,减少冗余代码。

修复后可运行代码
balance = 100
# 统一配置奖品:(奖品名称, 单价),后续新增/修改奖品直接改这个列表即可
prizes = [
    ("荧光棒", 10),
    ("特大号眼镜", 15),
    ("充气锤", 25),
    ("恐龙抓抓器", 30),
    ("木质蛇", 35),
    ("泡沫剑", 40)
]

for prize_name, unit_price in prizes:
    while True:
        # 获取用户输入
        count = int(input(f"请告诉我你要兑换多少个{prize_name}:"))
        # 先校验数量合法性,不能是负数
        if count < 0:
            print("兑换数量不能为负数,请重新输入")
            continue
        # 计算当前奖品总花费
        total_cost = count * unit_price
        # 校验花费是否超过余额
        if total_cost > balance:
            print(f"你兑换的{prize_name}总花费超过当前余额,请调整兑换数量")
        else:
            # 扣减积分
            balance -= total_cost
            print(f"兑换成功,当前余额为{balance}积分")
            break
功能说明
  • 每次兑换前会先计算对应数量奖品的总花费,确认不会超过余额后才会扣减积分,彻底避免余额变负的问题
  • 增加了数量合法性校验,避免用户输入负数兑换数量
  • 用奖品配置列表统一管理所有奖品,后续调整奖品名称、单价、新增删除奖品都只需要修改配置列表,不需要修改业务逻辑代码
  • 单个奖品兑换数量不符合要求时会让用户重新输入当前奖品的数量,不会直接中断整个兑换流程,用户体验更好

内容的提问来源于stack exchange,提问作者Nebula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:06:03