根据De Morgan法律:
¬(P ˄ Q) ↔ (¬P) ˅ (¬Q)
¬(P ˅ Q) ↔ (¬P) ˄ (¬Q)
在我运行的Python 3.5中:
A = True
B = True
x = not(A and B)==(not A) or (not B)
y = not(A or B)==(not A) and (not B)
print('x is :', x, '\ny is :' ,y)
返回:
x is : True
y is : False
问题:为什么y是假的?
尝试添加一些括号 - ==
优先于or
。
试试这个:
y = not(A or B)==((not A) and (not B))
它在评估
not(A or B) == (not A)
第一。
操作员优先权使您绊倒。在Python中,==
运算符的优先级高于not
。表达式not a == b
读作not (a == b)
而不是(not a) == b
,因为前者通常比后者更有用。
因此,你的y
应该是这样的:
y = (not(A or B)) == ((not A) and (not B))
而你的x
应该是这样的:
x = (not(A and B)) == ((not A) or (not B))
然后你会得到正确的结果。 (你的x
也是错误的,并且由于错误的原因得到了True
结果:它实际上正在评估(not ((A and B) == (not A)) or (not B)
,这对(not (True == False)) or False
有效。但是你真正想要的是True or False
,它适用于(not (A and B)) == ((not A) or (not B))
,它可以解决问题对(not True) == (False or False)
。正如我所说,你的False == False
因错误的原因得到了x
的结果。)