Jak używać porównania i „jeśli nie” w Pythonie?


W jednym kawałku mojego programu wątpię, czy poprawnie używam porównania. chcę się upewnić (u0 & < = u & < u0 + krok), zanim cokolwiek zrobię.
if not (u0 <= u) and (u < u0+step):
u0 = u0+ step # change the condition until it is satisfied
else:
do something. # condition is satisfied

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz to zrobić:
if not (u0 <= u <= u0+step):
u0 = u0+ step # change the condition until it is satisfied
else:
do sth. # condition is satisfied

Korzystanie z pętli:
while not (u0 <= u <= u0+step):
u0 = u0+ step # change the condition until it is satisfied
do sth. # condition is satisfied
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Pierwszeństwo operatorów w Pythonie
http://docs.python.org/referen ... ryJak widać,
not X
ma pierwszeństwo przed
i
. Oznacza to, że
not
dotyczy tylko pierwszej części
(u0 & < = u)
.
Pisać:
if not (u0 <= u and u < u0+step):

lub nawet więcej
if not (u0 <= u < u0+step):
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W tym konkretnym przypadku najwyraźniejszym rozwiązaniem jest

odpowiedź
https://coderoad.ru/4153260/
S.Lott
Ale w niektórych złożonych warunkach logicznych wolałbym raczej użyć algebry boolowskiej, aby uzyskać jasne rozwiązanie.
Stosując prawo de Morgana (A ^ B) = AvB
not (u0 <= u and u < u0+step)
(not u0 <= u) or (not u < u0+step)
u0 > u or u >= u0+step

następnie
if u0 > u or u >= u0+step:
pass

...
w tym przypadku „jasne” rozwiązanie nie jest jaśniejsze: P
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dlaczego myślisz? Jeśli
nie
wprowadza Cię w błąd, zmień klauzule if i else, aby uniknąć negacji.

chcę się upewnić (u0 & < = u & < u0 + krok) przed zrobieniem czegoś.

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

Dlaczego tak dużo myślisz?
Jeśli potrzebujesz pustego
if
- a nie możesz zrozumieć logiki - użyj
pass
.
if some-condition-that's-too-complex-for-me-to-invert:
pass
else:
do real work here
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Istnieją dwa sposoby. W razie wątpliwości zawsze możesz po prostu spróbować. Jeśli to nie zadziała, możesz dodać dodatkowe nawiasy, aby zobaczyć, jak to jest:
if not ((u0 <= u) and (u < u0+step)):

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się