gpt4 book ai didi

python - 抛硬币模拟意外概率

转载 作者:行者123 更新时间:2023-12-01 02:00:49 24 4
gpt4 key购买 nike

这是我编写的一个脚本,用于模拟抛硬币游戏,该游戏以给定的固定结果序列结束(抛硬币要么是 1,要么是 0)。这种固定的顺序是游戏的特点。例如,coin_series('01') 模拟一系列 throw ,最终出现 0,随后出现 1;有效结果为 x01,其中 x 是由零和 1 组成的字符串,任何地方都不包含模式 01

该脚本给出了终止两个游戏所需的 throw 次数,0111,并且这些游戏应该具有相同的结果,因为硬币不是有偏差的(抛掷结果为零或结果一的机会均等)。

但事实并非如此,我的输出分别是 6 和 4,其中只有第一个是正确的。所以我的脚本中肯定有一个错误。

我的问题是:如何使脚本更加简洁,因为我希望这将有助于找到错误;其次,是否存在除了我之外所有人都明显的错误?

import numpy as np
class coin_series(object):
def __init__(self,win_state): #win_state is a string of ones and zeroes
self.win_state=win_state
self.d=self.draw()
self.series=[self.d.next() for i in range(len(self.win_state))]
self.n=len(self.win_state)
while not self.check():
self.play()
def draw(self):
while True:
t=np.random.rand()
if t>=0.5:
yield 1
else:
yield 0
def check(self):
return(self.win_state==''.join(map(str,self.series)))
def play(self):
self.series=self.series[1:]+[self.d.next()]
self.n+=1
if __name__=='__main__':
print np.mean([coin_series('11').n for i in range(100000)])
print np.mean([coin_series('01').n for i in range(100000)])

最佳答案

这不是错误,您的代码运行得很好!

当你抛硬币时,如果你的目标是0,那么你的目标是1,你会得到0,但 1 最终成为另一个 0,那么你仍然已经完成了一半,你只是希望再次得到 1

另一方面,如果您的目标是 1,然后是 1 并生成 1,那么如果您不这样做如果不进行第二个 1,您现在处于 0 并返回等待第一个 1

所以换一种方式来说,在第一种情况下,如果你失败了,你只会中途重置,但在第二种情况下,如果你失败了,你会再次回到起点——从而增加了平均数量抛出来获取它们。

看看this redit post另一种解释。

关于python - 抛硬币模拟意外概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49660374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com