Python瓶子回收押金核算程序金额统计异常问题求助
瓶子回收押金核算程序故障排查与修复
核心问题点
- 条件判断逻辑完全失效:现有代码
if 0/elif 1等语句是直接判断常量真假,未和输入的瓶子类型bottle做匹配,0恒为假,所以会永远命中elif 1分支,所有瓶子都按10欧分计算,同时未处理无押金的类型5场景。 - 累加逻辑顺序错误:循环内先执行押金累加,再输入新瓶子、计算对应押金,初始c为0导致第一个瓶子的押金直接被漏掉,最后一次输入的合法瓶子押金也不会被计入总和。
- 欧元单位换算逻辑错误:计算剩余欧分的循环仅执行了
sum-100未将结果赋值回sum,不仅不会得到正确余数,还会进入死循环,完全可以用取模运算代替循环实现。 - 变量命名不规范:使用了Python内置函数名
sum作为变量名,存在潜在冲突风险。
修复后的完整代码
def main(): CAN = 0 GLASS_BOTTLE = 1 PLASTIC_SMALL = 2 PLASTIC_NORMAL = 3 PLASTIC_BIG = 4 NO_DEPOSIT_BOTTLE = 5 CAN_DEPOSIT = 15 # 单位:欧分 GLASS_BOTTLE_DEPOSIT = 10 # 单位:欧分 PLASTIC_SMALL_DEPOSIT = 10 # 单位:欧分 PLASTIC_NORMAL_DEPOSIT = 20 # 单位:欧分 PLASTIC_BIG_DEPOSIT = 40 # 单位:欧分 print("欢迎使用瓶子回收核算系统") print("瓶子类型对应编号如下:") print("易拉罐:0") print("玻璃瓶:1") print("塑料瓶(0.33升):2") print("塑料瓶(0.5升):3") print("塑料瓶(1.5升):4") print("无押金瓶子:5") bottle = int(input("输入第一个瓶子的类型,输入负数结束录入:\n")) total_cents = 0 while bottle >= 0: # 计算当前瓶子对应押金 if bottle == CAN: c = CAN_DEPOSIT elif bottle == GLASS_BOTTLE: c = GLASS_BOTTLE_DEPOSIT elif bottle == PLASTIC_SMALL: c = PLASTIC_SMALL_DEPOSIT elif bottle == PLASTIC_NORMAL: c = PLASTIC_NORMAL_DEPOSIT elif bottle == PLASTIC_BIG: c = PLASTIC_BIG_DEPOSIT else: c = 0 # 累加押金 total_cents += c # 录入下一个瓶子 bottle = int(input("输入下一个瓶子的类型,输入负数结束录入:\n")) euros = total_cents // 100 cents = total_cents % 100 print("您退回的瓶子总共可兑换", euros, "欧元和", cents, "欧分") main()
内容的提问来源于stack exchange,提问作者ottok07
相关产品推荐
相关产品推荐

