Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Les conditions avec les mots clés if / elif / else

Bloc d'instructions et indentation L'instruction match / case


Accès rapide :
La vidéo
L'instruction if / elif / else
Un simple if, sans autre cas
Un if avec une branche else
Un if avec plusieurs conditions
L'expression conditionnelle if / else
Quelques autres cas d'utilisation du mot clé if
Utilisation au sein d'une compréhension de liste
Utilisation au sein d'un générateur
Travaux pratiques
Les énoncés
Les corrections

La vidéo

Cette vidéo vous montre différents cas d'utilisation des mots clés if, elif et else. Y sont étudiés : l'instruction if, l'opérateur conditionnel (ternaire), les listes en compréhension et les générateurs.


Les conditions avec les mots clés if / elif / else.

L'instruction if / elif / else

L'instruction if (l'instruction « si », si on la traduit en français) permet d'évaluer une condition et d'effectuer des traitements en fonction de la valeur de cette condition. Il existe plusieurs variantes de cette instruction.

Un simple if, sans autre cas

Avec cette variante, on ne cherche à exécuter un traitement que si et uniquement si la condition est vraie (si elle retourne True). Dans l'exemple suivant, une valeur aléatoire entière est générée. Dans le cas où cette valeur est nulle (opérateur de comparaison ==), le programme affiche zéro sur la console.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
# On importe la fonction randint définie dans le module random.
from random import randint

# On calcule une valeur aléatoire comprise entre 0 et 9 (bornes incluses).
value = randint(0, 9)
print(f"Pour information, value = {value}")

# On vérifie si la variable value est égale à zéro.
if value == 0:
    # Si tel est le cas, on affiche le chiffre en toutes lettres.
    print("Zéro")
Un simple if, sans autre cas.

Un if avec une branche else

Cette seconde variante permet d'exécuter un bloc d'instructions dans le cas où la condition est vraie et un autre bloc d'instructions dans le cas où la condition est fausse (si elle retourne False). Ce dernier cas sera introduit par le mot clé else (« sinon », en français).

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
# On importe la fonction randint définie dans le module random.
from random import randint

# On calcule une valeur aléatoire comprise entre 0 et 9 (bornes incluses).
value = randint(0, 9)
print(f"Pour information, value = {value}")

# On vérifie si la variable value est égale à zéro ou non.
if value == 0:
    print("La valeur est nulle")
else:
    print("La valeur n'est pas nulle")
Un if avec une branche else.

Un if avec plusieurs conditions

Cette nouvelle variante de l'instruction if permet de tester plusieurs conditions (plusieurs cas). Le premier cas est introduit par le mot clé if alors que les suivants seront eux introduit par le mot clé elif. On peut aussi introduire un bloc associé à toutes les autres situations via le mot clé else. Dans l'exemple suivant, un chiffre est choisi aléatoirement, puis on cherche à l'afficher en toutes lettres.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
from random import randint

value = randint(0, 9)
print(f"Pour information, value = {value}")

if value == 0:
    print("Zéro")
elif value == 1:
    print("Un")
elif value == 2:
    print("Deux")
elif value == 3:
    print("Trois")
elif value == 4:
    print("Quatre")
elif value == 5:
    print("Cinq")
elif value == 6:
    print("Six")
elif value == 7:
    print("Sept")
elif value == 8:
    print("Huit")
elif value == 9:
    print("Neuf")
else:
    print("Ce n'est pas un chiffre mais un nombre")
Un if avec plusieurs conditions.

Bien entendu, vous pouvez définir des conditions avec des variables de types quelconques (pas forcément numériques). Dans ce nouvel exemple, nous allons tester des chaînes de caractères saisies sur la console. Et en fonction de la commande saisie, on lance le traitement associé : ls ou dir affichent le contenu du dossier courant, cd permet de changer le répertoire courant, exit permet d'arrêter le programme et toute autre saisie est pour l'heure non reconnue.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
import os

