You need to enable JavaScript to run this app. Python自定义函数多次调用返回值一致,如何统计True和False的返回次数
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义函数多次调用返回值一致,如何统计True和False的返回次数

问题根源

  • 你定义的hundred()函数依赖了大量全局变量,包括resultlist、current、total等,这些变量在函数第一次运行后不会自动重置,后续调用函数时会一直沿用之前运行留下的值:
    • 如果第一次调用返回True,说明total列表已经有元素,后续所有调用的返回值都会是True
    • 如果第一次调用返回False,后续调用会继续往已有resultlist里追加新的抛硬币结果,逻辑完全错乱
  • 你写的循环逻辑里单次迭代调用了两次hundred()函数,if判断时调用一次,elif判断时又调用一次,相当于每次迭代浪费了一次调用,而且两次返回值可能不一致
  • 原函数还有个隐性bug:第一次循环i=0时,resultlist[i-1]会取到列表最后一个元素,属于越界索引错误,会影响判断结果

修复方案

  1. 把函数内部用到的临时变量全部移到函数体内定义,不要用全局变量,保证每次调用函数都是独立运行的状态
  2. 循环里单次迭代只调用一次hundred(),将返回值存入临时变量后再做判断
  3. 修正索引越界和连续计数的逻辑错误

修正后完整代码

import random

headtails = ['H', 'T']

def hundred():
    # 所有临时变量在函数内部初始化,每次调用都是全新状态
    resultlist = []
    current = 1
    total = []
    for i in range(100):
        x = random.choice(headtails)
        resultlist.append(x)
        # 跳过第一个元素的对比,避免索引为-1的越界问题
        if i == 0:
            continue
        if resultlist[i] != resultlist[i-1]:
            # 新元素和上一个不同,连续次数重置为1(当前元素本身就是1次连续)
            current = 1
        else:
            current += 1
            if current >= 6:
                total.append(current)
                # 匹配到连续6次后,重置连续计数即可
                current = 1
    return len(total) > 0

# 统计逻辑
number_of_true = 0
overalls = 10

# 直接用for循环运行指定次数即可,不用额外写迭代计数变量
for _ in range(overalls):
    # 单次迭代只调用一次函数,保存结果后再判断
    run_result = hundred()
    if run_result:
        number_of_true += 1

print("返回True的次数:", number_of_true, "总调用次数:", overalls)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 09:45:02