模拟多个硬币折腾条纹

时间:2013-04-02 10:01:32

标签: python-2.7

首先,我想为我糟糕的英语道歉。它肯定无法帮助描述我需要解决的问题......无论如何我们都试试。

我需要模拟一个抛硬币投掷序列,并监控我需要做多少尝试才能获得预先测定长度的条纹(或尾部)条纹。 换句话说,我需要计算我需要多少次投掷硬币才能拥有3个头的连续条纹。一旦脚本完成了条纹,它应该对4条纹和5条条纹执行相同的操作。

我确实试过这样的事情:

def main():
import random
attemps = [4,5,6]  # lenght of the streaks we want to acheive
for item in attemps:
    mylist = list(xrange(item))
    while True:
        for i in mylist:
            y = random.randint(0,1) # 0 as head, 1 as tail
            print i,y
            if y != 0:
                return False

但当然它没有做我想要的。它有两个问题:

1)一旦硬币值为1,它就会退出,但只要条纹完成,它就不会再次尝试。

2)它仅测试第一个“尝试”列表,即4个

我真的不知道如何解决这个问题。

谢谢!

2 个答案:

答案 0 :(得分:2)

我重写了你的功能

import random
def main(n):
    """ Returns number of flips needed 
    to get n heads in a row """
    mylist = ['heads','tails']
    cnt = 0
    while 1:
        if [random.choice(mylist) for _ in range(n)].count('heads') == n:
            return cnt
        else:
            cnt +=1

然后你可以做

>>> for i in range(4,7):
...     main(i)
... 
12
18
29 # All values are completely random, this just happens to be what I got.

顺便说一下,你的英语很棒:)。

答案 1 :(得分:0)

而不是'return False',它将从函数返回,尝试break而不是 - 这将退出当前的循环迭代。

if y != 0:
     break