函数/真值

时间:2019-06-06 20:16:31

标签: python boolean

我是函数的新手,对于创建给定三个布尔值的特定函数感到困惑,如果至少两个为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

6 个答案:

答案 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")