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

Python抛硬币模拟问题:多组独立实验统计连续6次同面次数

问题根因
  • 核心问题是全局的ListOfResults列表没有在每轮独立实验开始前重置,所有轮次的抛硬币结果会持续追加到同一个列表中,第一轮实验后列表长度为100,第二轮就变成200,后续统计逻辑也是基于累计的全量结果计算,完全不符合10组独立100次抛掷的实验要求。
  • 次要问题是当前统计连续6次同面的逻辑用了三层嵌套循环,时间复杂度高,后续扩展到10000次实验时运行效率会非常低。
调整后代码
import random as rd

experiment_times = 10000  # 可直接调整为需要的实验次数
has_streak_count = 0  # 统计出现过至少1次连续6次同面的实验轮数
ListOfStreaks = []

for _ in range(experiment_times):
    ListOfResults = []  # 每轮实验开始前清空结果列表,保证轮次独立
    current_streak = 1
    current_experiment_streaks = 0
    # 生成本轮100次抛硬币结果
    for _ in range(100):
        ListOfResults.append(rd.randint(0,1))
    # 统计本轮连续6次同面的次数
    for i in range(1, len(ListOfResults)):
        if ListOfResults[i] == ListOfResults[i-1]:
            current_streak +=1
            if current_streak == 6:
                current_experiment_streaks +=1
                # 若连续7次同面需计为2次重叠的连续6次,注释掉下面一行即可
                # current_streak = 0
        else:
            current_streak = 1
    ListOfStreaks.append(current_experiment_streaks)
    if current_experiment_streaks > 0:
        has_streak_count +=1

print("每轮实验连续6次同面的次数统计:", ListOfStreaks)
print(f"100次抛硬币出现至少1次连续6次同面的估算概率:{has_streak_count / experiment_times:.2%}")
调整说明
  • 每轮实验开始前重新初始化ListOfResults,保证每轮的100次抛掷结果完全独立,不会和其他轮次的结果混淆。
  • 优化了连续同面统计逻辑,仅需单次遍历本轮的100次结果即可完成统计,时间复杂度从O(n²)降到O(n),跑10000次实验也能快速出结果。
  • 新增了概率计算逻辑,直接统计出现过至少1次连续6次同面的实验轮数,除以总实验次数即可得到需要的估算概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:03