0

我需要模拟一个掷硬币的序列并监控我必须做多少次尝试才能获得预定长度的正面(或反面)条纹。换句话说,我需要计算我需要掷多少次硬币才能连续连续 3 次正面朝上。一旦脚本完成了连胜,它应该对 4 连胜和 5 连胜做同样的事情。

我确实尝试过这样的事情:

def main():
    import random

    attemps = [4, 5, 6]  # length of the streaks we want to achieve
    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。

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

4

2 回答 2

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.
于 2013-04-02T10:42:25.357 回答
0

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

if y != 0:
     break
于 2013-04-02T10:05:05.147 回答