在我的一个程序中,我怀疑我是否正确使用了比较。我想在做某事之前确保(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
答案 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)):