2011-12-27 1 views
-2

Je ne peux pas comparer une variable avec plusieurs valeurs. Par exemple j'ai besoin que la variable appelée _query soit différente de Sleep et Binlog.Python2.6 IF Utilisation de ET OU

if (query != "Sleep") or (query != "Binlog Dump"): 
    print query[4] 

Avec le code ci-dessus mon script ne fonctionne pas. Pourriez-vous m'aider?

Merci.

+2

Votre titre indique "ET OU". Avez-vous essayé votre expression avec 'and' au lieu de' ou'? –

+0

parce que je pense que peut-être j'ai besoin d'utiliser "et" afin de résoudre le problème ... probablement je me trompe ... – user1110801

+0

Non, vous avez raison, vous avez besoin de 'et '- alors pourquoi pensez-vous que vous avez besoin? '? –

Répondre

0

Peut-être utiliser l'évidence?

if _query not in ('Sleep', 'Binlog'): 
    print _query 

C'est aussi probablement l'idiome le plus Pythonien.

+0

ok merci Tanriol – user1110801

2

Pensez-y. query sera toujours être pas égal à deux ou "Sleep""Binlog Dump" - il ne peut jamais être égale à deux d'entre eux - et une expression or est vrai si soit de ses arguments est vrai. Donc, votre condition sera toujours vraie! Ce que vous voulez est:

if not (query == "Sleep" or query == "Binlog Dump"): 

Avec une algèbre booléenne appliquée, cela est logiquement équivalent à ce qui suit:

if query != "Sleep" and query != "Binlog Dump": 

Mais la première est plus facile à lire, car il exprime votre intention plus clairement: si le requête n'est pas l'un de ces deux termes.

Cette condition peut aussi être écrit clairement:

if query not in ("Sleep", "Binlog Dump"): 

Cela a l'avantage d'être facilement étendu à des conditions supplémentaires en cas de besoin, et il est aussi sans doute encore plus lisible que le premier exemple. En outre, vous n'avez pas besoin de répéter le nom de la variable que vous testez.