Python 3 中的德摩根定律

Posted

技术标签:

【中文标题】Python 3 中的德摩根定律【英文标题】:De Morgan Law in Python 3 【发布时间】:2016-01-10 16:04:20 【问题描述】:

根据德摩根法:

¬(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 是 False?

【问题讨论】:

【参考方案1】:

尝试添加一些括号 -- == 的优先级高于 or

这里是precedence table

【讨论】:

【参考方案2】:

试试这个:

y = not(A or B)==((not A) and (not B))

它正在评估

not(A or B) == (not A)

首先。

【讨论】:

【参考方案3】:

操作员的优先级会让你绊倒。在 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 的结果是由于错误的原因。)

【讨论】:

以上是关于Python 3 中的德摩根定律的主要内容,如果未能解决你的问题,请参考以下文章

证明德摩根第一定律

具有包裹尺寸的德劳内三角剖分?

程序员N定律和N原则---康威定律在实践中的一点思考

如何从 PL\SQL 中的字符串中选择最后 3 个单词?

生活中的定律——墨菲定律

容斥原理