我有一个有时返回 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】:
每次要检查是否返回True
或False
时,您要对hundred()
进行两次调用,这意味着您实际上不是只检查一个结果,而是两个。您的 while 循环似乎也没有任何结束条件。此外,您的循环变量不存在,因此您的脚本会引发错误。最后,据我所知,overalls
是不必要的,因为iterations
无论如何都会跟踪该数字。我认为最后一部分应该是这样的:
while iterations < 10:
iterations += 1
result = hundred()
if result:
number_of_true += 1
print(number_of_true, iterations)
运行脚本时,它会给出10 10
或0 10
,我不确定这是您想要的,但至少循环部分是正确的。如果您对hundred()
有疑问,那么我建议您专门提出另一个问题。我认为它的问题是由于您使用了太多全局变量,其中一些需要在每次调用该函数时重置。
【讨论】:
是的,如果我们调用它 10 次,我希望它打印 7 10,而不是 0 10 或 10 10... 真的卡住了如何计算布尔返回。如果我只是继续单独调用该函数,并在纸上写下正确与错误,我会得到正确答案。但我不知道如何用代码计算它们。 你只是增加一个不同的变量,最好是一个字典count =
。然后你可以简单地写count[hundred()] += 1
。
我还不熟悉字典。我会根据您的建议反复试验。
dict
可能是 Python 中最重要的内置类型。当我说,停止你正在做的任何事情并尽快了解它们的工作原理时,我并没有夸大其词。试图解决它们只是浪费时间。以上是关于我有一个有时返回 True,有时返回 False 的函数。我如何计算真假?的主要内容,如果未能解决你的问题,请参考以下文章
在Directory.Delete Directory.Exists有时返回true?