print("Welcome to SuperShell V1.0")

is_running = True
while is_running:
    cmd = input("Veuillez saisir une commande : ")
    if cmd == "exit":
        is_running = False
    # elif cmd == "ls" or cmd == "dir":
    elif cmd in ("ls", "dir"):
        files = os.listdir(".")
        for file in files:
            print(file)
    elif cmd[0:3] == "cd ":
        os.chdir(cmd[3:])
    else:
        print("Commande", cmd, " inconnue")

print("Bye bye")
Exemple d'utilisation de l'instruction if/elif/else appliqué à des comparaisons de chaînes de caractères.

L'expression conditionnelle if / else

Les deux mots clés if / else peuvent aussi être utilisés sous la forme d'expression conditionnelle (et non plus d'instruction). Mais qu'elle est la différence entre une instruction et une expression ? En fait, c'est très simple.

Par exemple, il est possible d'initialiser une variable en fonction de l'évaluation d'une condition par une instruction if. Voici un exemple simpliste.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
# On importe la fonction randint définie dans le module random.
from random import randint

# On calcule une valeur aléatoire comprise entre 0 et 9 (bornes incluses).
value = randint(0, 9)
print(f"Pour information, value = {value}")

# On cherche à initialiser la variable message
message = "initial"
if value < 5:
    message = "C'est un petit chiffre"
else:
    message = "C'est un grand chiffre"
    
# On affiche le message calculé
print(message)
Exemple d'initialisation d'une variable via une instruction if à deux branches.

Certains programmeurs Python simplifieront l'écriture de ce code en utilisant l'expression conditionnelle if / else. Voici comment faire.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
# On importe la fonction randint définie dans le module random.
from random import randint

# On calcule une valeur aléatoire comprise entre 0 et 9 (bornes incluses).
value = randint(0, 9)
print(f"Pour information, value = {value}")

# On cherche à initialiser la variable message
message = "C'est un petit chiffre" if value < 5 else "C'est un grand chiffre"
    
# On affiche le message calculé
print(message)
Exemple d'initialisation d'une variable via une expression conditionnelle.

L'expression conditionnelle se trouve à la droite de message = (en ligne 9). Cette expression est constituée de trois parties obligatoires (l'ordre est important).

Au final, la valeur produite est stockée dans la variable message. Dans les faits, les deux exemples de code proposés sont équivalents : ce n'est qu'une histoire de préférence sur le style de codage. Personnellement, je reconnais que j'aime bien la seconde approche (l'expression conditionnelle if / else).

Quelques autres cas d'utilisation du mot clé if

A titre de rappel, je souhaitais reparler de la possibilité d'utiliser le mot clé if dans d'autres situations et notamment dans le cas des listes en compréhension (ou assimilé).

Utilisation au sein d'une compréhension de liste

L'exemple ci-dessous permet de construire une liste à partir d'une autre, tout en filtrant les données à considérer : le filtrage est réalisé via le mot clé if qui doit être placé à droite de la liste en compréhension.

>>> original = [10, 20, 30, 40, 50, 60]
>>> final_list = [value * 2 for value in original if value >= 40]
>>> type(final_list)
<class 'list'>
>>> for value in final_list:
...     print(value)
... 
80
100
120
>>>

Utilisation au sein d'un générateur

Cet autre exemple est très proche du précédent, mais au lien d'exploiter une liste en compréhesion, j'y produis un générateur qui, lui aussi, supporte l'utilisation du mot clé if. Bien que différents, la finalité de ces deux exemples de code reste la même : filtrer et traiter des valeurs à partir de jeu de données initial.

>>> original = [10, 20, 30, 40, 50, 60]
>>> final_generator = (value * 2 for value in original if value >= 40)
>>> print(final_generator)
<generator object <genexpr> at 0x7fbb02c76f10>
>>> for value in final_generator:
...     print(value)
... 
80
100
120
>>> 
syntaxiquement parlant, le générateur est défini entre parenthèses alors que la liste en compréhension est introduite par une paire de crochets.

