我正在学习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"
它打印True
10 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