Ce notebook couvre les instructions conditionnelles en Python, notamment les tests d’égalité et d’inégalité, les vérifications de conditions multiples, les expressions booléennes, et l’utilisation des listes avec des instructions if.
Table des Matières¶
La programmation implique souvent d’examiner un ensemble de conditions et de décider quelle action entreprendre en fonction de ces conditions. L’instruction if de Python vous permet d’examiner l’état actuel d’un programme et de répondre de manière appropriée à cet état.
Dans ce chapitre, vous apprendrez à écrire des tests conditionnels, qui vous permettent de vérifier n’importe quelle condition d’intérêt. Vous apprendrez à écrire des instructions if simples, et vous apprendrez comment créer une série plus complexe d’instructions if pour identifier quand les conditions exactes que vous souhaitez sont présentes. Vous appliquerez ensuite ce concept aux listes, ce qui vous permettra d’écrire une boucle for qui traite la plupart des éléments d’une liste d’une manière, mais gère certains éléments avec des valeurs spécifiques d’une manière différente.
Un Exemple Simple¶
L’exemple court suivant montre comment les tests if vous permettent de répondre correctement à des situations spéciales. Imaginez que vous ayez une liste de marques de voitures et que vous vouliez imprimer le nom de chaque voiture. Les noms de voitures sont des noms propres, donc les noms de la plupart des voitures doivent être imprimés avec la première lettre en majuscule (casse titre). Cependant, la valeur ‘toyota’, très courante au Cameroun, devrait être imprimée en majuscules. Le code suivant parcourt une liste de noms de voitures et recherche la valeur ‘toyota’. Chaque fois que la valeur est ‘toyota’, elle est imprimée en majuscules au lieu de la casse titre:
voitures = ['audi', 'toyota', 'mercedes', 'hyundai'] # Liste de voitures, certaines communes au Cameroun
for voiture in voitures:
if voiture == 'toyota': # Vérifie si la voiture est 'toyota'
print(voiture.upper()) # Imprime en MAJUSCULES
else:
print(voiture.title()) # Imprime avec la première lettre en majusculeAudi
TOYOTA
Mercedes
Hyundai
La boucle dans cet exemple vérifie d’abord si la valeur actuelle de voiture est ‘toyota’. Si c’est le cas, la valeur est imprimée en majuscules. Si la valeur de voiture est autre que ‘toyota’, elle est imprimée en casse titre:
Audi
TOYOTA
Mercedes
HyundaiCet exemple combine un certain nombre de concepts que vous apprendrez dans ce chapitre. Commençons par examiner les types de tests que vous pouvez utiliser pour examiner les conditions de votre programme.
Tests Conditionnels¶
Au cœur de chaque instruction if se trouve une expression qui peut être évaluée comme True (Vrai) ou False (Faux) et est appelée un test conditionnel. Python utilise les valeurs True et False pour décider si le code dans une instruction if doit être exécuté. Si un test conditionnel est évalué à True, Python exécute le code suivant l’instruction if. Si le test est évalué à False, Python ignore le code suivant l’instruction if.
Vérification de l’Égalité¶
La plupart des tests conditionnels comparent la valeur actuelle d’une variable à une valeur spécifique d’intérêt. Le test conditionnel le plus simple vérifie si la valeur d’une variable est égale à la valeur d’intérêt:
voiture = 'toyota'
print(voiture == 'toyota') # Est-ce que voiture est égale à 'toyota' ?
# TrueTrue
La première ligne définit la valeur de voiture à ‘toyota’ en utilisant un seul signe égal. La deuxième ligne vérifie si la valeur de voiture est ‘toyota’ en utilisant un double signe égal (==). Cet opérateur d’égalité renvoie True si les valeurs à gauche et à droite de l’opérateur correspondent, et False si elles ne correspondent pas. Les valeurs dans cet exemple correspondent, donc Python renvoie True.
Lorsque la valeur de voiture est autre que ‘toyota’, ce test renvoie False:
voiture = 'mitsubishi'
print(voiture == 'toyota') # Est-ce que voiture est égale à 'toyota' ?
# FalseFalse
Un seul signe égal (=) est une instruction d’affectation (par exemple, “Définir la valeur de voiture à ‘mitsubishi’”). Un double signe égal (==) pose une question (“La valeur de voiture est-elle égale à ‘toyota’ ?”).
Ignorer la Casse lors de la Vérification de l’Égalité¶
Le test d’égalité est sensible à la casse en Python. Par exemple, deux valeurs avec une capitalisation différente ne sont pas considérées comme égales :
voiture = 'Toyota'
print(voiture == 'toyota')
# FalseFalse
Si la casse importe, ce comportement est avantageux. Mais si la casse n’importe pas et que vous voulez simplement tester la valeur d’une variable, vous pouvez convertir la valeur de la variable en minuscules avant de faire la comparaison:
voiture = 'Toyota'
print(voiture.lower() == 'toyota') # Convertit 'Toyota' en 'toyota' avant de comparer
# TrueTrue
Ce test renverrait True quelle que soit la façon dont la valeur ‘Toyota’ est formatée, car le test est désormais insensible à la casse. La méthode lower() ne modifie pas la valeur initialement stockée dans voiture:
voiture = 'Toyota'
print(voiture.lower() == 'toyota')
# True
print(voiture) # La variable originale n'est pas modifiée
# ToyotaTrue
Toyota
La méthode lower() est particulièrement utile pour stocker des données. Souvent, vous ne voudrez pas faire confiance à la capitalisation fournie par vos utilisateurs, vous convertirez donc les chaînes en minuscules avant de les stocker.
Vérification de l’Inégalité¶
Lorsque vous voulez déterminer si deux valeurs ne sont pas égales, vous pouvez combiner un point d’exclamation et un signe égal (!=). Le point d’exclamation représente la négation (not).
Utilisons une instruction if pour examiner comment utiliser l’opérateur d’inégalité. Stockons un plat préféré dans une variable, puis imprimons un message si la personne n’a pas choisi ‘fufu’ (un plat populaire en Afrique de l’Ouest et Centrale):
plat_prefere = 'ndole' # Un plat camerounais populaire
if plat_prefere != 'fufu': # Vérifie si le plat préféré N'EST PAS 'fufu'
print("Tiens bon le fufu !") # Message si ce n'est pas fufuTiens bon le fufu !
La ligne avec if compare la valeur de plat_prefere à la valeur ‘fufu’. Si ces deux valeurs ne correspondent pas, Python renvoie True et exécute le code indenté suivant l’instruction if. Si les deux valeurs correspondent, Python renvoie False et n’exécute pas le code suivant l’instruction if.
Comme la valeur de plat_prefere n’est pas ‘fufu’, la fonction print() est exécutée:
Tiens bon le fufu !Comparaisons Numériques¶
Tester des valeurs numériques est assez simple. Par exemple, le code suivant vérifie si une personne a 18 ans (âge de la majorité dans de nombreux pays africains) :
age = 18
print(age == 18)
# TrueTrue
Vous pouvez également tester si deux nombres ne sont pas égaux. Par exemple, le code suivant imprime un message si la réponse donnée n’est pas correcte :
reponse_attendue = 42
reponse_utilisateur = 17
if reponse_utilisateur != reponse_attendue: # Si la réponse de l'utilisateur n'est pas 42
print("Ce n'est pas la bonne réponse. Veuillez réessayer !")Ce n'est pas la bonne réponse. Veuillez réessayer !
Le test conditionnel réussit, car la valeur de reponse_utilisateur (17) n’est pas égale à 42. Comme le test réussit, le bloc de code indenté est exécuté:
Ce n'est pas la bonne réponse. Veuillez réessayer !Vous pouvez inclure diverses comparaisons mathématiques dans vos instructions conditionnelles, telles que inférieur à (<), inférieur ou égal à (<=), supérieur à (>), et supérieur ou égal à (>=):
prix_plantain = 750 # Prix en FCFA
print(prix_plantain < 1000) # Est-ce que le prix est inférieur à 1000 FCFA ?
# True
print(prix_plantain <= 750) # Est-ce que le prix est inférieur ou égal à 750 FCFA ?
# True
print(prix_plantain > 1000) # Est-ce que le prix est supérieur à 1000 FCFA ?
# False
print(prix_plantain >= 1000) # Est-ce que le prix est supérieur ou égal à 1000 FCFA ?
# FalseTrue
True
False
False
Vérification de Conditions Multiples¶
Vous voudrez peut-être vérifier plusieurs conditions en même temps. Par exemple, vous pourriez avoir besoin que deux conditions soient True pour effectuer une action, ou être satisfait si une seule condition est True. Les mots-clés and (et) et or (ou) peuvent vous aider dans ces situations.
Utilisation de and pour Vérifier Plusieurs Conditions
Pour vérifier si deux conditions sont toutes les deux True simultanément, utilisez le mot-clé and pour combiner les deux tests conditionnels. Si chaque test réussit, l’expression globale est évaluée à True. Si l’un ou l’autre des tests échoue, ou si les deux échouent, l’expression est évaluée à False.
Par exemple, vous pouvez vérifier si une personne a l’âge légal pour conduire (18 ans au Cameroun) et possède un permis:
age_conducteur = 22
possede_permis = True
print(age_conducteur >= 18 and possede_permis == True)
# True
age_conducteur = 17
print(age_conducteur >= 18 and possede_permis == True)
# FalseTrue
False
Utilisation de or pour Vérifier Plusieurs Conditions
Le mot-clé or vous permet également de vérifier plusieurs conditions, mais il réussit si l’un ou l’autre, ou les deux, des tests individuels réussissent. Une expression or échoue uniquement lorsque les deux tests individuels échouent.
Vérifions si un étudiant a payé ses frais d’inscription ou a obtenu une bourse :
a_paye_inscription = True
a_eu_bourse = False
print(a_paye_inscription == True or a_eu_bourse == True)
# True
a_paye_inscription = False
print(a_paye_inscription == True or a_eu_bourse == True)
# FalseTrue
False
Vérifier si une Valeur est dans une Liste¶
Il est parfois important de vérifier si une liste contient une certaine valeur avant d’entreprendre une action. Par exemple, vous pourriez vouloir vérifier si un ingrédient est déjà dans la liste des ingrédients d’un plat populaire comme le Ndolé.
Pour savoir si une valeur particulière est déjà dans une liste, utilisez le mot-clé in. Faisons une liste d’ingrédients pour le Ndolé et vérifions si certains ingrédients sont dans la liste:
ingredients_ndole = ['feuilles_ameres', 'arachides', 'crevettes', 'huile_rouge']
print('arachides' in ingredients_ndole)
# True
print('viande_de_boeuf' in ingredients_ndole)
# FalseTrue
False
Les lignes avec in indiquent à Python de vérifier l’existence de ‘arachides’ et ‘viande_de_boeuf’ dans la liste ingredients_ndole.
Vérifier si une Valeur n’est pas dans une Liste¶
Parfois, il est important de savoir si une valeur n’apparaît pas dans une liste. Vous pouvez utiliser le mot-clé not in dans cette situation. Par exemple, considérez une liste de joueurs suspendus d’une équipe de football. Vous pouvez vérifier si un joueur n’a pas été suspendu avant de l’autoriser à jouer :
joueurs_suspendus = ['etoo', 'mboma', 'kameni']
joueur = 'song'
if joueur not in joueurs_suspendus: # Si 'song' n'est PAS dans la liste des suspendus
print(f"{joueur.title()}, tu peux jouer le match.")Song, tu peux jouer le match.
La ligne avec if se lit assez clairement. Si la valeur de joueur n’est pas dans la liste joueurs_suspendus, Python renvoie True et exécute la ligne indentée.
Le joueur ‘song’ n’est pas dans la liste joueurs_suspendus, il voit donc un message l’invitant à jouer:
Song, tu peux jouer le match.Expressions Booléennes¶
Une expression booléenne est simplement un autre nom pour un test conditionnel. Une valeur booléenne est soit True, soit False, tout comme la valeur d’une expression conditionnelle après son évaluation. Les valeurs booléennes sont souvent utilisées pour suivre certaines conditions, comme savoir si un jeu est en cours ou si un utilisateur peut modifier certains contenus sur un site web:
partie_active = True
peut_modifier = FalseInstructions if¶
Maintenant que vous comprenez les tests conditionnels, vous pouvez commencer à écrire des instructions if. Il existe plusieurs types d’instructions if, et votre choix dépend du nombre de conditions que vous devez tester.
Instructions if Simples¶
Le type le plus simple d’instruction if a un test et une action:
if test_conditionnel:
faire_quelque_chose---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-16-a0393a2dea13> in <cell line: 0>()
----> 1 if test_conditionnel:
2 faire_quelque_chose
NameError: name 'test_conditionnel' is not definedSi le test conditionnel est évalué à True, Python exécute le code suivant l’instruction if. Si le test est évalué à False, Python ignore le code suivant l’instruction if.
Testons si une personne a l’âge légal pour voter (18 ans au Cameroun):
age = 19
if age >= 18: # Vérifie si l'âge est supérieur ou égal à 18
print("Vous êtes assez âgé pour voter !")Vous êtes assez âgé pour voter !
Python vérifie si la valeur de age est supérieure ou égale à 18. C’est le cas, donc Python exécute l’appel print() indenté:
Vous êtes assez âgé pour voter !Vous pouvez avoir autant de lignes de code que vous le souhaitez dans le bloc suivant l’instruction if. Ajoutons une autre ligne de sortie si la personne est assez âgée pour voter, demandant si elle s’est déjà inscrite:
age = 19
if age >= 18:
print("Vous êtes assez âgé pour voter !")
print("Vous êtes-vous déjà inscrit sur les listes électorales ?")Vous êtes assez âgé pour voter !
Vous êtes-vous déjà inscrit sur les listes électorales ?
Le test conditionnel réussit, et les deux appels print() sont indentés, donc les deux lignes sont imprimées:
Vous êtes assez âgé pour voter !
Vous êtes-vous déjà inscrit sur les listes électorales ?Instructions if-else¶
Souvent, vous voudrez effectuer une action lorsqu’un test conditionnel réussit et une action différente dans tous les autres cas. La syntaxe if-else de Python rend cela possible. Un bloc if-else est similaire à une simple instruction if, mais l’instruction else vous permet de définir une action ou un ensemble d’actions qui sont exécutées lorsque le test conditionnel échoue.
Affichons le même message si la personne est assez âgée pour voter, mais ajoutons un message pour toute personne qui n’est pas assez âgée:
age = 17
if age >= 18: # Le test échoue car 17 < 18
print("Vous êtes assez âgé pour voter !")
print("Vous êtes-vous déjà inscrit sur les listes électorales ?")
else: # Le bloc else est exécuté
print("Désolé, vous êtes trop jeune pour voter.")
print("Veuillez vous inscrire dès que vous aurez 18 ans !")Désolé, vous êtes trop jeune pour voter.
Veuillez vous inscrire dès que vous aurez 18 ans !
Si le test conditionnel réussit, le premier bloc d’appels print() indentés est exécuté. Si le test est évalué à False, le bloc else est exécuté. Comme l’âge est inférieur à 18 cette fois, le test conditionnel échoue et le code dans le bloc else est exécuté:
Désolé, vous êtes trop jeune pour voter.
Veuillez vous inscrire dès que vous aurez 18 ans !Cette structure if-else fonctionne bien dans les situations où vous voulez que Python exécute toujours l’une des deux actions possibles.
La Chaîne if-elif-else¶
Souvent, vous devrez tester plus de deux situations possibles, et pour les évaluer, vous pouvez utiliser la syntaxe if-elif-else de Python. Python n’exécute qu’un seul bloc dans une chaîne if-elif-else. Il exécute chaque test conditionnel dans l’ordre jusqu’à ce qu’un réussisse. Lorsqu’un test réussit, le code suivant ce test est exécuté et Python saute le reste des tests.
De nombreuses situations réelles impliquent plus de deux conditions possibles. Par exemple, considérons une compagnie de bus qui applique des tarifs différents selon l’âge :
Les enfants de moins de 6 ans voyagent gratuitement.
Les personnes entre 6 et 18 ans paient 150 FCFA.
Les personnes de 18 ans ou plus paient 300 FCFA.
Comment pouvons-nous utiliser une instruction if pour déterminer le tarif d’une personne ? Le code suivant teste la tranche d’âge d’une personne et imprime ensuite un message sur le prix du billet:
age = 12
if age < 6: # Test si moins de 6 ans
print("Votre ticket de bus est gratuit.")
elif age < 18: # Test si moins de 18 ans (et au moins 6 ans)
print("Votre ticket de bus coûte 150 FCFA.")
else: # Pour tous les autres (18 ans et plus)
print("Votre ticket de bus coûte 300 FCFA.")Votre ticket de bus coûte 150 FCFA.
Le test if vérifie si une personne a moins de 6 ans. Si le test réussit, un message approprié est imprimé et Python saute le reste des tests. La ligne elif est un autre test if, qui ne s’exécute que si le test précédent a échoué. À ce stade de la chaîne, nous savons que la personne a au moins 6 ans car le premier test a échoué. Si la personne a moins de 18 ans, un message approprié est imprimé et Python saute le bloc else. Si les tests if et elif échouent tous les deux, Python exécute le code dans le bloc else.
Dans cet exemple, le premier test (age < 6) est False. Le second test (age < 18) est True (12 est inférieur à 18), donc son code est exécuté. La sortie est une seule phrase, informant l’utilisateur du coût du billet:
Votre ticket de bus coûte 150 FCFA.Plutôt que d’imprimer le prix dans le bloc if-elif-else, il serait plus concis de définir uniquement le prix à l’intérieur de la chaîne if-elif-else et d’avoir ensuite un simple appel print() qui s’exécute après l’évaluation de la chaîne:
age = 12
if age < 6:
prix = 0
elif age < 18:
prix = 150
else:
prix = 300
print(f"Votre ticket de bus coûte {prix} FCFA.")Votre ticket de bus coûte 150 FCFA.
Ce code produit la même sortie que l’exemple précédent, mais le but de la chaîne if-elif-else est plus restreint. Au lieu de déterminer un prix et d’afficher un message, il détermine simplement le prix du billet. En plus d’être plus efficace, ce code révisé est plus facile à modifier que l’approche originale.
Utilisation de Plusieurs Blocs elif¶
Vous pouvez utiliser autant de blocs elif que vous le souhaitez dans votre code. Par exemple, si la compagnie de bus mettait en œuvre une réduction pour les étudiants (disons 100 FCFA pour les moins de 25 ans avec une carte d’étudiant), vous pourriez ajouter un test conditionnel supplémentaire:
age = 22
est_etudiant = True
if age < 6:
prix = 0
elif age < 18:
prix = 150
elif age < 25 and est_etudiant: # Test supplémentaire pour étudiant
prix = 100
else: # Pour les 18+ non étudiants ou 25+
prix = 300
print(f"Votre ticket de bus coûte {prix} FCFA.")Votre ticket de bus coûte 100 FCFA.
Omission du Bloc else¶
Python n’exige pas de bloc else à la fin d’une chaîne if-elif. Parfois, un bloc else est utile ; parfois, il est plus clair d’utiliser une instruction elif supplémentaire qui capture la condition spécifique d’intérêt:
age = 70
if age < 6:
prix = 0
elif age < 18:
prix = 150
elif age < 65: # Tarif normal pour adultes < 65 ans
prix = 300
elif age >= 65: # Tarif spécial pour seniors >= 65 ans
prix = 200
print(f"Votre ticket de bus coûte {prix} FCFA.")Votre ticket de bus coûte 200 FCFA.
Le bloc elif supplémentaire à la fin assigne un prix de 200 FCFA lorsque la personne a 65 ans ou plus, ce qui est un peu plus clair que le bloc else général. Avec ce changement, chaque bloc de code doit passer un test spécifique pour être exécuté.
Tester Plusieurs Conditions¶
La chaîne if-elif-else est puissante, mais elle ne convient que lorsque vous avez besoin qu’un seul test réussisse. Dès que Python trouve un test qui réussit, il saute le reste des tests.
Cependant, il est parfois important de vérifier toutes les conditions d’intérêt. Dans ce cas, vous devez utiliser une série d’instructions if simples sans blocs elif ou else. Cette technique est logique lorsque plus d’une condition pourrait être True, et que vous voulez agir sur chaque condition qui est True.
Reconsidérons l’exemple du restaurant (pizzeria dans l’original). Si quelqu’un commande un plat avec plusieurs accompagnements, vous devrez vous assurer d’inclure tous les accompagnements. Adapté à un contexte camerounais, imaginons la commande d’un plat comme le “Poulet DG” avec des suppléments :
supplements_commandes = ['plantain', 'riz', 'alloco'] # 'alloco' = bananes plantains frites
print("Préparation de votre Poulet DG avec :")
if 'plantain' in supplements_commandes:
print("- Supplément Plantain")
if 'riz' in supplements_commandes:
print("- Supplément Riz")
if 'alloco' in supplements_commandes:
print("- Supplément Alloco")
print("\nPlat terminé !")Préparation de votre Poulet DG avec :
- Supplément Plantain
- Supplément Riz
- Supplément Alloco
Plat terminé !
Nous commençons par une liste contenant les suppléments demandés. L’instruction if pour ‘plantain’ vérifie si le client a demandé du plantain. Si oui, un message est imprimé confirmant ce supplément. Le test pour ‘riz’ est une autre instruction if simple, pas une instruction elif ou else, donc ce test est exécuté que le test précédent ait réussi ou non. Le code pour ‘alloco’ vérifie si l’alloco a été demandé indépendamment des résultats des deux premiers tests. Ces trois tests indépendants sont exécutés à chaque fois que ce programme est lancé.
Comme chaque condition est évaluée, tous les suppléments demandés sont ajoutés:
Préparation de votre Poulet DG avec :
- Supplément Plantain
- Supplément Riz
- Supplément Alloco
Plat terminé !Ce code ne fonctionnerait pas correctement si nous utilisions un bloc if-elif-else, car le code s’arrêterait après la réussite du premier test.
En résumé, si vous ne voulez exécuter qu’un seul bloc de code, utilisez une chaîne if-elif-else. Si plus d’un bloc de code doit être exécuté, utilisez une série d’instructions if indépendantes.
Utilisation des Instructions if avec les Listes¶
Vous pouvez faire un travail intéressant lorsque vous combinez des listes et des instructions if. Vous pouvez surveiller les valeurs spéciales qui doivent être traitées différemment des autres valeurs de la liste. Vous pouvez gérer efficacement les conditions changeantes, comme la disponibilité de certains plats dans un restaurant tout au long de la journée.
Vérification des Éléments Spéciaux¶
Revenons à l’exemple du restaurant. Le restaurant affiche un message chaque fois qu’un ingrédient est ajouté à votre plat pendant sa préparation. Le code pour cette action peut être écrit très efficacement en faisant une liste des ingrédients demandés par le client et en utilisant une boucle pour annoncer chaque ingrédient au fur et à mesure de son ajout:
ingredients_commandes = ['poisson_fume', 'gombo', 'huile_rouge'] # Ingrédients pour une sauce gombo
for ingredient in ingredients_commandes:
print(f"Ajout de {ingredient}.")
print("\nSauce Gombo terminée !")Ajout de poisson_fume.
Ajout de gombo.
Ajout de huile_rouge.
Sauce Gombo terminée !
La sortie est simple car ce code est juste une simple boucle for:
Ajout de poisson_fume.
Ajout de gombo.
Ajout de huile_rouge.
Sauce Gombo terminée !Mais que se passe-t-il si le restaurant est à court de gombo ? Une instruction if à l’intérieur de la boucle for peut gérer cette situation de manière appropriée:
ingredients_commandes = ['poisson_fume', 'gombo', 'huile_rouge']
for ingredient in ingredients_commandes:
if ingredient == 'gombo': # Vérifie si l'ingrédient est 'gombo'
print("Désolé, nous n'avons plus de gombo pour le moment.")
else: # Ajoute les autres ingrédients
print(f"Ajout de {ingredient}.")
print("\nSauce Gombo terminée !")Ajout de poisson_fume.
Désolé, nous n'avons plus de gombo pour le moment.
Ajout de huile_rouge.
Sauce Gombo terminée !
Cette fois, nous vérifions chaque ingrédient demandé avant de l’ajouter. Le code avec if vérifie si la personne a demandé du gombo. Si oui, nous affichons un message les informant pourquoi ils ne peuvent pas avoir de gombo. Le bloc else garantit que tous les autres ingrédients seront ajoutés.
La sortie montre que chaque ingrédient demandé est traité de manière appropriée:
Ajout de poisson_fume.
Désolé, nous n'avons plus de gombo pour le moment.
Ajout de huile_rouge.
Sauce Gombo terminée !Vérifier qu’une Liste n’est pas Vide¶
Nous avons fait une simple supposition sur chaque liste avec laquelle nous avons travaillé jusqu’à présent ; nous avons supposé que chaque liste contenait au moins un élément. Bientôt, nous laisserons les utilisateurs fournir les informations stockées dans une liste, nous ne pourrons donc pas supposer qu’une liste contient des éléments à chaque exécution d’une boucle. Dans cette situation, il est utile de vérifier si une liste est vide avant d’exécuter une boucle for.
Par exemple, vérifions si la liste des ingrédients commandés est vide avant de préparer le plat. Si la liste est vide, nous demanderons à l’utilisateur et nous assurerons qu’il souhaite un plat nature. Si la liste n’est pas vide, nous préparerons le plat comme dans les exemples précédents:
ingredients_commandes = [] # Liste vide
if ingredients_commandes: # Vérifie si la liste contient des éléments
for ingredient in ingredients_commandes:
print(f"Ajout de {ingredient}.")
print("\nPlat terminé !")
else: # Si la liste est vide
print("Êtes-vous sûr de vouloir un plat sans ingrédients ?")Êtes-vous sûr de vouloir un plat sans ingrédients ?
Cette fois, nous commençons avec une liste vide d’ingrédients commandés. Au lieu de sauter directement dans une boucle for, nous effectuons une vérification rapide. Lorsque le nom d’une liste est utilisé dans une instruction if, Python renvoie True si la liste contient au moins un élément ; une liste vide est évaluée à False. Si ingredients_commandes réussit le test conditionnel (c’est-à-dire n’est pas vide), nous exécutons la même boucle for que dans l’exemple précédent. Si le test conditionnel échoue (la liste est vide), nous imprimons un message demandant au client s’il veut vraiment un plat nature.
La liste est vide dans ce cas, donc la sortie demande si l’utilisateur veut vraiment un plat nature:
Êtes-vous sûr de vouloir un plat sans ingrédients ?Utilisation de Plusieurs Listes¶
Les clients demanderont à peu près n’importe quoi, surtout quand il s’agit de nourriture. Et si un client voulait des frites dans son Ndolé ? Vous pouvez utiliser des listes et des instructions if pour vous assurer que votre entrée a du sens avant d’agir dessus.
Surveillons les demandes d’ingrédients inhabituelles avant de préparer un plat. L’exemple suivant définit deux listes. La première est une liste d’ingrédients disponibles au restaurant, et la seconde est la liste des ingrédients que le client a demandés. Cette fois, chaque élément dans ingredients_commandes est vérifié par rapport à la liste des ingrédients disponibles avant d’être ajouté au plat:
ingredients_disponibles = ['feuilles_ameres', 'arachides', 'crevettes', 'poisson_fume', 'huile_rouge']
ingredients_commandes = ['feuilles_ameres', 'frites', 'crevettes'] # Demande inhabituelle : frites
for ingredient in ingredients_commandes: # Parcourt les ingrédients commandés
if ingredient in ingredients_disponibles: # Vérifie si l'ingrédient est disponible
print(f"Ajout de {ingredient}.")
else: # Si l'ingrédient n'est pas disponible
print(f"Désolé, nous n'avons pas de {ingredient}.")
print("\nPlat terminé !")Ajout de feuilles_ameres.
Désolé, nous n'avons pas de frites.
Ajout de crevettes.
Plat terminé !
Nous définissons d’abord une liste d’ingrédients disponibles. Ensuite, nous créons une liste d’ingrédients qu’un client a demandés, y compris la demande inhabituelle de ‘frites’. Nous parcourons ensuite la liste des ingrédients demandés. À l’intérieur de la boucle, nous vérifions d’abord si chaque ingrédient demandé est réellement dans la liste des ingrédients disponibles. Si c’est le cas, nous ajoutons cet ingrédient. Si l’ingrédient demandé n’est pas dans la liste des ingrédients disponibles, le bloc else s’exécutera. Le bloc else imprime un message informant l’utilisateur quels ingrédients ne sont pas disponibles.
Ce code produit une sortie claire et informative:
Ajout de feuilles_ameres.
Désolé, nous n'avons pas de frites.
Ajout de crevettes.
Plat terminé !Style de Vos Instructions if¶
La seule recommandation de la PEP 8 pour le style des tests conditionnels est d’utiliser un seul espace autour des opérateurs de comparaison, tels que ==, >=, <=. Par exemple :
# Préférable
if age < 18:
...
# Moins lisible
if age<18:
...Un tel espacement n’affecte pas la façon dont Python interprète votre code ; il rend simplement votre code plus facile à lire pour vous et les autres.
Exercices¶
Écrivez une série de tests conditionnels. Imprimez une déclaration décrivant chaque test et votre prédiction pour les résultats de chaque test. Votre code devrait ressembler à ceci :
voiture = 'toyota'
print("Est-ce que voiture == 'toyota'? Je prédis True.")
print(voiture == 'toyota')
print("\nEst-ce que voiture == 'audi'? Je prédis False.")
print(voiture == 'audi')Examinez attentivement vos résultats et assurez-vous de comprendre pourquoi chaque ligne est évaluée à
TrueouFalse.Créez au moins dix tests. Ayez au moins cinq tests évalués à
Trueet cinq autres tests évalués àFalse.
Exercice 2 : Plus de Tests Conditionnels¶
Vous n’avez pas à limiter le nombre de tests que vous créez à dix. Si vous voulez essayer plus de comparaisons, écrivez plus de tests et ajoutez-les à tests_conditionnels.py. Ayez au moins un résultat True et un False pour chacun des éléments suivants:
Tests d’égalité et d’inégalité avec des chaînes de caractères.
Tests utilisant la méthode
lower().Tests numériques impliquant l’égalité et l’inégalité, supérieur à et inférieur à, supérieur ou égal à, et inférieur ou égal à.
Tests utilisant le mot-clé
andet le mot-cléor.Test si un élément est dans une liste.
Test si un élément n’est pas dans une liste.
Exercice 3 : Couleurs d’Aliens #1¶
Imaginez qu’un alien vient d’être abattu dans un jeu. Créez une variable appelée couleur_alien et attribuez-lui une valeur de ‘vert’, ‘jaune’ ou ‘rouge’.
Écrivez une instruction
ifpour tester si la couleur de l’alien est verte. Si c’est le cas, imprimez un message indiquant que le joueur vient de gagner 5 points.Écrivez une version de ce programme qui réussit le test
ifet une autre qui échoue. (La version qui échoue n’aura aucune sortie.)
Exercice 4 : Couleurs d’Aliens #2¶
Choisissez une couleur pour un alien comme vous l’avez fait dans l’exercice 5-3, et écrivez une chaîne if-else.
Si la couleur de l’alien est verte, imprimez une déclaration indiquant que le joueur vient de gagner 5 points pour avoir tiré sur l’alien.
Si la couleur de l’alien n’est pas verte, imprimez une déclaration indiquant que le joueur vient de gagner 10 points.
Écrivez une version de ce programme qui exécute le bloc
ifet une autre qui exécute le blocelse.
Exercice 5 : Couleurs d’Aliens #3¶
Transformez votre chaîne if-else de l’exercice 5-4 en une chaîne if-elif-else.
Si l’alien est vert, imprimez un message indiquant que le joueur a gagné 5 points.
Si l’alien est jaune, imprimez un message indiquant que le joueur a gagné 10 points.
Si l’alien est rouge, imprimez un message indiquant que le joueur a gagné 15 points.
Écrivez trois versions de ce programme, en vous assurant que chaque message est imprimé pour l’alien de la couleur appropriée.
Exercice 6 : Étapes de la Vie¶
Écrivez une chaîne if-elif-else qui détermine l’étape de la vie d’une personne. Définissez une valeur pour la variable age, puis :
Si la personne a moins de 2 ans, imprimez un message indiquant que la personne est un bébé.
Si la personne a au moins 2 ans mais moins de 4 ans, imprimez un message indiquant que la personne est un bambin (toddler).
Si la personne a au moins 4 ans mais moins de 13 ans, imprimez un message indiquant que la personne est un enfant (kid).
Si la personne a au moins 13 ans mais moins de 20 ans, imprimez un message indiquant que la personne est un adolescent.
Si la personne a au moins 20 ans mais moins de 65 ans, imprimez un message indiquant que la personne est un adulte.
Si la personne a 65 ans ou plus, imprimez un message indiquant que la personne est un aîné (elder).
Exercice 7 : Fruit Préféré¶
Faites une liste de vos fruits préférés, puis écrivez une série d’instructions if indépendantes qui vérifient certains fruits dans votre liste.
Faites une liste de vos trois fruits préférés et appelez-la
fruits_preferes.Écrivez cinq instructions
if. Chacune doit vérifier si un certain type de fruit est dans votre liste. Si le fruit est dans votre liste, le blocifdoit imprimer une déclaration, telle que “Vous aimez vraiment les mangues !”.
Exercice 8 : Bonjour Admin¶
Faites une liste de cinq noms d’utilisateur ou plus, y compris le nom ‘admin’. Imaginez que vous écrivez du code qui imprimera un message d’accueil à chaque utilisateur après sa connexion à un site Web. Parcourez la liste et imprimez un message d’accueil à chaque utilisateur:
Si le nom d’utilisateur est ‘admin’, imprimez un message d’accueil spécial, tel que “Bonjour admin, souhaitez-vous voir un rapport de statut ?”.
Sinon, imprimez un message d’accueil générique, tel que “Bonjour Paul, merci de vous reconnecter.”.
Exercice 9 : Pas d’Utilisateurs¶
Ajoutez un test if à bonjour_admin.py pour vous assurer que la liste des utilisateurs n’est pas vide.
Si la liste est vide, imprimez le message “Nous devons trouver des utilisateurs !”.
Supprimez tous les noms d’utilisateur de votre liste et assurez-vous que le message correct est imprimé.
Exercice 10 : Vérification des Noms d’Utilisateur¶
Faites ce qui suit pour créer un programme qui simule la manière dont les sites Web garantissent que tout le monde a un nom d’utilisateur unique.
Faites une liste de cinq noms d’utilisateur ou plus appelée
utilisateurs_actuels.Faites une autre liste de cinq noms d’utilisateur appelée
nouveaux_utilisateurs. Assurez-vous qu’un ou deux des nouveaux noms d’utilisateur figurent également dans la listeutilisateurs_actuels.Parcourez la liste
nouveaux_utilisateurspour voir if chaque nouveau nom d’utilisateur a déjà été utilisé. S’il l’a été, imprimez un message indiquant que la personne devra saisir un nouveau nom d’utilisateur. Si un nom d’utilisateur n’a pas été utilisé, imprimez un message indiquant que le nom d’utilisateur est disponible.Assurez-vous que votre comparaison est insensible à la casse. Si ‘Patrice’ a été utilisé, ‘PATRICE’ ne doit pas être accepté. (Pour ce faire, vous devrez créer une copie de
utilisateurs_actuelscontenant les versions minuscules de tous les utilisateurs existants.).
Exercice 11 : Nombres Ordinaux¶
Les nombres ordinaux indiquent leur position dans une liste, comme 1er ou 2ème. La plupart des nombres ordinaux se terminent par th en anglais, sauf 1, 2 et 3. En français, c’est un peu différent (1er, 2nd/2ème, 3ème, 4ème...).
Stockez les nombres de 1 à 9 dans une liste.
Parcourez la liste.
Utilisez une chaîne
if-elif-elseà l’intérieur de la boucle pour imprimer la terminaison ordinale appropriée pour chaque nombre (adaptez pour le français : 1er, 2ème, 3ème, etc.). Votre sortie doit ressembler à “1er 2ème 3ème 4ème 5ème 6ème 7ème 8ème 9ème”, et chaque résultat doit être sur une ligne distincte.
Exercice 12 : Style des instructions if¶
Examinez les programmes que vous avez écrits dans ce chapitre et assurez-vous d’avoir correctement stylisé vos tests conditionnels.
Exercice 13 : Vos Idées¶
À ce stade, vous êtes un programmeur plus capable que lorsque vous avez commencé ce livre. Maintenant que vous avez une meilleure idée de la façon dont les situations du monde réel sont modélisées dans les programmes, vous pourriez penser à certains problèmes que vous pourriez résoudre avec vos propres programmes. Notez toutes les nouvelles idées que vous avez sur les problèmes que vous pourriez vouloir résoudre à mesure que vos compétences en programmation continuent de s’améliorer. Pensez aux jeux que vous pourriez vouloir écrire, aux ensembles de données que vous pourriez vouloir explorer et aux applications Web que vous aimeriez créer.
# tests_conditionnels.py
# Tests évaluant à True
print("--- Tests évaluant à True ---")
pays = 'cameroun'
print("Est-ce que pays == 'cameroun'? Je prédis True.")
print(pays == 'cameroun') # Égalité de chaîne
ville = 'Yaoundé'
print(f"\nEst-ce que ville.lower() == 'yaoundé'? Je prédis True.")
print(ville.lower() == 'yaoundé') # Égalité insensible à la casse
age = 20
print(f"\nEst-ce que age >= 18? Je prédis True.")
print(age >= 18) # Supérieur ou égal
prix_beignet = 50
print(f"\nEst-ce que prix_beignet < 100? Je prédis True.")
print(prix_beignet < 100) # Inférieur
stock_riz = 10 # en sacs
print(f"\nEst-ce que stock_riz > 0 and stock_riz <= 10? Je prédis True.")
print(stock_riz > 0 and stock_riz <= 10) # Condition 'and'
equipe_nationale = ['lions indomptables', 'elephants', 'super eagles']
print(f"\nEst-ce que 'lions indomptables' in equipe_nationale? Je prédis True.")
print('lions indomptables' in equipe_nationale) # Élément dans la liste
# Tests évaluant à False
print("\n--- Tests évaluant à False ---")
plat_du_jour = 'ndole'
print(f"Est-ce que plat_du_jour == 'poulet dg'? Je prédis False.")
print(plat_du_jour == 'poulet dg') # Inégalité de chaîne
region = 'Littoral'
print(f"\nEst-ce que region.lower() == 'centre'? Je prédis False.")
print(region.lower() == 'centre') # Inégalité insensible à la casse
temperature_douala = 28 # en degrés Celsius
print(f"\nEst-ce que temperature_douala <= 20? Je prédis False.")
print(temperature_douala <= 20) # Inférieur ou égal
nombre_enfants = 0
print(f"\nEst-ce que nombre_enfants > 0? Je prédis False.")
print(nombre_enfants > 0) # Supérieur
a_plu = False
soleil_brille = False
print(f"\nEst-ce que a_plu == True or soleil_brille == True? Je prédis False.")
print(a_plu == True or soleil_brille == True) # Condition 'or'
fruits_marche = ['mangue', 'ananas', 'papaye']
print(f"\nEst-ce que 'banane' in fruits_marche? Je prédis False.")
print('banane' in fruits_marche) # Élément pas dans la liste
print(f"\nEst-ce que 'papaye' not in fruits_marche? Je prédis False.")
print('papaye' not in fruits_marche) # not in évalué à False--- Tests évaluant à True ---
Est-ce que pays == 'cameroun'? Je prédis True.
True
Est-ce que ville.lower() == 'yaoundé'? Je prédis True.
True
Est-ce que age >= 18? Je prédis True.
True
Est-ce que prix_beignet < 100? Je prédis True.
True
Est-ce que stock_riz > 0 and stock_riz <= 10? Je prédis True.
True
Est-ce que 'lions indomptables' in equipe_nationale? Je prédis True.
True
--- Tests évaluant à False ---
Est-ce que plat_du_jour == 'poulet dg'? Je prédis False.
False
Est-ce que region.lower() == 'centre'? Je prédis False.
False
Est-ce que temperature_douala <= 20? Je prédis False.
False
Est-ce que nombre_enfants > 0? Je prédis False.
False
Est-ce que a_plu == True or soleil_brille == True? Je prédis False.
False
Est-ce que 'banane' in fruits_marche? Je prédis False.
False
Est-ce que 'papaye' not in fruits_marche? Je prédis False.
False
Correction 3 : Couleurs d’Aliens #1¶
# couleur_alien_v1.py (réussit)
couleur_alien = 'vert'
if couleur_alien == 'vert':
print("Le joueur vient de gagner 5 points !")
# couleur_alien_v2.py (échoue - pas de sortie)
couleur_alien = 'rouge'
if couleur_alien == 'vert':
print("Le joueur vient de gagner 5 points !")Le joueur vient de gagner 5 points !
Correction 4 : Couleurs d’Aliens #2¶
# couleur_alien_if_else_v1.py (bloc if)
couleur_alien = 'vert'
if couleur_alien == 'vert':
print("Le joueur vient de gagner 5 points pour avoir tiré sur l'alien.")
else:
print("Le joueur vient de gagner 10 points.")
# couleur_alien_if_else_v2.py (bloc else)
couleur_alien = 'jaune'
if couleur_alien == 'vert':
print("Le joueur vient de gagner 5 points pour avoir tiré sur l'alien.")
else:
print("Le joueur vient de gagner 10 points.")Le joueur vient de gagner 5 points pour avoir tiré sur l'alien.
Le joueur vient de gagner 10 points.
Correction 5 : Couleurs d’Aliens #3¶
# couleur_alien_if_elif_else.py
couleur_alien = 'jaune' # Changez cette valeur pour tester ('vert', 'jaune', 'rouge')
if couleur_alien == 'vert':
print("Le joueur a gagné 5 points.")
elif couleur_alien == 'jaune':
print("Le joueur a gagné 10 points.")
elif couleur_alien == 'rouge':
print("Le joueur a gagné 15 points.")
# Pas de bloc else nécessaire ici si ce sont les seules couleurs possibles.Le joueur a gagné 10 points.
Correction 6 : Étapes de la Vie¶
# etapes_vie.py
age = 25 # Changez cette valeur pour tester
if age < 2:
etape = 'un bébé'
elif age < 4:
etape = 'un bambin'
elif age < 13:
etape = 'un enfant'
elif age < 20:
etape = 'un adolescent'
elif age < 65:
etape = 'un adulte'
else: # 65 ans ou plus
etape = 'un aîné'
print(f"Cette personne est {etape}.")Cette personne est un adulte.
Correction 7 : Fruit Préféré (Adapté aux plats camerounais)¶
# plats_preferes.py
plats_preferes = ['ndole', 'poulet dg', 'poisson braise']
if 'ndole' in plats_preferes:
print("Vous aimez vraiment le Ndolé !")
if 'eru' in plats_preferes:
print("Vous aimez vraiment le Eru !")
if 'poulet dg' in plats_preferes:
print("Vous aimez vraiment le Poulet DG !")
if 'poisson braise' in plats_preferes:
print("Vous aimez vraiment le Poisson Braisé !")
if 'okok' in plats_preferes:
print("Vous aimez vraiment le Okok !")Vous aimez vraiment le Ndolé !
Vous aimez vraiment le Poulet DG !
Vous aimez vraiment le Poisson Braisé !
Correction 8 : Bonjour Admin¶
# bonjour_admin.py
noms_utilisateurs = ['paul', 'fatou', 'admin', 'pierre', 'aicha']
for nom_utilisateur in noms_utilisateurs:
if nom_utilisateur == 'admin':
print("Bonjour admin, souhaitez-vous voir un rapport de statut ?")
else:
print(f"Bonjour {nom_utilisateur.title()}, merci de vous reconnecter.")Bonjour Paul, merci de vous reconnecter.
Bonjour Fatou, merci de vous reconnecter.
Bonjour admin, souhaitez-vous voir un rapport de statut ?
Bonjour Pierre, merci de vous reconnecter.
Bonjour Aicha, merci de vous reconnecter.
Correction 9 : Pas d’Utilisateurs¶
# pas_d_utilisateurs.py
noms_utilisateurs = ['paul', 'fatou', 'admin', 'pierre', 'aicha']
# noms_utilisateurs = [] # Décommentez pour tester le cas liste vide
if noms_utilisateurs: # Vérifie si la liste n'est pas vide
for nom_utilisateur in noms_utilisateurs:
if nom_utilisateur == 'admin':
print("Bonjour admin, souhaitez-vous voir un rapport de statut ?")
else:
print(f"Bonjour {nom_utilisateur.title()}, merci de vous reconnecter.")
else:
print("Nous devons trouver des utilisateurs !")Bonjour Paul, merci de vous reconnecter.
Bonjour Fatou, merci de vous reconnecter.
Bonjour admin, souhaitez-vous voir un rapport de statut ?
Bonjour Pierre, merci de vous reconnecter.
Bonjour Aicha, merci de vous reconnecter.
Correction 10 : Vérification des Noms d’Utilisateur¶
# verification_noms_utilisateur.py
utilisateurs_actuels = ['paul', 'fatou', 'admin', 'pierre', 'aicha']
nouveaux_utilisateurs = ['marie', 'pierre', 'jean', 'AICHA', 'david']
# Crée une copie insensible à la casse pour la vérification
utilisateurs_actuels_lower = [user.lower() for user in utilisateurs_actuels]
for nouvel_utilisateur in nouveaux_utilisateurs:
if nouvel_utilisateur.lower() in utilisateurs_actuels_lower:
print(f"Désolé, le nom d'utilisateur '{nouvel_utilisateur}' est déjà pris. Veuillez en choisir un autre.")
else:
print(f"Le nom d'utilisateur '{nouvel_utilisateur}' est disponible.")Le nom d'utilisateur 'marie' est disponible.
Désolé, le nom d'utilisateur 'pierre' est déjà pris. Veuillez en choisir un autre.
Le nom d'utilisateur 'jean' est disponible.
Désolé, le nom d'utilisateur 'AICHA' est déjà pris. Veuillez en choisir un autre.
Le nom d'utilisateur 'david' est disponible.
Correction 11 : Nombres Ordinaux (Français)¶
# nombres_ordinaux.py
nombres = list(range(1, 10)) # Crée la liste [1, 2, 3, 4, 5, 6, 7, 8, 9]
for nombre in nombres:
if nombre == 1:
ordinal = "1er"
elif nombre == 2:
ordinal = "2ème" # Ou "2nd"
elif nombre == 3:
ordinal = "3ème"
else: # Pour 4 à 9
ordinal = f"{nombre}ème"
print(ordinal)1er
2ème
3ème
4ème
5ème
6ème
7ème
8ème
9ème
Correction 12 : Style des instructions if¶
Cet exercice demande une révision du code écrit précédemment. Assurez-vous que :
Il y a un espace avant et après chaque opérateur de comparaison (
==,!=,<,<=,>,>=).L’indentation est cohérente (4 espaces par niveau).
Les lignes ne dépassent pas ~79 caractères.
Correction 13 : Vos Idées¶
Ceci est un exercice de réflexion personnelle. Il n’y a pas de “correction” unique. L’objectif est d’encourager à penser à des projets personnels maintenant que les bases des instructions if et des listes sont acquises.