if test_1: print( "bloc d'instructions 1" ) elif test_2: print( "bloc d'instructions 2" ) elif test_n: print( "bloc d'instructions n" ) else: print( "bloc d'instructions n+1" )
L'évaluation des test est faite ainsi:
En fait, dans une structure if, elif, else, un seul bloc d'instructions sera exécuté. Regardons maintenant ce que nous pouvons avoir dans un test.
Dans un test d'un *if* ou d'un *elif*, vous pouvez avoir absolument n'importe quelle expression. L'expression est passée en argument de la fonction built-in bool qui retournera vrai ou faux. Vous avez une expression, cette expression va être exécutée, elle va produire un objet et python va appeler *bool(objet)*. Que va faire *bool* sur cet objet?
L'intuition derrière ça, c'est que un objet vide, de longueur nulle, est considéré comme faux, un objet qui n'est pas vide est considéré comme vrai.
# si d est vide il ne sera pas affiché if d: print(d) # la syntaxe est proche du langage naturel if 'a' in 'marc': print('lettre présente') s = '123' # on définit l'entier et on l'affiche # que si la chaîne de caractère représente un nombre if s.isdecimal(): print( int(s) )
Lorsque vous avez plusieurs conditions, vous pouvez les combiner avec les opérateurs de tests booléens.
Il est d'ailleurs intéressant de remarquer que ces deux derniers opérateurs sont ce qu'on appelle short-circuit. Cela veut dire que A et B est vraie si les deux sont vraies. Donc si on évalue A à faux, on sait que le A and B sera faux donc on n'évaluera pas le B. De même, A or B est vraie si A est vraie, donc si jamais A est vraie, dans le A ou B, on n'évaluera pas le B. C'est ce qu'on appelle short-circuit, court-circuit, on va court-circuiter l'évaluation si on sait que le test est de toute façon déjà validé.
On distingue:
La forme du if présentée précédemment ne peut pas servir à renvoyer une valeur, c'est donc une instruction.
Le code suivant présente un cas usuel:
#affectation d'une valeur selon une condition # une expression x est évaluée, # pour l'exemple on la fixe a vrai x = True if x: y = 12 else: = 35 print(y)
Il existe en Python une expression qui fait le même genre de test: c'est la forme dite d'expression conditionnelle, qui est une expression à part entière (elle retourne une valeur). Elle utilise la syntaxe suivante:
y = 12 if x else 35
Cette expression conditionnelle rend le cas usuel présenté avant plus concis et peut dans certains cas rendre le code plus fonctionnel et plus fluide.
Comme cette forme est une expression, on peut l'utiliser dans une autre expression conditionnelle:
# on veut calculer en fonction d'une entrée x # une sortie qui vaudra # -1 si x < -10 # 0 si -10 <= x <= 10 # 1 si x > 10 x = 5 # ou quoi que ce soit d'autre valeur = -1 if x < -10 else (0 if x <= 10 else 1) print(valeur)
Un objet non vide conduit à une expression vraie, on peut tout à fait mettre une compréhension comme condition, ce qui peut être utile pour savoir si au moins un élément remplit une condition, comme par exemple:
inputs = [23, 65, 24] # y a-t-il dans inputs au moins un nombre # dont le carré est de la forme 10*n+5 def condition(n): return (n * n) % 10 == 5 if [value for value in inputs if condition(value)]: print("au moins une entrée convient")