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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:48:03