Choisir entre deux options : if / else

Denis Dréano
PROG3-09

Choisir entre deux options : if / else

Objectifs cantonaux : O1.6.

Cours complet sur la plateforme Runestone de Cédric Donner : Instructions if … else.

Jusqu’ici, vos programmes exécutaient toujours les mêmes instructions, dans le même ordre, quelle que soit la situation. Pour rendre un programme « intelligent », il doit pouvoir réagir différemment selon les circonstances — c’est le rôle des instructions conditionnelles.

Poser une question : l’expression booléenne

▷ Définition — Expression booléenne

Une expression booléenne est une expression dont la valeur ne peut être que vraie (True) ou fausse (False). En Python, on obtient une expression booléenne notamment en comparant deux valeurs :

x == 5    # x est-il égal à 5 ?
x != 5    # x est-il différent de 5 ?
x > 5     # x est-il strictement supérieur à 5 ?
x <= 5    # x est-il inférieur ou égal à 5 ?

C’est cette réponse vraie/fausse que le programme utilise pour décider quel chemin emprunter.

L’instruction if

◈ Syntaxe — if

if expression_booleenne:
    # instructions exécutées seulement si l'expression est vraie
    ...

Attention à ne pas oublier les deux-points : à la fin de la ligne if, et à bien indenter les instructions du bloc, comme pour le corps d’une fonction ou d’une boucle for.

→ Exemple — reconnaître un prénom
prenom = input("Quel est votre prénom ? ")
if prenom == "Lisa":
    print("Bonjour Lisa !")
    print("Quel plaisir de vous revoir !")

Si l’utilisateur saisit autre chose que "Lisa", le programme ne fait simplement rien de plus — il n’exécute que les instructions de sa dernière ligne, dans tous les cas.

Représenter le déroulement : l’ordinogramme

▷ Définition — Ordinogramme (flow chart)

Un ordinogramme représente graphiquement le déroulement d’un programme :

  • les rectangles représentent des instructions (actions) ;
  • les losanges représentent des questions (expressions booléennes) — le programme n’emprunte qu’un seul des chemins possibles selon la réponse.

Que faire quand la condition est fausse ? Le mot-clé else

Si l’on veut que le programme réagisse aussi lorsque la condition est fausse, on pourrait être tenté d’écrire deux if séparés :

→ Deux if séparés (fonctionne, mais pas optimal)
prenom = input("Quel est votre prénom ? ")
if prenom == "Lisa":
    print("Bonjour Lisa !")
if prenom != "Lisa":
    print("Je ne vous connais pas !")

◈ Syntaxe — if / else

if expression_booleenne:
    # exécuté si l'expression est vraie
    ...
else:
    # exécuté si l'expression est fausse
    ...
→ Avec else (meilleure solution)
prenom = input("Quel est votre prénom ? ")
if prenom == "Lisa":
    print("Bonjour Lisa !")
else:
    print("Je ne vous connais pas !")

! Pourquoi préférer else à deux if

Avec deux if séparés, Python doit toujours évaluer les deux conditions (prenom == "Lisa" puis prenom != "Lisa"), même si la première suffisait déjà à savoir quoi faire. Avec if/else, dès que la première condition est vraie, le programme n’a même pas besoin de vérifier la seconde : le programme est à la fois plus court, plus lisible, et légèrement plus efficace — et il exprime clairement que les deux cas sont mutuellement exclusifs (un seul des deux peut être vrai à la fois).

Un exemple un peu plus riche : trouver le minimum et le maximum

→ Exemple — minmax(a, b, c)
def minmax(a, b, c):
    # trouve d'abord le minimum et le maximum entre a et b
    if a < b:
        minimum = a
        maximum = b
    else:
        minimum = b
        maximum = a

    # puis on compare c à ce qu'on a trouvé jusqu'ici
    if c < minimum:
        minimum = c
    if c > maximum:
        maximum = c

    print(minimum, maximum)


minmax(3, 5, 17)
minmax(17, 3, 5)
minmax(4, 4, 6)

Pour vérifier qu’une fonction comme celle-ci fonctionne bien, il faut la tester avec plusieurs cas différents : des nombres dans le désordre, des nombres identiques, des nombres négatifs — pas seulement le cas le plus simple.

Les mains à la pâte

  • Testez la fonction minmax avec toutes les permutations possibles de (3, 5, 17) : le résultat affiché doit toujours être 3 17.
  • Modifiez minmax pour qu’elle prenne cinq paramètres a, b, c, d, e et affiche le minimum et le maximum des cinq (indice : trouvez d’abord le minimum/maximum de a, b, c comme ci-dessus, puis celui de d, e, puis comparez les deux résultats intermédiaires entre eux).
  • Écrivez un programme qui demande à l’utilisateur un nombre et affiche "positif" ou "non positif" selon le cas, en utilisant if/else.