Est-il possible de "factoriser" une condition

Le problème exposé dans ce sujet a été résolu.

Bonjour, Je me pose la question suivante :
Est-il possible de "factoriser" le test de variable dans une condition ?
pour illustrer mes propos

Exemple à facto : if (var == 'a' OR var == 'b' OR var == 'c'):

Et d'obtenir quelque chose de similaire à cette syntaxe : if (var == 'a' OR 'b' OR 'c'):

Sans bien sur utiliser de for et de liste comprenant les valeurs

Note : Cela fonctionne sur tout type que tu peux itérer. Donc tu peux tout aussi bien écrire cela if var in 'abc': pour faire plus court.

Note2 : lorsque tu as des conditions simples comme celles-ci mais dans lesquelles tu veux plus d'éléments possibles (par exemple 'abc…z' et en ignorant str.isalpha()), tu peux faire une formulation comme suit : if var >= 'a' and var <= 'z', voire même (plus pythonic) : if 'a' <= var <= 'z'.

+1 -0

Je me permets de le faire remarquer parce que je me suis déjà fait avoir bêtement, à transformer un tuple de chaînes en une chaîne simple de ce style.

Autre remarque, quand tu as vraiment beaucoup de conditions sur des chaînes ça peut aussi valloir le coup d'envisager utiliser un dictionnaire.

+2 -0

Je me permets de le faire remarquer parce que je me suis déjà fait avoir bêtement, à transformer un tuple de chaînes en une chaîne simple de ce style.

nohar

Il y a peu j'ai perdu mon temps sur un truc dans ce genre :

1
2
>>> '' in 'abc'
True

Et je ne comprends toujours pas pourquoi. [troll] Probablement encore des considérations absurdes de zéro et d'infini… :-° [/troll]

+0 -0

Pour le coup je trouve ça logique : in représente l'inclusion au sens ensembliste sur les chaînes de caractères. L'ensemble vide est inclus dans tous les ensembles, c'est sa définition.

Ce que je ne trouve pas logique par contre, c'est que ['c', 'd'] not in ['a', 'b', 'c', 'd'].

En y réfléchissant, ça s'explique par le fait que in représente non pas l'inclusion sur les collections, mais l'appartenance. C'est un peu déroutant, mais c'est le choix pratique : 99 % du temps on s'en fout de l'inclusion, et une liste peut être un élément d'une autre. Sauf qu'une chaîne n'est pas une collection en Python mais un objet scalaire (la notion de caractère n'existe pas), donc ça explique le sens différent de l'opérateur, d'autant que dans ce cas, faire de in un opérateur d'inclusion répond à tous les besoins, à quelques corner cases près.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte