2

我是 Python 新手,对此我无法理解。我定义了以下函数:

def FlipCoins(num_flips):
    heads_rounds_won = 0
    for i in range(10000):
        heads = 0
        tails = 0
        for j in range(num_flips):
            dice = random.randint(0,1)
            if dice==1: heads += 1
            else: tails += 1
        if heads > tails: heads_rounds_won += 1
    return heads_rounds_won

这是它应该做的(但显然不是):掷硬币num_flip次数,计算正面和反面,看看正面是否多于反面。如果是,则增加head_rounds_won1。重复 10000 次。

我假设这head_rounds_won将接近 5000 (50%)。它对奇数作为输入执行此操作。例如,3、5 或 7 将产生大约 50%。然而,偶数会产生低得多的结果,更像是 34%。尤其是小数字,对于更高的偶数,例如 800,与 50% 的差异要小得多。

为什么会这样?任何输入都不应该产生大约 50% 的正面/反面吗?

4

2 回答 2

9

您刚刚获得了很多并列的回合

def FlipCoins(num_flips):
    heads_rounds_won = 0
    tails_rounds_won = 0
    tied_rounds = 0
    for i in range(10000):
        heads = 0
        tails = 0
        for j in range(num_flips):
            dice = random.randint(0,1)
            if dice==1: heads += 1
            else: tails += 1
        if heads > tails: heads_rounds_won += 1
        elif heads < tails: tails_rounds_won+= 1
        else: tied_rounds += 1
    return heads_rounds_won, tails_rounds_won, tied_rounds

会返回类似的东西

>>> FlipCoins(2)
(2506, 2503, 4991)
于 2012-07-08T03:15:07.537 回答
0

这很有趣,并且(最终)证明了 randint(0,1) 有 50/50 的概率选择 0 或 1。社区 wiki 因为它提供了丰富的信息,但不是对问题的直接回答。

s = [0, 0]
while True:
    an_int = randint(0, 1)
    s[an_int] += 1
    l = sum(s)
    print 'size: %d - %f%% zeros, %f%% ones' % (l, (100 * s[0]) / float(l), (100 * s[1]) / float(l))
于 2012-07-08T03:19:05.750 回答