【发布时间】:2018-04-04 21:01:34
【问题描述】:
这是我为模拟抛硬币游戏而编写的脚本,该游戏以给定的固定结果序列结束(抛硬币为 1 或 0)。这个固定的顺序是游戏的特征。例如,coin_series('01') 模拟了一系列抛掷,最终以 0 和 1 结尾;有效结果是x01,其中x 是一串零和不包含01 模式的字符串。
脚本给出了结束两场比赛所需的投掷次数,01 和 11,这些应该有相同的结果,因为硬币不是有偏差的(结果为 0 或结果为 1 的机会相同)折腾)。
但事实并非如此,我的输出分别为 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)])
【问题讨论】:
-
顺便说一下,如果你有一个 两人 游戏,如果他们的序列先出现,一个玩家获胜,那么谁拥有优势比谁的序列需要更长的时间更复杂平均上来。
标签: python simulation coin-flipping