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
相关产品推荐
相关产品推荐

