有人可以解释这里的逻辑或我在问什么? (布尔运算)

时间:2013-03-06 08:11:55

标签: python

在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):

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

5 个答案:

答案 0 :(得分:4)

我们来看看(1 or 3) > 2

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

>>> 1 > 2 or 3 > 2
True

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

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

此处,t可以是任何可迭代的。

答案 1 :(得分:0)

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

你必须分解或者分成两个独立的条件:

1 > 2 or 3 > 2

答案 2 :(得分:0)

1对应于true。因此结果为

1 or 3

1

1 > 2

是假的。

如果你已经尝试过答案,你可能已经知道了 1 or 3

在shell中。

答案 3 :(得分:0)

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

(1 > 2) or (3 > 2)

表达式:

(1 or 3)  > 2

首先计算1 or 3,然后尝试确定是否大于2。

类似地:

(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))

答案 4 :(得分: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