Python 模拟一对骰子的重复掷骰,直到获得100掷骰子为止;然后打印卷数

Python 模拟一对骰子的重复掷骰,直到获得100掷骰子为止;然后打印卷数,python,while-loop,probability,dice,Python,While Loop,Probability,Dice,我试着数一数两个骰子加起来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 {} rol

我试着数一数两个骰子加起来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))
来自随机导入范围
def diceprob(右):
计数=0
当计数小于100时:
滚动=随机。随机范围(2,13)
如果滚动==r:
计数+=1
打印(“花了{}卷才得到100卷{}”。格式(计数,r))

但当运行时,它总是打印出“用100卷得到100卷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
的转鼓。您只需计算等于
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))
def diceprob(r):
总数=0
计数=0
当计数小于100时:
滚动=随机。随机范围(2,13)
总数++
如果滚动==r:
计数++
打印(“需要{}个卷才能得到{}个卷的{}”。格式(总计、计数、r))

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

两个骰子滚动的总和不是由
random.randrange(2,13)
正确表示的。这样一卷中的金额分配不均匀。例如,有一个组合创造了一个2和6的总和为7。看看两个骰子总和的概率分布,如果我做randrange(2,13),会有任何错误或计算失误吗?@Frank yes
randrange(2,13)
有,但两个骰子的总和有另一个分布。看见
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))