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

Python抛硬币求连续6次正反面概率代码结果异常排查

代码问题排查与修复方案

核心问题1:条件判断逻辑错误

代码中if result[i:i+6] == ([0,0,0,0,0,0] or [1,1,1,1,1,1])的写法存在逻辑缺陷。Python中or运算符会返回第一个为真的结果,非空列表本身就是真值,因此该表达式实际只会返回[0,0,0,0,0,0],相当于代码仅检测了连续6次反面的情况,完全遗漏了连续6次正面的判定,直接导致统计结果大幅低于理论值。

问题2:遍历范围覆盖不全

当前遍历区间range(len(result)-6)无法覆盖所有可能的连续6次结果:100次抛硬币的列表长度为100,len(result)-6等于94,i的最大取值为93,对应的切片是result[93:99],漏掉了最后一组可能的连续6次切片result[94:100],会漏统计从第95次抛硬币开始的连续序列。

可选优化:概率计算逻辑优化

现有numberofstreaks/100的写法虽然结果正确(总试验次数为10000,等价于numberofstreaks/10000*100),但可读性较差,建议调整为更符合直觉的概率计算逻辑。


修复后完整代码(完全基于列表实现,符合学习要求)

import random
numberofstreaks = 0
for experimentnumber in range(10000):
    result = []
    for i in range(100):
        flip = random.randint(0,1)
        result.append(flip)
    
    # 修复遍历范围,覆盖所有可能的连续6次切片
    for i in range(len(result)-5):
        # 修复判断逻辑,同时检测连续6次正面和反面
        if result[i:i+6] == [0,0,0,0,0,0] or result[i:i+6] == [1,1,1,1,1,1]:
            numberofstreaks += 1
            break
print(numberofstreaks)
# 优化概率计算,输出百分比格式更直观
print('Chance of streak:', round(numberofstreaks / 10000 * 100, 2), '%')

修复后代码运行得到的概率会在80%左右波动,符合理论预期,且无论连续相同结果的长度是6次、7次还是更多,都会被切片匹配到,完全符合试验成功的判定规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:15:03