Python 中的摩根定律
De Morgan Law in Python 3
根据德摩根定律:
¬(P ˄ Q) ↔ (¬P) ˅ (¬Q)
¬(P ˅ Q) ↔ (¬P) ˄ (¬Q)
在Python3.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)
这个returns:
x is : True
y is : False
问题:为什么 y 为 False?
尝试添加一些括号 -- ==
的优先级高于 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
由于错误的原因得到 True
结果。)
根据德摩根定律:
¬(P ˄ Q) ↔ (¬P) ˅ (¬Q)
¬(P ˅ Q) ↔ (¬P) ˄ (¬Q)
在Python3.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)
这个returns:
x is : True
y is : False
问题:为什么 y 为 False?
尝试添加一些括号 -- ==
的优先级高于 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
由于错误的原因得到 True
结果。)