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

k次掷骰子恰好出现两个3的概率计算及柱状图绘制代码报错求助

问题排查与代码修复:掷骰子概率计算与柱状图绘制

嘿,我来帮你一步步搞定这些问题!你的代码里有几个明显的语法错误,同时逻辑也和你想要的“k次掷骰子中恰好出现两个3的概率”不太匹配,我会逐个帮你修正:

一、先解决直接导致报错的语法问题

  1. 元组访问错误:你写的trial_result(i)是把元组当成函数调用了!元组是序列类型,访问内部元素必须用方括号[],改成trial_result[i]就能解决“tuple not callable”的报错。
  2. 绘图函数名错误:你导入的是pylab库,所以绘图时应该用pylab.bar(),而不是不存在的pltbar()。

二、调整代码逻辑匹配你的核心需求

你的原始代码是统计100次单次掷骰子的点数频率,和“k次掷骰子恰好出现2个3”的需求不符。下面是修正后的完整代码,包含蒙特卡洛模拟计算概率和柱状图绘制两个部分:

import random
import pylab

# 定义函数:模拟n次k次掷骰子实验,返回恰好出现2个3的概率
def calculate_exact_two_threes(k, num_trials=10000):
    success_count = 0
    for _ in range(num_trials):
        three_count = 0
        for _ in range(k):
            roll = random.choice((1,2,3,4,5,6))
            if roll == 3:
                three_count +=1
        if three_count == 2:
            success_count +=1
    return success_count / num_trials

# 设定要测试的k值范围(比如从2到20次掷骰子)
k_values = range(2, 21)
probabilities = [calculate_exact_two_threes(k) for k in k_values]

# 绘制柱状图
pylab.bar(k_values, probabilities, color='skyblue')
pylab.title('Probability of Getting Exactly 2 Threes in k Dice Rolls')
pylab.xlabel('Number of Rolls (k)')
pylab.ylabel('Probability')
pylab.xticks(k_values)
pylab.show()

代码说明

  • calculate_exact_two_threes函数:通过10000次蒙特卡洛模拟,统计k次掷骰子中恰好出现2个3的次数,返回对应的概率。
  • 我们测试了k从2到20的情况,你可以根据需要调整这个范围。
  • 柱状图会清晰展示不同掷骰子次数下,目标事件的概率变化趋势。

如果你想直接用二项分布的理论公式计算概率(比模拟更高效),也可以用下面的代码替换概率计算部分:

import math

def calculate_theoretical_prob(k):
    # 二项分布公式:C(k,2) * (1/6)^2 * (5/6)^(k-2)
    combination = math.comb(k, 2)
    return combination * (1/6)**2 * (5/6)**(k-2)

probabilities = [calculate_theoretical_prob(k) for k in k_values]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:39:07