Python 布尔和逻辑运算符

Python Boolean and Logical Operators

给定两个输入布尔值,我想打印出以下结果:

True True -> False
True False -> False
False True -> False
False False -> True

我试过这样做:

if boolInput1 and boolInput2 == True:
    print(False)
elif boolInput1 == True and boolInput2 == False:
    print(False)
elif boolInput1 == False and boolInput2 == True:
    print(False)
elif boolInput1 and boolInput2 == False:
    print(True)

但它不起作用,因为这是输出:

Test  Input    Expected Actual 
1   True True   False   False
2   True False  False   False
3   False True  False   False
4   False False True    False

我试过在线搜索答案,但找不到任何答案。

这个怎么样?

print(not boolInput1 and not boolInput2)

您的代码存在问题:

elif boolInput1 and boolInput2 == False:
    print(True)

如果这样写就可以了:

elif boolInput1 == False and boolInput2 == False:
    print(True)

这条线尽管有同样的问题但工作正常,因为 if boolInput1 大致做了你想要的(检查真实值)。

if boolInput1 and boolInput2 == True:

这样写可能会更好,以便与您的其他检查更加一致:

if boolInput1 == True and boolInput2 == True:

boolInput1 and boolInput2 == False并没有按照你的想法去做。 ==and 绑定得更紧密,因此当您想要 "is boolInput1 False and boolInput2 False too?" 时,您正在测试 "is boolInput1 (truthy), and is boolInput2 equal to False",这将在 Python 中表达为 boolInput1 == False and boolInput2 == False 或更多, not boolInput1 and not boolInput2.

真的,你让这件事变得比需要的更难了。您的所有代码都可以简化为:

print(not boolInput1 and not boolInput2)

或者提取 not 如果你愿意的话:

print(not (boolInput1 or boolInput2))

不需要 ifelifelse 或任何其他块。

一般来说,明确地比较 TrueFalse 不是 Pythonic;只需使用隐式 "truthiness" 测试即可处理任何类型。由于无论如何你都需要 not,最终结果将始终是 TrueFalse,即使输入根本不是布尔值,直接与 TrueTrue 进行比较False 将使 2None[] 等输入的行为不同于它们在 "truthiness testing" 中的传统行为方式(它们是真值、假值和分别是假的)。

这可能会简单得多。

if bool1 or bool2:
    print(False)
else:
    print(True)

我相信你也可以

print(not(bool1 or bool2))

哪个更简单。

elif boolInput1 and boolInput2 == False: 并没有按照您的想法行事。

和 的每一侧都被评估为单独的布尔值。

浓缩计算机在该语句上所做的事情:

boolInput1 and boolInput2 == False
False and False == False
False and True
False #Does not enter if Statement

这应该向您表明您对所有 4 个逻辑实际上都是错误的,并且有办法将其搞砸。尽量避免 boolean == true 类的语句,只说 if boolean

工作版本:

if boolInput1 and boolInput2:
    print(False)
elif boolInput1 and not boolInput2:
    print(False)
elif not boolInput1 and boolInput2:
    print(False)
elif not boolInput1 and not boolInput2:
    print(True)

尽管根据您使用此代码的原因,还有更简单的方法来完成此操作。