我正在尝试模拟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)
请帮助!谢谢!
答案 0 :(得分:2)
random.randint(a,b)
包含端点a
和b
,因此请使用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范围。错字?