但是在Pyten 3中的癌症问题

问题描述 投票:1回答:3

根据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是假的?

python python-3.x logic
3个回答
1
投票

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

这是precedence table


0
投票

试试这个:

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

它在评估

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

第一。


0
投票

操作员优先权使您绊倒。在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的结果。)

© www.soinside.com 2019 - 2024. All rights reserved.