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

基于Python random库的随机数选取及后续5个数概率计算问询

技术方案:计算随机数中目标值的概率与实际频率

嘿,我来帮你梳理这个问题的解决方案~你已经会用Python的random库生成0-20区间的随机数了,现在要针对选定的某个数(比如10)计算相关概率,其实可以分成理论概率分析实际频率验证两部分来做,具体内容如下:

一、理论概率分析

首先明确random.randint(0, 20)的特性:它会生成包含0和20在内的21个整数,并且每个整数的出现概率是均匀相等的。基于这个前提:

  • 单个随机数等于目标数(比如10)的理论概率是:1/21 ≈ 4.76%
  • 如果要计算「5个随机数中至少出现一次目标数」的理论概率,可以用反向计算法:先算5个随机数都不是目标数的概率(20/21)^5,再用1减去这个值,结果约为21.6%

二、代码实现:实际频率验证(近似概率)

理论概率是固定的,但实际运行中我们可以通过大量重复试验来统计频率(频率会随着试验次数增加趋近于理论概率,这就是大数定律)。下面是完整的代码实现:

import random

# 配置核心参数
target_num = 10  # 你选定的目标数
total_trials = 10000  # 总试验次数,次数越多结果越接近理论值
nums_per_trial = 5  # 每次试验生成的随机数数量

# 统计1:单个随机数命中目标的总次数
total_target_hits = 0
total_generated_nums = total_trials * nums_per_trial

for _ in range(total_trials):
    for _ in range(nums_per_trial):
        if random.randint(0, 20) == target_num:
            total_target_hits += 1

# 统计2:每组5个随机数中至少命中一次目标的试验次数
successful_trials = 0
for _ in range(total_trials):
    # 检查当前组的5个随机数是否有目标数
    has_target = any(random.randint(0, 20) == target_num for _ in range(nums_per_trial))
    if has_target:
        successful_trials += 1

# 计算并输出结果
single_num_freq = total_target_hits / total_generated_nums
trial_success_freq = successful_trials / total_trials

print(f"单个随机数等于{target_num}的实际频率:{single_num_freq:.4f}(理论概率:{1/21:.4f})")
print(f"5个随机数中至少出现一次{target_num}的实际频率:{trial_success_freq:.4f}(理论概率:{1 - (20/21)**5:.4f})")

代码说明

  • 我们设置了10000次试验,每次生成5个随机数,这样总共有50000个随机数样本,结果会更接近理论值
  • 代码统计了两个维度的频率:单个随机数命中目标的频率,以及每组5个随机数中至少一次命中的频率
  • 如果只是想单次生成5个随机数并统计其中目标数的出现次数,直接去掉循环,生成一次5个数然后计数即可,但这只能得到单次结果,不能代表概率

三、额外提醒

  • random.randint(a, b)生成的是闭区间[a, b]的整数,所以0到20一共21个值,这个是计算理论概率的关键
  • 如果需要更严谨的随机数(比如加密场景),可以考虑使用secrets库,但日常测试用random完全足够

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

火山引擎 最新活动