我正在学习语言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
我想知道它背后的逻辑。
答案 0 :(得分:3)
OR
会返回遇到的第一个TRUE
值。
那是:
>>> (2 or 10)
# returns 2
>>> (10 or 2)
# returns 10
<强>更新强>
要解决OP的评论如下:
truthy 值评估为True
, falsey 值评估为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