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

Python字典操作开发虚拟咖啡机 资源统计异常问题排查

问题根因
  • 报表数据不更新:你在程序初始化时将resources字典中的原料值赋值给了独立全局变量water/milk/coffee,Python中整数为不可变类型,这步操作是值拷贝,相当于把初始状态的原料数复制了一份单独存储。后续for循环扣减资源时只修改了resources字典内的数值,这三个独立变量从未被同步更新,调用report()时传入的始终是程序启动时的初始值,自然看不到资源变动。
  • 资源余量出现负数:如果资源校验逻辑check_resources读取的是那三个从未更新的独立变量,而非resources字典的实时值,那么无论字典里的实际资源被扣到多少,校验永远会判定“资源充足”,允许扣减逻辑执行,多次下单后字典内的资源值就会被扣成负数。即使你当前贴的代码里check_resources读的是字典,多份数据存储的逻辑本身就有隐患,很容易在后续修改时出现校验读旧值、扣减改新值的问题,导致负数。
修复方案
  • 第一步:删除开头定义的三个独立全局变量water = resources["water"]、milk = resources["milk"]、coffee = resources["coffee"],所有原料数据统一存在resources字典中,只维护一份数据源,从根源避免数据不一致。
  • 第二步:修改report函数,直接读取resources字典的实时值打印,不再依赖外部传入独立原料变量,修改后的代码如下:
def report(money_in_box):
    print("The coffee machine has:")
    print(f"Water: {resources['water']}ml")
    print(f"Milk: {resources['milk']}ml")
    print(f"Coffee: {resources['coffee']}g")
    print(f"Money: ${format(money_in_box, '.2f')}")
  • 第三步:调整主循环里的report调用逻辑,把原来的report(water, milk, coffee, money_profit)改为report(money_profit)即可。
修复后验证

修改完成后,每次下单扣减的是resources字典的值,报表读取的也是同一份字典的实时数据,资源校验时也读这份数据,就不会再出现报表不更新、资源扣成负数的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:39:18