给定两个输入布尔值,我想打印出以下结果:
True 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
我尝试在网上搜索答案但找不到任何答案。
答案 0 :(得分:2)
boolInput1 and boolInput2 == False
并没有按照您的想法行事。 ==
绑定比and
绑定得更紧,因此您正在测试"是boolInput1(真实),并且boolInput2等于False",当您需要&#34时; boolInput1是假,boolInput2也是假吗?",用boolInput1 == False and boolInput2 == False
表示not boolInput1 and not boolInput2
或更多,print(not boolInput1 and not boolInput2)
。
真的,你正在努力使它变得比它需要的更难。您的所有代码都可以简化为:
not
如果您愿意,可以或提取print(not (boolInput1 or boolInput2))
:
if
不需要elif
,else
,True
或任何其他需要的块。
一般来说,与False
或not
明确比较不是Pythonic;只是使用隐含的"真实性"测试适用于任何类型。既然您在此处需要True
,最终结果将始终为False
或True
,即使输入根本不是布尔值,也可以直接与{{1}进行比较}或False
会使2
,None
或[]
等输入的行为方式与传统上的行为方式不同,真实性测试" (他们分别是真实的,虚假的和虚假的)。
答案 1 :(得分:2)
这可能会简单得多。
if bool1 or bool2:
print(False)
else:
print(True)
我相信你也可以做到
print(not(bool1 or bool2))
哪个更简单。
答案 2 :(得分:1)
这个怎么样?
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:
答案 3 :(得分:0)
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)
虽然取决于您使用此代码的原因,但还有更简单的方法可以执行此操作。