模拟重复掷一对骰子,直到获得 100 次 r;然后打印卷数

Simulates repeated rolls of a pair of dice until 100 rolls of r have been obtained; the number of rolls is then printed

我正在计算获得 100 卷两个骰子 r (2-12) 的总和需要多少卷并打印出来。这是我到目前为止尝试过的:

from random import randrange
def diceprob(r):
    count = 0

    while count < 100:
        roll = random.randrange(2, 13)
        if roll == r:
            count += 1
    print("It took {} rolls to get 100 rolls of {}".format(count, r))

但是当运行时,它总是打印出"It took 100 rolls to get 100 rolls of 5",5的值根据r的调用而变化。为什么计数没有正确增加?

您计算的是结果为 r 的掷骰数,而不是所有掷骰数。 另请注意,两个六面骰子的总和分布不均匀,因此您需要调用 random.randrange(1, 7) 两次

import random
def diceprob(r):
    total_count = 0
    count = 0

    while count < 100:
        roll = random.randrange(1, 7) + random.randrange(1, 7)
        total_count += 1
        if roll == r:
            count += 1
    print("It took {} rolls to get 100 rolls of {}".format(total_count, r))

如果我们为 r 的各种值调用 diceprob,我们将得到结果

It took 3849 rolls to get 100 rolls of 2
It took 1932 rolls to get 100 rolls of 3
It took 1394 rolls to get 100 rolls of 4
It took 881 rolls to get 100 rolls of 5
It took 717 rolls to get 100 rolls of 6
It took 537 rolls to get 100 rolls of 7
It took 748 rolls to get 100 rolls of 8
It took 798 rolls to get 100 rolls of 9
It took 1295 rolls to get 100 rolls of 10
It took 1881 rolls to get 100 rolls of 11
It took 3689 rolls to get 100 rolls of 12

the distribution

的图表比较

您需要两个变量,一个用于总掷骰数,另一个用于等于 r 的掷骰数。您只计算等于 r 的卷数,然后打印出来。

def diceprob(r):
    total = 0
    count = 0
    while count < 100:
        roll = random.randrange(2, 13)
        total++
        if roll == r:
            count++
    print("It took {} rolls to get {} rolls of {}".format(total, count, r))

还有一个单独的问题,即您掷的是一个 11 面骰子(数字从 2 到 12),而不是两个 6 面骰子。