1

在 Python 2.7 中

当询问口译员以下内容时:

(1 or 3) > 2它返回False

为什么是这样?如果 1 或 3 大于 2,我实际上是在问口译员什么,显然不是。

同样,询问(1 or 5) in range(2,6)也返回False

我 100% 确定这与我的(x 或 y)部分有关,但同样,这是为什么呢?我不太需要用不同的方式来表达这样的事情,据我所知,我可以问:

if x in range(2,6) or y in range(2,6):

但我只是想知道为什么它不起作用!

4

5 回答 5

4

让我们检查一下(1 or 3) > 2

表达您要表达的内容的正确方法是:

>>> 1 > 2 or 3 > 2
True

另一种更通用的方法如下:

>>> t = (1, 3)
>>> any(el > 2 for el in t)
True

在这里,t可以是任何可迭代的。

于 2013-03-06T08:14:02.087 回答
0

1(理解为数字)true被评估(所有数字都被评估为true,除了 0),因此不需要评估 3(理解为数字)。
这是因为您使用了一个OR条件,即“停止”评估true找到的第一个值。
那么,是1 > 2吗?答案是false

你必须分解 or if 成两个单独的条件:

1 > 2 or 3 > 2
于 2013-03-06T08:13:33.367 回答
0

1 对应于真。因此结果为

1 or 3

1

1 > 2

是假的。

如果您尝试过答案,您可能会知道这一点 1 or 3

在外壳中。

于 2013-03-06T08:15:23.810 回答
0

这不是布尔运算的正确用例。第一个应该是:

(1 > 2) or (3 > 2)

表达方式:

(1 or 3)  > 2

将首先解决1 or 3然后尝试找出是否大于两个。

相似地:

(1 or 5) in range(2,6)

可能更好地表示为:

(1 in range(2,6)) or (5 in range(2,6))

或者:

((1 >= 2) and (1 < 6)) or ((5 >= 2) and (5 < 6))
于 2013-03-06T08:16:46.780 回答
0

我也会在这个问题上投入两分钱。

当 Python 评估您的语句时

(1 or 3) > 2

这就是它的作用,嘿!让我们取第一个号码并打电话bool()给它。这里任何不是的数字都0将被评估True并返回。

你可以试试(10000 or 3),它总是会返回最左边的“变量”,只要它不是0

相反的例子是如果你有

(0 or 3)

然后它继续评估表达式的其余部分,这基本上会用伪代码表示:

returned number (wheter its the left or right) is greater than 2

这就是奇怪的地方,因为括号的评估方式,你的表达式总是会有所不同。在你的情况下,它会是

1 > 2 == False(0 or 3) > 2 == True

至于range部分,同样的逻辑适用。在括号中,左侧的数字将被“返回”,因此在您的范围检查中不可用。

(1 or 4) in range(2,5) == False

于 2013-03-06T08:28:18.077 回答