Python And Or 语句表现得很奇怪

Python And Or statements acting ..weird

我有这行简单的代码:

i = " "

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

这应该很简单,如果 i 不为空 "" 或者它不是 space " ",但它是,打印 Something。现在,如果这两个条件之一是 False?

,为什么我会看到 Something printed

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 == " ") 总是 return False 并且取反它总是 True


相反,你应该这样写

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

或根据德摩根定律中引用的第二条陈述,

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

这个条件:

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

永远是真的。你可能想要 and 而不是 or...

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

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

所以如果你想同时满足非空和space的条件,使用and

您的打印语句将始终发生,因为您的逻辑语句将始终为真。
if A or B:
如果 A 为真或 B 为真或两者都为真,则将为真。由于您编写语句的方式,两者之一将始终为 True。更准确地说,根据您编写的语句,if 语句与 if True or False: 相关,后者简化为 if True:
您似乎想要一个 and 语句而不是 or.

i = " "

您的条件为

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

此处 i != "" 将计算为 Truei != " " 将计算为 False

所以你将有 True or False = True

你可以参考这个真相table for OR here

True  or False = True
False or True  = True
True  or True  = True
False or False = False