逻辑运算符 "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
我正在学习语言 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