2010-11-11 16 views
27

Dans un morceau de mon programme je doute si j'utilise la comparaison correctement. je veux m'assurer que (u0 < = u < u0 + étape) avant de faire quelque chose.Comment utiliser la comparaison et 'sinon' en python?

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

Magie Python: u0 <= u <(u0 + pas) –

Répondre

42

Vous pouvez faire:

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

En utilisant une boucle:

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

Operator precedence in python
Vous pouvez voir que not X a une priorité supérieure and. Ce qui signifie que le not s'applique uniquement à la première partie (u0 <= u). Ecrire:

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

ou même

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

Il y a deux façons. En cas de doute, vous pouvez toujours essayer. Si cela ne fonctionne pas, vous pouvez ajouter des accolades supplémentaires pour vous assurer, comme ça:

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

Pourquoi pensez? Si not vous confond, changez vos clauses if et else pour éviter la négation.

je veux vous assurer que (u0 < = u < U0 + étape) avant de faire qqch.

Il suffit d'écrire cela.

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

Pourquoi le surcharger?

Si vous avez besoin d'un if vide - et que vous ne pouvez pas déterminer la logique - utilisez pass.

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

Merci :) ... à propos, sth est quelque chose! mais vous avez raison – masti

+0

"sth" est "quelque chose?" Dans quelle langue? –

+2

Je pense avoir vu cette abréviation dans certains dictionnaires. De toute façon, je ne suis pas anglophone, excusez mes erreurs en anglais! – masti

3

Dans ce cas particulier la plus claire solution est le S. Lott answer

Mais dans certaines conditions logiques complexes je préférerais utiliser une algèbre booléenne pour obtenir une solution claire.

Utiliser De la ¬ loi 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 

puis

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

... dans ce cas, la solution «claire» n'est pas plus claire: P

+0

Des conseils intéressants en général, mais comme vous l'avez dit, cela n'aide pas la clarté dans cette situation. –