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

Bug with logic operator "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 return 是它遇到的第一个 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) returns 10 正如我们在上面看到的,if 10 计算为 True,因此, if 块被执行。


另外:

正确的表达方式是:

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

这个表达式将 return 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