首页 > 解决方案 > Python 程序,计算掷骰子 12 次时至少两次得到 1 的概率

问题描述

import random
import sys

bestcounter1 = 0
bestcounter2=0
get_sample = int(sys.argv[1])

for i in range(get_sample):
    for i in range(12):
        if (random.randint(1,6)==1):
            bestcounter1+=1
            bestcounter2+=1

oneatleasttwice = (bestcounter2*1.0)/(2*(get_sample))

#Divide by 2 to make both comparable. Otherwise 2 will always be greater than 1 !
print("One atleast twice in 12 rolls: ", oneatleasttwice)

谁能解释这里使用的逻辑是否正确?我得到的输出总是在 1 左右。

谢谢

标签: pythonpython-3.xprobability

解决方案


你必须把你的柜台放在正确的地方。假设bestcounter1用于在每次运行(12 次滚动)期间计算 1 的值,而bestcounter2当您获得 2 个或更多值 1 时用于计算运行次数。那么您的主 for 循环应如下所示:

for i in range(get_sample):
    # reset before every run
    bestcounter1 = 0
    for i in range(12):
        if random.randint(1, 6) == 1:
            # count values of 1
            bestcounter1 += 1
        # check if we got 2 or more values of 1
        if bestcounter1 >= 2:
            # count proper cases
            bestcounter2 += 1
            break

oneatleasttwice = bestcounter2 / get_sample

运行 100 万次,我得到了 61.9% 的结果。


推荐阅读