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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:57:15