===== Tests ===== Branchements conditionnels ========================== On souhaite exécuter un bloc d'instructions uniquement si une condition est remplie. On emploie pour cela le mot-clé :code:`if` suivie d'une expression à valeur booléenne. .. ipython:: python a = 4 # Changer la valeur de a pour comprendre ce qui se passe if a % 2 == 0 : print('a est pair') Si on veut introduire en plus un bloc d'instructions à exécuter lorsque la condition **n'est pas** remplie, on emploie le mot-clé :code:`else`. .. ipython:: python a = 5 if a % 2 == 0: ... print('a est pair') else: ... print('a est impair') Si on veut envisager plusieurs tests successifs, on emploie le mot-clé :code:`elif` (conctraction de :code:`else if`). .. ipython:: python a = 5 if a % 2 == 0: ... print('a est pair') elif a > 3: ... print('a est impair et strictement supérieur à 3') On peut évidemment combiner :code:`if`, :code:`elif` et :code:`else`. .. ipython:: python a = 1 if a % 2 == 0: ... print('a est pair') elif a > 3: ... print('a est impair et strictement supérieur à 3') else: ... print('a est impair et inférieur ou égal à 3') Expression conditionnelle ========================= On appelle *expression conditionnelle* une expression de la forme suivante. :: if else Cette expression est évaluée comme :code:`` si :code:`` est vraie et comme :code:`` sinon [#operateur_ternaire]_. .. ipython:: python a = 0 'papa' if a == 0 else 'maman' 'papa' if a == 1 else 'maman' Ce type d'expression peut également accomplir une action plutôt que de renvoyer un objet. .. ipython:: python li = [1, 2, 3] a = 0 li.append('toto') if a == 0 else li.append('titi') li # En fait, l'expression est évaluée à None print(li.append('toto') if a == 1 else li.append('titi')) li .. [#operateur_ternaire] On dit également que :code:`... if ... else ...` est un opérateur *ternaire*. En effet, une expression conditionnelle prend *trois* arguments et renvoie une valeur.