You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

双骰子投掷概率计算困惑及模拟代码完善求助

骰子概率解惑 + 模拟代码修正

首先解决你最困惑的概率问题:

  • 两枚公平骰子的总可能组合是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

火山引擎 最新活动