我是函数的新手,对于创建给定三个布尔值的特定函数感到困惑,如果至少两个为true,则返回true。如果我在运行程序后像这样显式地编写了解释器,则在解释器中调用该函数时,我拥有的函数就起作用了(我检查了所有六个组合):
>>> function(True,False,True)
True
但是我想我应该能够在为那些变量输入值之后键入函数(b1,b2,b3)。对于这些变量的任何输入,函数(b1,b2,b3)返回False。
b1 = input("enter True or False: ")
b2 = input("enter True or False: ")
b3 = input("enter True or False: ")
def function(b1,b2,b3):
if b1 is True and b2 is True:
return True
if b2 is True and b3 is True:
return True
if b1 is True and b3 is True:
return True
return False
答案 0 :(得分:4)
除非您使用的是Python 2(我对此表示怀疑),否则input
将返回一个字符串。因此,您将始终获得False
。
您必须将输入转换为boolean
。但是,这并不像看起来那么简单。
bool('False')
是布尔值True
,因为所有非空字符串都被视为True
。
一种解决方法是显式检查输入:
def get_bool_from_stdin():
inp = input()
if inp == 'True':
return True
if inp == 'False':
return False
raise TypeError('input True or False')
然后您的功能将按预期工作:
def get_bool_from_stdin():
inp = input()
if inp == 'True':
return True
if inp == 'False':
return False
raise TypeError('input True or False')
b1 = get_bool_from_stdin()
b2 = get_bool_from_stdin()
b3 = get_bool_from_stdin()
def function(b1,b2,b3):
if b1 == True and b2 == True:
return True
if b2 == True and b3 == True:
return True
if b1 == True and b3 == True:
return True
return False
print(function(b1, b2, b3))
执行中:
>> True
>> False
>> True
True
如果您只想验证function
收到至少2个True
值,则可以使用sum
(并使用*args
,以便它可以与任意数量的参数),因为Python的布尔值是int
的子类:
def function(*args):
return sum(args) >= 2
答案 1 :(得分:1)
这是定义此类功能的一种方法。由于如果要返回#include <stdio.h>
int main() {
int year;
printf("Enter year below\n");
scanf("%d", &year);
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0)
printf("%d is a Leap year", year);
else
printf("%d is not a Leap year", year);
} else
printf("%d is a Leap year", year);
} else
printf("%d is not a Leap year", year);
return 0;
}
(如果任意两个为True
,则等效于检查布尔值是否大于1)。
P.S:对于输入问题,键盘输入为字符串类型,因此,在您的情况下,这意味着检查语句是“ True”还是“ true”。
True
答案 2 :(得分:0)
函数input
始终返回输入内容的 string 。如果输入True
,则实际上是在返回字符串'True'
,而不是布尔值。
您可以检查用户输入并转换值:
b1 = input('Enter True or False: ')
if b1.lower() == 'true':
b1 = True
else:
b1 = False
# ...repeat for each input ...
在一种情况下,您可以缩短它:
b1 = (True if input('Enter True or False: ').lower() == 'true'
else False)
最好使用b1 is True
而不是b1 == True
。
答案 3 :(得分:0)
您实际上可以在Python中对布尔值求和,因此您可以检查至少SASL_PATH
个输入是否为真。这允许输入数量可变,但是第一个输入必须是n
True
答案 4 :(得分:-1)
以下内容如何?
from itertools import combinations
from typing import List
def twotrues(values: List) -> bool:
return any({all(c) for c in combinations(values, 2)})
它的作用是使值列表中两个元素的所有可能组合,检查两个元素是否均为True,然后返回结果。
希望这会有所帮助!
答案 5 :(得分:-2)
问题是input
函数返回一个字符串。您必须将其强制转换为布尔值,例如:
def get_boolean():
return bool(input("enter True or False: "))
b1 = get_boolean()
b2 = get_boolean()
b3 = get_boolean()
修改,更正:
def get_boolean():
try:
return {'True': True, 'False': False}[input()]
except KeyError:
raise RuntimeError("Not a boolean value")