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

