使用Python random.sample函数模拟掷骰子的概率异常问题
问题分析与解决
错误根源:你使用的
random.sample(range(1, 7), 2)是无放回抽样,会强制两个骰子的点数完全不同,但真实掷两个骰子的场景中,两个骰子是独立的,允许出现相同点数(比如两个1、两个2等),这直接导致了概率偏差。概率验证:
- 真实场景下,两个骰子共有6×6=36种等可能结果,其中和为偶数的情况有18种(两个奇数组合9种、两个偶数组合9种),概率为18/36=0.5。
- 无放回抽样的场景下,总共有6×5=30种等可能结果,和为偶数的情况仅12种(3个奇数中选2个的排列6种、3个偶数中选2个的排列6种),12/30=0.4,正好对应你看到的结果。
修正后的代码:
改为独立生成每个骰子的点数,确保符合真实场景:import random n = 10**5 outcomes = [(random.randint(1, 6), random.randint(1, 6)) for _ in range(n)] even_sum_count = sum([sum(x) % 2 == 0 for x in outcomes]) relative_frequencies = [(sum([x[0] == i for x in outcomes])/n, sum([x[1] == i for x in outcomes])/n) for i in range(1, 7)] print(even_sum_count/n) print(relative_frequencies)运行后结果会接近0.5,符合理论预期。
内容的提问来源于stack exchange,提问作者N R
相关产品推荐
相关产品推荐

