一个表达式中的两个数值比较 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()
我以为我在某处读到 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()