You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Monte Carlo模拟计算掷骰子Two-Pairs概率(Python)

问题分析与修正方案

你的代码核心问题是完全误解了Two-Pairs的定义和试验逻辑,具体问题如下:

  • 错误将“多次掷两个骰子的成对次数”等同于Two-Pairs,但实际需求是一次掷n个骰子的结果中,存在至少两组不同的数值各出现2次及以上(比如掷5个骰子出[2,2,3,3,5]或[2,2,2,3,3]都符合条件)。
  • roll_dice函数存在逻辑漏洞:当两个骰子点数不同时,函数未显式返回False,默认返回None,虽不影响布尔判断,但属于不规范写法。
  • 试验流程错误:当前逻辑是“每次试验掷n次两个骰子,统计成对次数≥2就算Two-Pairs”,和你要实现的“n个骰子中出现Two-Pairs”完全不是同一场景。

修正后的代码

import random
from collections import Counter

def two_pair_prob(n_dice, n_trials):
    count_two_pairs = 0
    for _ in range(n_trials):
        # 单次试验:生成n个骰子的点数结果
        dice_rolls = [random.randint(1, 6) for _ in range(n_dice)]
        # 统计每个点数的出现次数
        freq = Counter(dice_rolls)
        # 统计出现次数≥2的点数种类数
        valid_pairs = sum(1 for cnt in freq.values() if cnt >= 2)
        # 判断是否满足Two-Pairs条件:至少2种不同点数各出现≥2次
        if valid_pairs >= 2:
            count_two_pairs += 1
    # 返回概率估算值
    return count_two_pairs / n_trials

代码说明

  • 用列表推导式生成单次试验中n个骰子的所有点数,符合“一次掷n个骰子”的试验场景。
  • Counter工具快速统计每个点数的出现次数,比手动计数更简洁高效。
  • 统计出现次数≥2的点数种类数,只要该数量≥2,就满足你定义的Two-Pairs要求。
  • 经过n次试验后,用满足条件的次数除以总试验次数,得到概率的估算结果。

内容的提问来源于stack exchange,提问作者jack koteles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:19:55