Python和Or表达的行为..很奇怪

时间:2016-02-19 03:24:39

标签: python python-3.x logical-operators demorgans-law

我有这么简单的代码:

i = " "

if i != "" or i != " ":
    print("Something")

这应该很简单,如果我不是空的""或者它不是空格" ",但它是打印的东西。现在,为什么如果其中一个条件是False,我会看到打印出来的东西?

5 个答案:

答案 0 :(得分:4)

De Morgan's laws

"not (A and B)" is the same as "(not A) or (not B)"

also,

"not (A or B)" is the same as "(not A) and (not B)".

在您的情况下,根据第一个陈述,您已经有效地写了

if not (i == "" and i == " "):

这是不可能发生的。因此无论输入是什么,(i == "" and i == " ")将始终返回False,否定它将始终提供True

相反,你应该像这样写

if i != "" and i != " ":

或根据De Morgan法律引用的第二份陈述,

if not (i == "" or i == " "):

答案 1 :(得分:0)

这个条件:

if i != "" or i != " ":

永远是真的。您可能需要and而不是or ...

答案 2 :(得分:0)

我将解释or的工作原理 如果检查第一个条件,如果它是真的,它甚至不检查第二个条件 如果第一个条件是假,那么它检查第二个条件,如果是真,则整个条件变为真 因为

A B Result  
0 0   0  
0 1   1  
1 0   1  
1 1   1  

所以如果你想要满足非空和空间使用条件and

答案 3 :(得分:0)

您的打印声明将始终发生,因为您的逻辑声明始终为真 if A or B:
如果A为True或B为True或两者均为True,则为True。由于您编写语句的方式,其中一个将始终为True。更确切地说,使用您的语句,if语句与if True or False:相关联,简化为if True:
您似乎需要and语句而不是or

答案 4 :(得分:0)

i = " "

你的条件为

if i != "" or i != " ":

此处i != ""将评估为True,而i != " "将评估为False

因此您将True or False = True

您可以参考OR here

的真相表
True  or False = True
False or True  = True
True  or True  = True
False or False = False
相关问题