我有一个有时返回 True,有时返回 False 的函数。我如何计算真假?

Posted

技术标签:

【中文标题】我有一个有时返回 True,有时返回 False 的函数。我如何计算真假?【英文标题】:I have a Function which sometimes returns True, sometimes False. How do I count the Trues and False? 【发布时间】:2021-09-03 13:49:10 【问题描述】:

TLDR: 添加

打印(百())

查看这段代码,您会看到函数有时返回 True,有时返回 False。我如何用循环计算这些?如果我使用 if 语句,它会在所有迭代中返回全部 True 或全部 False... 在循环内,函数是 True True True True True 或 False False False False... 这对我来说毫无意义。

我已经为此奋斗了 3 天。这是关于 Automate Boring Stuff 的一个硬币翻转问题。已经“编程”了 1 个月左右,之前没有任何经验。

所以,这就是返回 False 或 True 的函数。我需要能够以某种方式计算它们。 因此,如果函数被调用 10 次(迭代变量),我需要每次返回 True 来计算它们。我尝试了 while 循环、if 语句、for 循环,但我不明白为什么它不起作用……真的卡住了。

import random


headtails = ['H', 'T']
resultlist = []
current = 1
total = []
count = 0
countlist = []
tries = 1


def hundred():
    global resultlist, current, total, count, countlist, tries, headtails
    for i in range(100):
        x = random.choice(headtails)
        resultlist.append(x)
        if resultlist[i] != resultlist[i-1]:
            current = 0
        else:
            current = current +1
            if current >= 6:
                total.append(current)
                current = 0
    if len(total) != 0:
        return True
    else:
        return False

# function ends here, now we need to call it and count Trues and Falses. 
# How do I do it? This doesn't work:

iterations = 0
number_of_true = 0
overalls = 0

while iterations < 10:
    iterations += 1

    if hundred():
        number_of_true += 1
        overalls += 1
    elif hundred() is False:
        overalls += 1
print(number_of_true, overalls)

好的,我找到了问题,但没有找到解决方案。如果你多次调用该函数

print(hundred())
print(hundred())
print(hundred())
print(hundred())

它们都将是 False 或 True,这意味着它们都指向内存中的相同值。所以,不可能以任何方式迭代它的结果......该死的,我该怎么办。只有在运行/停止程序时才会得到新结果。

【问题讨论】:

你永远不会重置total,所以一旦hundred()返回True,每次你调用它都会永远返回True。 你好汤姆。它不能是数字,它必须是返回的布尔值。我需要检查那里是否发生了什么事。有时是真,有时是假,我需要计算它们,但它不起作用。如果我们将迭代次数增加到 100,它应该在最后打印 70 和 100 之类的......相反,我得到 0 100 或 100 100 这对我来说毫无意义 【参考方案1】:

每次要检查是否返回TrueFalse 时,您要对hundred() 进行两次调用,这意味着您实际上不是只检查一个结果,而是两个。您的 while 循环似乎也没有任何结束条件。此外,您的循环变量不存在,因此您的脚本会引发错误。最后,据我所知,overalls 是不必要的,因为iterations 无论如何都会跟踪该数字。我认为最后一部分应该是这样的:

while iterations < 10:
    iterations += 1
    result = hundred()
    
    if result:
        number_of_true += 1

print(number_of_true, iterations)

运行脚本时,它会给出10 100 10,我不确定这是您想要的,但至少循环部分是正确的。如果您对hundred() 有疑问,那么我建议您专门提出另一个问题。我认为它的问题是由于您使用了太多全局变量,其中一些需要在每次调用该函数时重置。

【讨论】:

是的,如果我们调用它 10 次,我希望它打印 7 10,而不是 0 10 或 10 10... 真的卡住了如何计算布尔返回。如果我只是继续单独调用该函数,并在纸上写下正确与错误,我会得到正确答案。但我不知道如何用代码计算它们。 你只是增加一个不同的变量,最好是一个字典count = 。然后你可以简单地写count[hundred()] += 1 我还不熟悉字典。我会根据您的建议反复试验。 dict 可能是 Python 中最重要的内置类型。当我说,停止你正在做的任何事情并尽快了解它们的工作原理时,我并没有夸大其词。试图解决它们只是浪费时间。

以上是关于我有一个有时返回 True,有时返回 False 的函数。我如何计算真假?的主要内容,如果未能解决你的问题,请参考以下文章

在Directory.Delete Directory.Exists有时返回true?

为啥 R 的 ifelse 语句不能返回向量?

async: false 实现AJAX同步请求 ( $.ajax同步/异步(async:false/true) )

js的基本语法规范

Lamada 借助All实现ForEach

即使进程正在运行,Process.HasExited 也会返回 true?