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
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.
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.
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") |
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") |
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") |
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") |
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.
Une instruction permet d'exécuter un ou plusieurs traitements.
Une expression permet de calculer une valeur.
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) |
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) |
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).
"C'est un petit chiffre"
: cette partie correspond à la valeur à produire si la condition est vraie.
value < 5
: c'est la condition à proprement parler. Elle est obligatoirement préfixée du mot clé if
et suffixée du mot clé else
.
"C'est un grand chiffre"
: cette partie correspond à la valeur à produire si la condition est fausse.
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
).
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é).
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 >>>
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 >>>
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. ;-)
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)) |
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)) |
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)) |
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)) |
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 :