Как использовать сравнение и "если нет" в 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
Ответы
Ответ 1
Вы можете сделать:
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
Ответ 2
Приоритет оператора в python
Вы можете видеть, что not X
имеет более высокий приоритет, чем and
. Это означает, что not
применяется только к первой части (u0 <= u)
.
Запись:
if not (u0 <= u and u < u0+step):
или даже
if not (u0 <= u < u0+step):
Ответ 3
В этом конкретном случае самым ясным решением является ответ S.Lott
Но в некоторых сложных логических условиях я бы предпочел использовать некоторую булеву алгебру, чтобы получить четкое решение.
Используя закон Де Моргана ¬ (A ^ B) = ¬AvBB
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
... в этом случае "ясное" решение не более понятно: P
Ответ 4
Зачем думать? Если not
смущает вас, включите предложения if и else, чтобы избежать отрицания.
Я хочу убедиться, что (u0 <= u < 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
Ответ 5
Есть два пути. В случае сомнений вы всегда можете попробовать. Если это не сработает, вы можете добавить дополнительные фигурные скобки, чтобы убедиться, например:
if not ((u0 <= u) and (u < u0+step)):