双骰子投掷概率计算困惑及模拟代码完善求助
骰子概率解惑 + 模拟代码修正
首先解决你最困惑的概率问题:
- 两枚公平骰子的总可能组合是6×6=36种,每种组合的出现概率完全相等。
- 要掷出12点,只有**(6,6)**这唯一一种组合,所以概率是
1/36≈2.78%,四舍五入后就约等于你说的3%啦。 - 而7点之所以概率约17%,是因为它有6种组合:(1,6)、(2,5)、(3,4)、(4,3)、(5,2)、(6,1),计算下来是
6/36≈16.67%,也就是约17%,和理论完全匹配。
接下来看你的代码问题,目前的代码只是把10次投掷的和存了起来,没有统计每个点数的出现次数,而且模拟次数太少(仅10次),结果会和真实概率偏差很大。这里给你修正后的代码,同时解释每一步:
from random import randint # 初始化一个计数器,用来记录2-12每个点数的出现次数 outcome_counts = {num: 0 for num in range(2, 13)} # 设置模拟次数为10000次,次数越多越接近真实概率 total_simulations = 10000 # 开始模拟投掷 for _ in range(total_simulations): first_dice = randint(1, 6) second_dice = randint(1, 6) roll_sum = first_dice + second_dice # 对应点数的计数器加1 outcome_counts[roll_sum] += 1 # 计算并输出每个点数的出现百分比 print("模拟10000次投掷后,各点数出现百分比:") for point in range(2, 13): percentage = (outcome_counts[point] / total_simulations) * 100 # 保留两位小数,让结果更直观 print(f"点数{point}: {percentage:.2f}%")
代码说明:
- 用字典
outcome_counts来追踪每个点数的出现次数,初始值都设为0 - 把模拟次数改成10000,这样结果会非常接近理论概率
- 每次投掷后计算两枚骰子的和,对应计数器加1
- 最后通过「次数/总模拟数×100」得到百分比,保留两位小数方便查看
运行这段代码后,你会看到12点的百分比大概在2.7%-3%之间,7点的百分比接近17%,和理论值一致。
内容的提问来源于stack exchange,提问作者Henry Tirla




