88 votes

Comment vérifier si une variable est égale à une chaîne de caractères ou à une autre ?

if var is 'stringone' or 'stringtwo':
    dosomething()

Cela ne fonctionne pas ! J'ai une variable et j'ai besoin qu'elle fasse quelque chose lorsqu'elle est l'une des valeurs, mais elle n'entre pas dans l'instruction if. En Java if (var == "stringone" || "stringtwo") travaux. Comment puis-je écrire cela en Python ?

182voto

Dietrich Epp Points 72865

Cela ne fait pas ce que vous attendez :

if var is 'stringone' or 'stringtwo':
    dosomething()

C'est la même chose que :

if (var is 'stringone') or 'stringtwo':
    dosomething()

Ce qui est toujours vrai, puisque 'stringtwo' est considérée comme une valeur "vraie".

Il y a deux possibilités :

if var in ('stringone', 'stringtwo'):
    dosomething()

Ou vous pouvez écrire des tests d'égalité séparés,

if var == 'stringone' or var == 'stringtwo':
    dosomething()

N'utilisez pas is parce que is compare l'identité de l'objet. Vous pouvez parfois vous en tirer parce que Python interne beaucoup de chaînes de caractères, tout comme vous pouvez vous en tirer en Java parce que Java interne beaucoup de chaînes de caractères. Mais n'utilisez pas is sauf si vous voulez vraiment l'identité de l'objet.

>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True  # but could be False

28voto

inspectorG4dget Points 25092
if var == 'stringone' or var == 'stringtwo':
    do_something()

ou plus pythoniques,

if var in ['string one', 'string two']:
    do_something()

6voto

Nether Points 101
if var == 'stringone' or var == 'stringtwo':
    dosomething()

is' est utilisé pour vérifier si les deux références font référence au même objet. Il compare l'adresse mémoire. Apparemment, 'stringone' et 'var' sont des objets différents, ils contiennent la même chaîne de caractères, mais ce sont deux instances différentes de la classe 'str'. Elles ont donc bien sûr deux adresses mémoire différentes, et 'is' renverra False.

4voto

Andrew Jaffe Points 9205

Deux chèques séparés. En outre, utilisez == plutôt que is pour vérifier l'égalité plutôt que l'identité.

 if var=='stringone' or var=='stringtwo':
     dosomething()

0voto

Yaseer Arafat Points 11
for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
        if createunicode(a.text) in ['<','<']:
            links.append(a.attrMap['href'])
        else:
            continue

Ça marche pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X