Travaux pratiques

Les énoncés

Exercice 1 : commencez par demander la saisie d'un mot à partir du clavier. Une fois le mot saisi, vous devez créer une liste contenant toutes les voyelles présentes dans le mot, ainsi qu'une autre liste contenant toutes les consonnes. Afficher les deux listes sur la console. Note : nous ne considérerons pas les lettres accentuées et nous seront insensible à la casse.

Exercice 2 : faire la même chose que l'exercice 1, mais en affichant sur la console l'ensemble des voyelles sans doublons et idem pour les consonnes. Par exemple le mot « consonne » contient les deux voyelles « o » et « e » et les consonnes « c », « n » et « s »

Exercice 3 : faire la même chose que l'exercice 1, en utilisant des listes en compréhension en lieu et place de l'instruction if.

Comme toujours, essayez de faire ces exercices sans regarder directement la correction ci-dessous. ;-)

Les corrections

Exercice 1 : voici ma proposition de correction.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
# On demande la saisie du mot à traiter.
word = input("Veuillez saisir un mot : ")

# On définit les deux listes à produire.
vowels = []
consonants = []

# On parcourt toutes les lettres contenues dans le mot.
for letter in word:
    letter = letter.lower()
    if letter in "aeiouy":
        vowels.append(letter)
    else:
        consonants.append(letter)

# On affiche les deux ensembles de lettres.
print("Voyelles :", " ".join(vowels))
print("Consonnes :", " ".join(consonants))
Correction de l'exercice 1

Et voici les résultats produits par cet exemple.

Veuillez saisir un mot : consonnes
Voyelles : o o e
Consonnes : c n s n n s

Exercice 2 : comme souvent, on peut procéder de diverses manières pour répondre à ce besoin. Voici une première proposition de correction, somme toute assez naïve.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
# On demande la saisie du mot à traiter.
word = input("Veuillez saisir un mot : ")

# On définit les deux listes à produire.
vowels = []
consonants = []

# On parcourt toutes les lettres contenues dans le mot.
for letter in word:
    letter = letter.lower()
    if letter in "aeiouy":
        if letter not in vowels:
            vowels.append(letter)
    else:
        if letter not in consonants:
            consonants.append(letter)

# On affiche les deux ensembles de lettres.
print("Voyelles :", " ".join(vowels))
print("Consonnes :", " ".join(consonants))
Correction de l'exercice 2

Et voici les résultats produits par cet exemple.

Veuillez saisir un mot : consonnes
Voyelles : o e
Consonnes : c n s

Une autre solution aurait consisté à utiliser des set : pour rappel ce type de collection filtre automatiquement les doublons.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
# On demande la saisie du mot à traiter.
word = input("Veuillez saisir un mot : ")

# On définit les deux listes à produire.
vowels = set()
consonants = set()

# On parcourt toutes les lettres contenues dans le mot.
for letter in word:
    letter = letter.lower()
    if letter in "aeiouy":
        vowels.add(letter)
    else:
        consonants.add(letter)

# On affiche les deux ensembles de lettres.
print("Voyelles :", " ".join(vowels))
print("Consonnes :", " ".join(consonants))
Une seconde correction de l'exercice 2
avec cette version, l'ordre d'apparition des lettres ne sera pas forcément celui dans le mot initial.

Exercice 3 : voici ma proposition de correction, en utilisant des listes en compréhension.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
# On demande la saisie du mot à traiter.
word = input("Veuillez saisir un mot : ")

# On génère les deux ensembles de lettres
vowels = [letter.lower() for letter in word if letter.lower() in "aeiouy"]
consonants = [letter.lower() for letter in word if letter.lower() not in "aeiouy"]

# On affiche les deux ensembles de lettres.
print("Voyelles :", " ".join(vowels))
print("Consonnes :", " ".join(consonants))
Correction de l'exercice 3
Bloc d'instructions et indentation L'instruction match / case