逻辑运算符“或”的错误?

时间:2017-03-21 19:41:55

标签: python python-3.x logic boolean-logic

我正在学习语言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

我想知道它背后的逻辑。

1 个答案:

答案 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