一个表达式中的两个数值比较 python

two numerical comparisons in one expression python

我以为我在某处读到 python(至少 3.x)足够聪明来处理这个问题:

x = 1.01

if 1 < x < 0:
    print('out of range!')

但是它对我不起作用。

我知道我可以改用这个:

if ((x > 1) | (x < 0)):
    print('out of range!')

...但是可以修复上面的版本吗?

效果很好,就是你的表情总是False;试试这个:

x = .99

if 1 > x > 0:
    print('out of range!')

您可以在一个 复合 表达式中完成,正如您已经指出的那样,其他人也发表了评论。您不能在带有隐含连词(和/或)的表达式中执行此操作,就像您尝试使用 1 < x < 0 一样。您的表达式需要 or 连词,但 Python 在这种情况下的隐含操作是 and.

因此,要得到你想要的,你必须反转你的条件分支并应用 deMorgan 定律:

if not(0 <= x <= 1):
    print('out of range!')

现在你有了隐含的 and 操作,你得到了你想要的控制流。

Python 链式比较就像数学符号一样工作。在数学中,“0 < x < 1”表示x大于0小于1,“1 < x < 0”表示x大于1[=23] =]和小于0.

与.非或。两个条件都需要成立。

如果你想要一个"or",你可以自己写一个。在Python中是or,不是|| 是按位或。

if x > 1 or x < 0:
    whatever()

或者,您可以根据 "and":

来编写表达式
if not (0 <= x <= 1):
    whatever()