【问题标题】:Python Roulette scenarioPython 轮盘赌场景
【发布时间】:2021-10-21 04:36:25
【问题描述】:

我正在检查一个轮盘赌 python 场景。但是,我总是赢,我无法弄清楚我的算法中缺少什么。

这个概念是,我从 bet = 1 on even 开始。如果我输了,我会加倍赌注,直到我赢。如果我赢了,我就回去下注 = 1

我编写了一个简单的 python 脚本,其中 randint 从(-1 到 36)、-1 和 0 用于“双零”和“零”。我在一个 while 循环中运行了这个模拟,直到 1000 次,几乎所有时候,我最终得到的数量都比我开始的要多。我可以使用随机数生成器 randint 来模拟轮盘赌吗?

j = 0
k = 1
while (k<1000): # simulate for 1000 times
    bet = 1
    bank = 1024
    for i in range (1, 100): # Placing 10000 bets
        num = random.randint(-1, 36)
        if num == 0 or num == -1:
            bank = bank - bet
            bet = 2*bet
        elif(num % 2) == 0:# betting on even numbers
            #print("{0} is Even".format(num))
            bank = bank + bet
            bet = 1
        else:
            #print("{0} is Odd".format(num))
            bank = bank - bet
            bet = 2 * bet
        if bank<0: 
            break

    if bank<1024:
        j = j+1 # Count how many times money is lost

    k = k+1


print ('Number of times money lost is', j)

【问题讨论】:

  • 这就是赌场有赌桌限制的原因。如果您被允许无限制下注,那么是的,您最终总是会赢。但是在你赢之前,你不能继续加倍你的赌注。你最终会输。 en.wikipedia.org/wiki/Martingale_(betting_system)
  • 同样在赌场轮盘赌中,您的赌注为零,既不是红色也不是黑色,这会将您的机会降低到 50% 以下。一些赌场也有双零,只是为了降低您获胜的几率。

标签: python probability


【解决方案1】:

首先是几个语法点,一些 Python 特有的:

while (k<1000): # simulate for 1000 times

你实际上是在模拟 999 次,因为 k 从 1 开始计数。

同样:

for i in range (1, 100): # Placing 10000 bets

For in in range 实际上计数到 第二个参数 - 1,因此您的循环从 1 计数到 99,因此您最终得到 99 次迭代,而不是 100 次。

然后,当条件语句中出现括号时 - 在 Python 中你不需要它们,或者至少在你的情况下不需要它们,这与我知道的大多数其他编程语言不同。

while (k&lt;1000): elif(num % 2) == 0: 可以改为: while k&lt;1000:elif num % 2 == 0:

接下来,在您的代码中,您有以下内容: bet = 2*betj = j+1 等等。 好吧,你可以写 bet *= 2j += 1 代替。 许多语言都支持这种语法,此外,如果您分别递增或递减 1,许多语言还允许您编写 j++j--,但 Python 不支持。

我希望这会有所帮助。现在至于你的问题,我相信问题是这样的。我认为赔率实际上并不均匀,甚至不接近。他们倾向于获胜。如果你想得到偶数,你可以这样写:

if num % 2 == 0:
    bank += bet
    bet *= 2
else:
    bank += bet
    bet *= 2

意思是,无论上一次抛硬币是输是赢,你都会加倍下注。如果你这样做,你最终会导致灾难性的结果。

请注意,我对随机指标的了解非常有限,但这个问题对我来说似乎很清楚。因为几率接近 50%,所以在统计上,您更有可能翻转与之前结果相反的结果。由于您在获胜后重新下注,因此接下来的损失会更小。然后,您将赌注加倍并获得双倍的金额。如果你颠倒逻辑并在输了之后重新下注,你赢的少,输的多,最终会再次导致灾难性的结果,给定这个样本量(在嵌套循环中),在 999 次中输掉 999 次。

现在,如果给定原始公式,您将每“回合”的投注次数增加到 10 万次(从嵌套循环中的 99 次),突然之间,您在 999 次中也输掉了近 999 次。这是为什么?好吧,我相信由于该策略每次都依赖于翻转硬币的另一面,因此样本越多,情况并非如此的可能性就越大(这将是维基百科条目弗兰克发布的谈话中的“连败”大约)。

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2018-07-04
    • 2011-03-10
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2014-05-25
    相关资源
    最近更新 更多