Branchements conditionnels#
Qu'est-ce qu'un branchement conditionnel ?#
Dans un programme, en fonction du contexte, toutes les instructions ne doivent pas toujours être exécutées. Par exemple, dans un mini-jeu, on souhaiterait que l'instruction print("Gagné") ne soit exécutée que si l'utilisateur a marqué au moins 100pts. Dans le cas contraire, c'est plutôt l'instruction print("Perdu") qui devrait être exécutée.
Un branchement conditionnel est donc composé d'une condition, ainsi que de blocs d'instructions qui sont effectués en fonction du résultat de la condition.
Conditions#
En programmation, une condition est composée de deux valeurs qui sont comparées entre elles par un opérateur de comparaison. Le résultat de la comparaison est de type bool. Il est donc True dans le cas où la condition est respectée, et False quand elle ne l'est pas
Opérateur |
Nom |
Exemple |
Résultat |
|---|---|---|---|
|
égal à |
3 == 7 |
|
|
différent de |
3 != 7 |
|
|
plus grand que |
3 > 7 |
|
|
plus petit que |
3 < 7 |
|
|
plus grand ou égal à |
3 >= 7 |
|
|
plus petit ou égal à |
3 <= 7 |
|
Si …#
La forme la plus simple d’un branchement conditionnel est le if : on exécute le bloc d'instructions indenté en dessous seulement si la condition est vraie (True).
1note = float(input("Quelle est votre note ?"))
2if note >= 4:
3 print("Bravo, vous avez réussi l'examen")
4 print("Continuez comme ça !")
5print("Fin du programme")
Important
Les blocs d'instructions devant être exécutés dans un branchement conditionnel sont indentés sous le if. C'est-à-dire qu'ils sont légèrement décalés à droite. Une tabulation permet d'indenter de manière simple et claire.
Si … Sinon#
Le mot-clef else permet d’exécuter un autre bloc d’instructions indenté si la condition du if n'est pas respectée (False). Le else ne prend jamais de condition car il signifie dans tous les autres cas.
1age = int(input("Quel âge avez-vous ?"))
2if age >= 18:
3 print("Vous êtes majeur")
4else:
5 print("Vous êtes mineur")
Si … Sinon si … Sinon#
Le mot-clef elif (abréviation de else if) permet de tester plusieurs conditions à la suite. Il se place obligatoirement après un if et il peut y en avoir autant que souhaité. Il n'est pas obligatoire d'avoir un else après un elif, même si cela est souvent pratique.
1temperature = float(input("Quelle est la température en °C ?"))
2if temperature < 0:
3 print("Il gèle")
4elif temperature < 15:
5 print("Il fait frais")
6elif temperature < 25:
7 print("Il fait bon")
8else:
9 print("Il fait chaud")
Opérateurs logiques (et/ou)#
Lorsqu'une condition est plus complexe qu'une simple comparaison entre deux valeurs, il est possible de les chaîner. Ce chaînage se fait à l'aide des opérateurs logiques and et or.
Opérateur |
Description |
Exemples |
|---|---|---|
|
donne |
|
|
donne |
|
Par exemple, le programme ci-dessous permet de déterminer le district d'origine de l'utilisateur en fonction d'un nom de ville.
1ville = input("D'où viens-tu ?")
2if ville == "Romont" or ville == "Rue":
3 print("Tu viens de la Glâne")
4elif ville == "Fribourg" or ville == "Marly":
5 print("Tu viens de la Sarine")
6elif ville == "Tafers" or ville == "Plaffeien" or ville == "Düdingen":
7 print("Tu viens de la Singine")
8else:
9 print("Je ne sais pas d'où tu viens")
Celui ci-dessous permet de vérifier que l'utilisateur a bien l'âge d'acheter du vin, et qu'il a suffisamment d'argent pour le faire.
1age = int(input("Quel âge as-tu ? "))
2argent = float(input("Combien d'argent as-tu (en CHF) ? "))
3
4prix_vin = 39.90 # prix en CHF d'une bouteille de vin
5
6if age >= 16 and argent >= prix_vin:
7 print("Tu peux acheter du vin.")
8elif age < 16:
9 print("Tu es trop jeune pour acheter du vin.")
10elif argent < prix_vin:
11 print("Tu n'as pas assez d'argent pour acheter du vin.")
Exercices#
Exercice 5#
Chacun des programmes suivants comporte au moins une erreur. Parfois, cette erreur fait directement buguer le programme avec un message d'erreur rouge. D'autres fois, le programme s'exécute correctement, mais son résultat n'est pas logique.
Corrigez chacun de ces codes de manière à ce qu'ils s'exécutent correctement et affichent un résultat logique.
1collège = input("Dans quel collège es-tu ?") 2if collège = STX: 3 print("Tu es dans le meilleur collège !") 4print("A bientôt")
1âge = int(input("Quel âge as-tu ?")) 2if âge < 18: 3print("Tu es majeur") 4else: 5print("Tu es mineur")
1nombre = float(input("Entre un nombre")) 2 3if nombre > 0: 4 print(nombre, "est un nombre positif") 5if nombre < 0: 6 print(nombre, "est un nombre négatif") 7else: 8 print("Zéro est un nombre ni positif ni négatif")
1métier = input("Quel est ton métier ?") 2 3if métier == "étudiant" or "étudiante": 4 print("Tu as droit à une réduction") 5else: 6 print("Tu dois payer plein prix")
1note = float(input("Quelle est ta dernière note en informatique")) 2 3if note >= 1 and <= 6: 4 if note >= 4: 5 print("C'est une note suffisante") 6 else: 7 print("C'est une note insuffisante") 8else: 9 print("Tu as dû te tromper, ce n'est pas une note valide")
Solution
1collège = input("Dans quel collège es-tu ?") 2if collège == "STX": 3 print("Tu es dans le meilleur collège !") 4print("A bientôt")
1âge = int(input("Quel âge as-tu ?")) 2if âge >= 18: 3 print("Tu es majeur") 4else: 5 print("Tu es mineur")
1nombre = float(input("Entre un nombre")) 2 3if nombre > 0: 4 print(nombre, "est un nombre positif") 5elif nombre < 0: 6 print(nombre, "est un nombre négatif") 7else: 8 print("Zéro est un nombre ni positif ni négatif")
1métier = input("Quel est ton métier ?") 2 3if métier == "étudiant" or métier == "étudiante": 4 print("Tu as droit à une réduction") 5else: 6 print("Tu dois payer plein prix") 7
1note = float(input("Quelle est ta dernière note en informatique")) 2 3if note >= 1 and note <= 6: 4 if note >= 4: 5 print("C'est une note suffisante") 6 else: 7 print("C'est une note insuffisante") 8else: 9 print("Tu as dû te tromper, ce n'est pas une note valide") 10
Exercice 6#
Un zoo pratique les tarifs suivants:
Les enfants jusqu'à 16 ans paient 15 CHF.
Les jeunes jusqu'à 20 ans payent 22 CHF.
Les adultes jusqu'à 65 ans payent 28 CHF.
Les personnes âgées paient 20 CHF.
Écrivez un programme qui demande l'âge de l'utilisateur et affiche le prix à payer. Le rendu du programme doit être le suivant:
Quel est ton âge? <--- [16]
Pour une personne de 16 ans, le prix à payer est de 15 francs.
Pour une solution optimale, essayez de n'utiliser qu'une seule fois la fonction print()
1# Écrivez votre code ici
Solution
1age = int(input("Quel est ton âge? "))
2
3if age <= 16:
4 prix = 15
5elif age <= 20:
6 prix = 22
7elif age <= 65:
8 prix = 28
9else:
10 prix = 20
11
12print ("Pour une personne de", age, "ans, le prix à payer est de", prix, "francs.")
Exercice 7#
Complétez le programme de quiz ci-dessous qui doit fonctionner de la manière suivante :
Demander à l'utilisateur s'il souhaite répondre à un quiz
Si l'utilisateur dit "oui" ou "ok"
Poser la question "Qui a écrit Les Misérables ?" et enregistrer la réponse dans une variable réponse
Si la réponse est égale à "Victor Hugo"
Afficher "Bonne réponse"
Sinon
Afficher "Mauvaise réponse"
Sinon
Afficher "Pas de problème, au revoir"
1participation = input("Veux-tu répondre à mon quiz ?")
2#Complétez le code ici
Solution
1participation = input("Veux-tu répondre à mon quiz ?")
2
3if participation == "oui" or participation == "ok":
4 reponse = input("Qui a écrit Les Misérables ? ")
5 if reponse == "Victor Hugo":
6 print("Bonne réponse")
7 else:
8 print("Mauvaise réponse")
9else:
10 print("Pas de problème, au revoir")
Exercice 8#
Écrivez un programme dans lequel l'utilisateur peut entrer le prix d'un article ainsi qu'un code de réduction et qui calcule le prix final en conséquence. Les conditions d'application de réduction ainsi que 3 exemples d'exécution sont donnés ci-dessous. Votre programme ne doit utiliser la fonction print() qu'une seule fois et à la dernière ligne du programme.
Avec le code
"STX", un article à moins de 100CHF est réduit de 20%Avec le code
"STX", un article à plus de 200CHF est réduit de 35%Les autres articles avec le code
"STX"ont une réduction de 20CHFAvec le code
"CSMI"ou le code"CGAM", le prix est augmenté de 10CHFAutrement, aucun changement de prix n'est effectué
Combien coûte l'article ? <--- [300]
Quel est votre code de réduction ? <--- [STX]
Le prix final est 195.0 CHF
>>>
Combien coûte l'article ? <--- [150]
Quel est votre code de réduction ? <--- [CSMI]
Le prix final est 160.0 CHF
>>>
Combien coûte l'article ? <--- [50]
Quel est votre code de réduction ? <--- [JSP]
Le prix final est 50.0 CHF
1# Écrivez votre code ici
Solution
1prix = float(input("Combien coûte l'article ?"))
2code = input("Quel est votre code de réduction ?")
3if code == "STX" and prix < 100:
4 prix *= 0.8
5elif code == "STX" and prix > 200:
6 prix *= 0.65
7elif code == "STX":
8 prix -= 20
9elif code == "CSMI" or code == "CGAM":
10 prix += 10
11print("Le prix final est", prix, "CHF")