模拟24次掷骰子24次并计算在Python中获得6个骰子的概率

时间:2019-02-03 23:18:48

标签: python simulation probability

我正在尝试模拟Chevalier de Mere的骰子下注1000次,以估计赢得每个下注的概率。我模拟的事件 掷骰子4次时,a会变成6,而我得到的结果与我的预期相似(〜0.5)。但是,当模拟24掷两个骰子时出现6上升的事件时,我得到的结果高于预期。我期望〜0.49时得到〜0.6。

运行模拟的方式是否有问题,或者还有其他解释吗?查看代码:

total = 0
for i in range(1000):
    if 6 in randint(1,7,(4)):
        total +=1
print("The probability a 6 turns up when rolling 1 die 4 times is:",total/1000)

total = 0
for i in range(1000):
    for j in range(24):
        if 6 == randint(1,7) and 6 == randint(1,7):
            total +=1
print("The probability a 6 turns up when rolling 2 die 24 times is:",total/1000)

请帮助!谢谢!

2 个答案:

答案 0 :(得分:2)

random.randint(a,b)包含端点ab,因此请使用random.randint(1,6)

假设在第二种情况下您的意思是双6s,那么每次审判中您所计算的双6s多于一次。计算所有24,然后检查是否有双6的任何实例。

这是工作代码(Python 3.6):

from random import randint

trials = 1000

total = 0
for i in range(trials):
    if 6 in [randint(1,6) for j in range(4)]:
        total +=1
print(f'A 6 appeared when rolling 1 die 4 times {total/trials:.2%} of the time.')

total = 0
for i in range(trials):
    if (6,6) in [(randint(1,6),randint(1,6)) for j in range(24)]:
        total +=1
print(f'Double 6s appeared when rolling 2 dice 24 times {total/trials:.2%} of the time.')

输出:

A 6 appeared when rolling 1 die 4 times 50.30% of the time.
Double 6s appeared when rolling 2 dice 24 times 48.90% of the time.

答案 1 :(得分:0)

randint(1,7)可能返回7。

也不要用来比较整数

在第一个实验中,您缺少一个循环for k in range(4),并且有一个奇怪的第三个arg范围。错字?