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

Python如何实现循环及变量更新?经济模拟器循环时变量重置问题求解

问题根本原因

你遇到的变量不更新问题主要由变量作用域规则、赋值逻辑错误、计算值未回写三个核心问题导致,具体修复方案如下:


需修正的错误点

  • 函数内修改全局变量必须加global声明,否则函数内的同名变量会被识别为局部变量,不会修改全局的数值,自然每次循环都会显示初始值
  • 库存更新逻辑写反,当前代码是把库存值覆盖了购买量,应该是购买量累加到库存中
  • 扣费逻辑只是计算了差值,没有把结果赋值回money变量,所以资金不会变化
  • 价格、资金的格式化字符串仅在程序启动时计算一次,后续变量更新后格式化字符串不会同步变更,需要每次打印时动态生成
  • 用递归调用buysale()实现循环容易触发栈溢出,建议改用while循环实现持续交互

修正后可运行代码

import time

# 全局变量定义
money = 2
woodsalea = 1 
woodinv = 0
woodprice = woodsalea * 2
foodinv = 0
foodsalea = 1
foodprice = foodsalea * 2

def start():
    # 每次打印时动态生成格式化字符串,保证数值同步更新
    woodpricefo = "{:.2f}".format(woodprice)
    foodpricefo = "{:.2f}".format(foodprice)
    print("Products are wood food and stone")
    print(f"Prices are wood {woodpricefo} food {foodpricefo} stone")

def buysale():
    global money, woodinv, woodsalea # 声明要修改的全局变量
    while True: # 用循环实现持续交互,替代递归避免栈溢出
        bos = input("Buy, Sell or Check Inventory?\n")
        if bos == "Buy":
            btyp = input("Wood, Food, Or Stone?\n")
            if btyp == "Wood":
                amntw = input("0-100\n")
                amntw = float(amntw)
                buywcost = amntw * woodprice
                buywcostfo = "{:.2f}".format(buywcost)
                moneyfo = "{:.2f}".format(money)
                print(f"That will be ${buywcostfo} you have {moneyfo} dollars would you still like to buy?")
                buywyn = input("Yes Or No\n")
                if buywyn == "Yes" and money >= buywcost:
                    print("You have bought Wood")
                    woodinv += amntw # 购买量加到库存
                    money -= buywcost # 扣除对应资金
                    woodsalea = amntw
                    print(f"当前可售木头数量: {woodsalea}")
                    print(f"本次购买木头数量: {amntw}")
                    print(f"剩余资金: {money:.2f}")
                    start()
        elif bos == "Sell":
            styp = input("Wood, Food, Or Stone\n")
            if styp == "Wood":
                amntw = float(input("0-100\n"))
                # 按照相同逻辑补全售卖逻辑即可
        elif bos == "Check Inventory":
            print(f"资金:{money:.2f},木头库存:{woodinv},食物库存:{foodinv}")

start()
buysale()

内容的提问来源于stack exchange,提问作者Student Aiden Kai MaKenzie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:27:02