Python轮盘模拟器:循环调用函数如何避免bet变量被重复重置?
问题分析
你遇到的核心问题是:每次调用Simulate()函数时,函数内部的bet、Money都会重新初始化,上一次下注后的状态无法保留,导致每次循环都从头用初始值1下注。
解决方案
下面提供三种可行的解决方式,你可以根据需求选择:
方式1:使用全局变量
把Money和bet放到函数外部作为全局变量,函数内部通过global声明修改它们,状态会在多次函数调用间保留:
import random # 全局变量保存状态 Money = 65 StartBet = 1 bet = StartBet def Simulate(): # 声明使用全局变量 global Money, bet number = random.randint(0,14) if Money > 0: if 0 < number < 8: Money += bet bet = StartBet print(Money) else: Money -= bet bet *= 2 print(Money) Emulations = 1000 for x in range(Emulations): Simulate()
方式2:通过函数返回值传递状态
让Simulate函数接收当前的资金和下注金额,处理后返回更新后的值,在循环里持续传递这两个状态:
import random StartBet = 1 def Simulate(current_money, current_bet): number = random.randint(0,14) if current_money > 0: if 0 < number < 8: current_money += current_bet current_bet = StartBet print(current_money) else: current_money -= current_bet current_bet *= 2 print(current_money) return current_money, current_bet Emulations = 1000 # 初始化状态 Money = 65 bet = StartBet for x in range(Emulations): # 每次调用后更新状态 Money, bet = Simulate(Money, bet)
方式3:用类封装状态
如果后续需要扩展更多模拟功能,用类封装资金、下注金额等状态会更清晰:
import random class RouletteSimulator: def __init__(self): self.Money = 65 self.StartBet = 1 self.bet = self.StartBet def Simulate(self): number = random.randint(0,14) if self.Money > 0: if 0 < number < 8: self.Money += self.bet self.bet = self.StartBet print(self.Money) else: self.Money -= self.bet self.bet *= 2 print(self.Money) Emulations = 1000 # 创建模拟器实例,状态保存在实例中 simulator = RouletteSimulator() for x in range(Emulations): simulator.Simulate()
方法对比
- 全局变量:实现最简单,但代码规模变大后,全局变量容易导致状态混乱,不利于维护。
- 返回值传递:纯函数风格,无副作用,逻辑清晰,适合小型脚本。
- 类封装:最适合复杂模拟场景,方便添加更多功能(比如记录历史、调整规则等),代码结构更规整。
内容的提问来源于stack exchange,提问作者Makatina
相关产品推荐
相关产品推荐

