逻辑运算符"or"的错误?



我正在学习python语言。虽然它确实非常简单,但我在 IDLE 和 python 中使用逻辑运算符得到了一些意想不到的结果。

我在 IDLE 中做了一个简单的测试,如下所示:

(2 or 10) in range(1,6)

我的回答是True.目前为止,一切都好。但是,如果我这样做:

(10 or 2) in range(1,6)

我的回答是False.即使"2"显然在range(1,6)内.

我在 PyCharm 中做了同样的测试,以下是我的回应:

if (2 or 10) in range(1,6):
print("True")
else:
print("False")

结果:True

if (10 or 2) in range(1,6):
print("True")
else:
print("False")

结果:False

if 2 or 10 in range(1,6):
print("True")
else:
print("False")

结果:True

if 10 or 2 in range(1,6):
print("True")
else:
print("False")

结果:True

我想知道它背后的逻辑。

OR返回它遇到的第一个TRUE值。

那是:

>>> (2 or 10) 
# returns 2
>>> (10 or 2)
# returns 10

更新

为了解决OP的评论如下:

有计算结果为True值,也有评估结果为False值。例如,0 是假值。其余整数是真值。因此,10 也是一个真值。

如果您这样做:

>>> if 10: # since 10 is truthy, this statement will execute.
print("Okay!")
else:
print("Not okay!")
# prints "Okay!"

继续前进,10 or 2 in range(1, 6)评估为10 or (2 in range(1, 6)).

10     or     (2 in range(1, 6))
__/           ________________/
True               True
# Returns 10 because it's a truthy value. 
# OR operator only evaluates until it finds a True value.

让我们看另一个例子:

0      or    10
_/          __/
False        True
# Returns 10 because 0 is a falsey value, so the 
# OR operator continues evaluating the rest of the expression

最后,让我们看看if表达式:

>>> if 10 or 2 in range(1, 6):
print("True")
else:
print("False")
# prints "True"

它打印True10 or 2 in range(1, 6)因为返回10,正如我们上面看到的,if 10计算结果为True,因此,if块被执行。


另外

正确的表达式是这样的:

>>> 10 in range(1, 6) or 2 in range(1, 6)
# returns True

此表达式将返回True因为即使 10 不在给定范围内,但 2 在给定范围内。

10 in range(1, 6)   or   2 in range(1, 6)
_______________/        ______________/ 
False                     True
# Returns True because OR will keep on evaluating
# until it finds a True value

但是,如果要检查 10 和 2 是否都在范围内,则必须使用AND运算符:

>>> 10 in range(1, 6) and 2 in range(1, 6)
# returns False

相关内容

最新更新