如何在python中使用比较和'如果不是'?

时间:2010-11-11 10:08:40

标签: python

在我的一个程序中,我怀疑我是否正确使用了比较。我想在做某事之前确保(u0< = u< u0 + step)。

if not (u0 <= u) and (u < u0+step):
    u0 = u0+ step # change the condition until it is satisfied
else:
    do something. # condition is satisfied

5 个答案:

答案 0 :(得分:50)

你可以这样做:

if not (u0 <= u <= u0+step):
    u0 = u0+ step # change the condition until it is satisfied
else:
    do sth. # condition is satisfied

使用循环:

while not (u0 <= u <= u0+step):
   u0 = u0+ step # change the condition until it is satisfied
do sth. # condition is satisfied

答案 1 :(得分:10)

Operator precedence in python
您可以看到not X的优先级高于and。这意味着not仅适用于第一部分(u0 <= u)。 写:

if not (u0 <= u and u < u0+step):  

甚至

if not (u0 <= u < u0+step):  

答案 2 :(得分:4)

在这种特殊情况下,最清晰的解决方案是S.Lott answer

但是在一些复杂的逻辑条件下,我更喜欢使用一些布尔代数来得到一个明确的解决方案。

使用De Morgan定律¬(A ^ B)=¬Av¬B

not (u0 <= u and u < u0+step)
(not u0 <= u) or (not u < u0+step)
u0 > u or u >= u0+step

然后

if u0 > u or u >= u0+step:
    pass

...在这种情况下,«clear»解决方案并不是更清楚:P

答案 3 :(得分:2)

为什么要思考?如果not让您感到困惑,请切换if和else子句以避免否定。

  

我想在做某事之前确定(u0&lt; = u&lt; u0 + step)。

写下来。

if u0 <= u < u0+step:
    "do sth" # What language is "sth"?  No vowels.  An odd-looking word.
else:
    u0 = u0+ step

为什么要过度思考呢?

如果您需要空if - 并且无法解决逻辑问题 - 请使用pass

 if some-condition-that's-too-complex-for-me-to-invert:
     pass
 else: 
     do real work here

答案 4 :(得分:0)

有两种方法。如有疑问,您可以随时尝试。如果它不起作用,你可以添加额外的括号,以确保,如:

if not ((u0 <= u) and (u < u0+step)):