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

如何计算x次尝试中出现特定连续结果的概率及Python代码问题排查

代码错误点梳理
  • 遍历逻辑完全错误:for i in list 中i是每次抛硬币的结果,只能是0或1,不是列表的索引,后续list[i]只能访问列表前两位元素,每次实验最多只会检查索引0和1开头的连续6位序列,漏掉了剩下90多个可能的起始位置,自然很难检测到符合要求的连续序列,这是你结果远低于正常值的核心原因。正确写法是遍历合法的索引范围range(len(coin_flips)-5),同时避免后续取i+5时出现索引越界报错。
  • 计数逻辑错误:当前代码只要匹配到连续6次就给numberOfStreaks加1,单次实验中如果出现更长的连续序列(比如连续7次正面)会被重复计数,而题目要求单次实验只要出现至少一次连续6次就算有效,匹配到一次就应该终止当前实验的遍历,避免重复计数。
  • 语法不规范:if条件换行时没有加续行符或者括号,不符合Python语法要求,实际运行会直接报错。
  • 概率计算错误:总实验次数为10000次,正确的概率计算公式为(有效实验次数 / 10000) * 100,原代码直接除以100的计算逻辑完全错误。
  • 变量命名不规范:用Python内置类型名list作为自定义变量名,会覆盖内置功能,属于不好的编码习惯,建议改为coin_flips这类语义明确的名称。
  • 打印语句兼容问题:print 'xxx'是Python2的语法,Python3中需要加括号写成print('xxx')。
修正后的参考代码
import random

numberOfStreaks = 0
experiment_total = 10000
flip_count = 100
streak_length = 6

for _ in range(experiment_total):
    coin_flips = [random.randint(0, 1) for _ in range(flip_count)]
    has_streak = False
    # 遍历所有可能的连续序列起始位置
    for i in range(flip_count - streak_length + 1):
        if all(coin_flips[i] == coin_flips[i+j] for j in range(streak_length)):
            has_streak = True
            break # 找到一次就跳出,不需要继续检查
    if has_streak:
        numberOfStreaks += 1

chance = (numberOfStreaks / experiment_total) * 100
print(f'Chance of streak: {chance:.2f}%')

注:按题目要求统计连续6次正面或反面的概率,运行结果约为80%,你提到的1.5%大概率是记错了题目要求(比如仅统计连续6次正面、每次实验仅抛6次硬币等场景才会得到接近1.5%的结果)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:15:04