在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):
但我只是想知道为什么它不起作用!
答案 0 :(得分:4)
我们来看看(1 or 3) > 2
:
(1 or 3)
,给出1
(如果您想知道原因,请参阅The Peculiar Nature of and
and or
。)1 > 2
,给出False
。表达您想要表达的内容的正确方法是:
>>> 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