Révisions - Boucles conditionnelles#
Qu'est-ce qu'une boucle conditionnelle ?#
Dans un programme, certaines instructions doivent s'exécuter plusieurs fois. Imaginez un programme dans lequel l'utilisateur doit entrer son mot de passe pour se connecter. Ici, l'instruction print("Mot de passe incorrect") doit être potentiellement exécutée plusieurs fois tant que l'utilisateur entre un mauvais mot de passe. C'est une boucle conditionnelle qui nous permettra de répéter des instructions de cette manière. Grâce à celle-ci, un bloc d'instructions peut être répété en boucle tant qu'une condition est respectée.
En pseudocode, l'exemple du programme de connexion avec une boucle conditionnelle pourrait donc s'écrire de la manière suivante :
1Demander le mot de passe à l'utilisateur et le stocker dans la variable mdp
2Tant que mdp est différent de "Fr1B0urg"
3 Afficher "Mot de passe incorrect"
4 Redemander le mot de passe et le stocker dans mdp
5Afficher "Connexion réussie"
Dans ce pseudocode, quand l'exécution arrive à la ligne 2, la condition est évaluée pour déterminer si l'on entre dans la boucle ou non. Dans le cas où le résultat de la condition est vrai (c'est-à-dire que le mot de passe est incorrect), on entre dans la boucle. Cela signifie que le bloc d'instruction indenté en dessous est exécuté. Au terme de l'exécution de ce bloc, on remonte à la ligne 2 pour réévaluer la condition. Si elle est vraie, on entre à nouveau dans la boucle et le bloc d'instruction indenté est réexécuté. Lorsqu'en revanche la condition de la ligne 2 est fausse, le bloc indenté est ignoré et la ligne 5 est exécutée.
La boucle while#
En Python, une boucle conditionnelle s'écrit avec le mot-clef while (littéralement tant que). Ce mot-clef est suivi d'une condition qui détermine si l'on entre dans la boucle (quand la condition est True) ou si on en sort (quand la condition est False). Quand on entre dans la boucle, le bloc d'instructions indenté sous le while est exécuté. Au terme de cette exécution, on remonte à la ligne du while et la condition est réévaluée pour déterminer si l'on entre à nouveau dans la boucle ou non.
L'exemple du programme de connexion décrit précédemment en pseudocode peut alors s'écrire de la manière suivante.
1mdp = input("Entrez le mot de passe")
2while mdp != "Fr1B0urg":
3 print("Mot de passe incorrect")
4 mdp = input("Entrez à nouveau le mot de passe")
5print("Connexion réussie")
La boucle while peut également être utilisée pour répéter un bloc d'instructions un nombre déterminé de fois, comme dans le programme ci-dessous qui permet de compter jusqu'à 10.
1compteur = 1
2while compteur <= 10:
3 print(compteur)
4 compteur = compteur + 1
Exercices#
Exercice 23#
Combien de fois le bloc indenté de chaque boucle ci-dessous est-il exécuté ? Répondez sans
exécuter les programmes : suivez la valeur du compteur à la main, tour après tour. Si la boucle
ne s'arrête jamais, écrivez infini.
compteur = 0 while compteur < 10: compteur = compteur + 3
compteur = 10 while compteur > 0: compteur = compteur - 1
compteur = 5 while compteur < 5: compteur = compteur + 1
compteur = 1 while compteur <= 100: compteur = compteur * 2
compteur = 20 while compteur != 0: compteur = compteur - 5
compteur = 3 while compteur < 20: print(compteur)
Solution
4 tours. Le compteur prend les valeurs 0, 3, 6, 9 puis 12. C'est avec la valeur 12 que la condition devient fausse. Attention : le compteur ne vaut pas 10 à la fin, il l'a dépassé.
10 tours. Le compteur descend de 10 à 0, une unité à la fois.
0 tour. La condition
5 < 5est fausse dès le premier passage : on n'entre jamais dans la boucle. Une boucle peut donc parfaitement ne s'exécuter aucune fois.7 tours. Le compteur double à chaque tour : 1, 2, 4, 8, 16, 32, 64, puis 128 qui fait sortir de la boucle.
4 tours. Le compteur passe par 20, 15, 10, 5 puis atteint exactement 0. Ici le
!=fonctionne parce que le compteur tombe pile sur 0 (voir l'exercice suivant pour le cas où ce n'est pas le cas).Infini. Le compteur n'est jamais modifié à l'intérieur de la boucle : il vaut 3 pour toujours, donc la condition reste vraie pour toujours.
Exercice 24#
Pour chacun des programmes ci-dessous, déterminez sans l'exécuter s'il se termine ou s'il tourne indéfiniment.
n = 10 while n > 0: print(n) n = n - 1
n = 10 while n > 0: print(n)
total = 0 compteur = 1 while compteur <= 5: total = total + compteur compteur = compteur + 1
compteur = 10 while compteur > 0: compteur = compteur + 1
compteur = 0 while compteur != 10: compteur = compteur + 3
Solution
Une boucle while ne s'arrête que si son bloc indenté finit par rendre la condition fausse. Les
trois programmes qui tournent indéfiniment illustrent les trois manières de rater cela.
La variable de la condition n'est jamais modifiée. On affiche
nmais on ne le décrémente pas :nvaut 10 pour toujours. C'est l'oubli le plus fréquent.Elle est modifiée dans le mauvais sens. La condition demande que le compteur reste supérieur à 0, et on l'augmente à chaque tour : il s'en éloigne au lieu de s'en rapprocher.
La condition utilise
!=et le compteur saute par-dessus la valeur cherchée. Il prend les valeurs 0, 3, 6, 9, 12, 15… et ne vaut donc jamais exactement 10. Avecwhile compteur < 10le programme se serait arrêté. Retenez-le : avec un!=, il faut être certain que le compteur tombe pile sur la valeur de sortie.
Les programmes 1 et 3 se terminent : dans les deux cas, la variable testée par la condition est bien modifiée à chaque tour, et dans la bonne direction.
Exercice 25#
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.
1réponse = input("Tu aimes la pizza avec ananas ?") 2while réponse != "oui" and réponse != "Oui" 3réponse = input("Réfléchis bien ! Tu aimes la pizza ananas ?") 4print("Je savais que tu aimais ça !")
1nb_affichage = int(input("Combien de fois veux-tu voir mon magnifique dessin ?")) 2i = 0 3while i < nb_affichage 4 print(" _._ _,-'\"\"`-._\n(,-.`._,'( |\\`-/|\n `-.-' \\ )-`( , o o)\n `- \\`_`\"'-") 5 6 i = i + 1 7
1#Compte de 2 à 20 de 2 en 2 2compteur = 0 3while compteur >= 20: 4 compteur = compteur + 2 5 print(compteur) 6print("FIN")
1quiz = input("Quelle est la capitale de la France ?") 2while quiz != "Paris": 3 réponse = input("Faux ! Réessaie") 4print("Bonne réponse")
Solution
1réponse = input("Tu aimes la pizza avec ananas ?") 2while réponse != "oui" and réponse != "Oui": 3 réponse = input("Réfléchis bien ! Tu aimes la pizza ananas ?") 4print("Je savais que tu aimais ça !")
1nb_affichage = int(input("Combien de fois veux-tu voir mon magnifique dessin ?")) 2i = 0 3while i < nb_affichage: 4 i = i + 1 5 print(" _._ _,-'\"\"`-._\n(,-.`._,'( |\\`-/|\n `-.-' \\ )-`( , o o)\n `- \\`_`\"'-")
1#Compte de 2 à 20 de 2 en 2 2compteur = 0 3while compteur < 20: 4 compteur = compteur + 2 5 print(compteur) 6print("FIN")
1quiz = input("Quelle est la capitale de la France ?") 2while quiz != "Paris": 3 quiz = input("Faux ! Réessaie") 4print("Bonne réponse")
Exercice 26#
Écrivez un programme utilisant seulement 2 instructions
print()affichant un compte à rebours de 100 jusqu'à 0. L'exécution du programme ressemblera à ceci :
100
99
98
...
2
1
0
BOOM
1#Ecrivez votre code ici
Complétez le programme précédent avec un
if ... else ...dans lewhilede manière qu'à chaque fois qu'un nombre inférieur à 10 est affiché, le texte"FUYEZ !"le suive :
100
99
98
...
2 FUYEZ !
1 FUYEZ !
0 FUYEZ !
BOOM
Solution
1compte_a_rebours = 100
2while compte_a_rebours >= 0:
3 print(compte_a_rebours)
4 compte_a_rebours -= 1
5print("BOOM")
1compte_a_rebours = 100
2while compte_a_rebours >= 0:
3 if compte_a_rebours < 10:
4 print(compte_a_rebours, "FUYEZ !")
5 else:
6 print(compte_a_rebours)
7 compte_a_rebours -= 1
8print("BOOM")
Exercice 27#
Écrivez un programme dans lequel l'utilisateur peut choisir un nombre pour lequel il souhaite voir apparaître sa table de multiplication. Votre programme ne doit utiliser que une seule instruction print(). Un exemple d'exécution pourrait être le suivant :
Quelle table de multiplication voulez-vous voir ? <--- [4]
1 * 4 = 4
2 * 4 = 8
3 * 4 = 12
...
10 * 4 = 40
1#Ecrivez votre code ici
Solution
Il y a deux manières différentes pour résoudre ce problème. Toutefois, à moins d'être très à l'aise, je vous conseille de rester sur la première solution, car la 2ème est moins intuitive.
1n = int(input("Quelle table de multiplication voulez-vous voir ?"))
2multiplicateur = 1
3while multiplicateur <= 10:
4 print(multiplicateur, "*", n, "=", multiplicateur * n)
5 multiplicateur += 1
1n = int(input("Quelle table de multiplication voulez-vous voir ?"))
2nombre_de_base = n
3compteur = 0
4while compteur < 10:
5 compteur += 1
6 print(compteur, "*", nombre_de_base, "=", n)
7 n += nombre_de_base
Exercice 28#
Écrivez un programme dans lequel l'utilisateur peut consécutivement entrer les notes qu'il a faites dans une branche. À la fin, le programme affichera le nombre de notes insuffisantes qui ont été entrées. Les notes invalides seront simplement ignorées. Pour terminer le programme, l'utilisateur entrera la note 99. Un exemple d'exécution peut être le suivant.
Entrez une note : 4.5
Entrez une note : 3.4
Entrez une note : 6
Entrez une note : 3.9
Entrez une note : 5.1
Entrez une note : 99
Vous avez fait 2 notes insuffisantes
1#Ecrivez votre code ici
Solution
1nb_notes_insuf = 0
2note = 0
3while note != 99:
4 note = float(input("Entrez une note"))
5 if note >= 1 and note < 4:
6 nb_notes_insuf += 1
7print("Vous avez fait", nb_notes_insuf, "notes insuffisantes")
Exercice 29#
Ecrivez un programme correspondant à une mini machine à calculer. Dans celle-ci, l'utilisateur pourra choisir de faire une addition, soustraction ou multiplication entre 2 nombres. Le programme demandera alors à l'utilisateur quel type d'opération il souhaite faire, avant de lui demander les 2 nombres à utiliser. Le programme demandera à l'utilisateur des opérations à faire en boucle, jusqu'à ce que celui-ci écrive "STOP". Un exemple d'utilisation est donné ci-dessous.
Bienvenue dans la mini calculatrice !
Quelle opération souhaitez-vous effectuer ?addition
Quel est le premier nombre ?4
Quel est le deuxième nombre ?7
Le résultat de 4 + 7 est 11
Quelle opération souhaitez-vous effectuer ?multiplication
Quel est le premier nombre ?9
Quel est le deuxième nombre ?11
Le résultat de 9 * 11 est 99
Quelle opération souhaitez-vous effectuer ?STOP
Au revoir !
1#Ecrivez votre code ici
Solution
1print("Bienvenue dans la mini calculatrice !")
2operation = ""
3while operation != "STOP":
4 operation = input("Quelle opération souhaitez-vous effectuer ?")
5 if operation == "STOP":
6 print("Au revoir !")
7 else:
8 nombre1 = float(input("Quel est le premier nombre ?"))
9 nombre2 = float(input("Quel est le deuxième nombre ?"))
10 if operation == "addition":
11 resultat = nombre1 + nombre2
12 print("Le résultat de", nombre1, "+", nombre2, "est", resultat)
13 elif operation == "soustraction":
14 resultat = nombre1 - nombre2
15 print("Le résultat de", nombre1, "-", nombre2, "est", resultat)
16 elif operation == "multiplication":
17 resultat = nombre1 * nombre2
18 print("Le résultat de", nombre1, "*", nombre2, "est", resultat)
19 else:
20 print("Opération non reconnue")