Boucle while#
Répétition d'un bloc d'instructions#
La boucle while (qui signifie "tant que" en anglais) permet de répéter un bloc d'instructions tant qu'une condition est vraie.
while condition:
instruction 1
instruction 2
...
Important
En Python, les instructions appartenant à un même bloc d'instructions sont reconnaissables car elles ont toutes exactement la même indentation.
Programme
1nb_points = 0
2max = 10
3while nb_points < max:
4 print("Points:", nb_points)
5 nb_points += 3
6print("Bravo!")
Ordinogramme
La boucle while peut être utilisée comme une boucle for. Pour cela, il faut
définir un compteur qui va "compter" le nombre de répétitions.
Boucle for
1for _ in range(10):
2 print("Hello")
Boucle while
1compteur = 0
2while compteur < 10:
3 print("Hello")
4 compteur += 1
Important
Si on utilise un compteur dans la condition du while, il ne faut pas oublier d'incrémenter (augmenter) ce compteur à chaque passage dans la boucle, sinon la condition sera toujours vraie et la boucle ne s'arrêtera jamais (boucle infinie). Cela fait "planter" le programme.
Exercice 1#
Sans l'exécuter, qu'affiche ce programme?
Ensuite, exécutez le programme pour vérifier votre réponse.
1i = 1
2while i <= 10:
3 print("7 *", i, "=", 7 * i)
4 i = i + 1
Solution
Ce programme calcule et affiche le livret de 7 de 1 à 10.
Exercice 2#
Sans l'exécuter, qu'affiche ce programme?
Ensuite, exécutez le programme pour vérifier votre réponse.
1n = 2
2while n <= 50:
3 print(n)
4 n = n + 2
Solution
Ce programme affiche les nombres paires de 2 à 50 compris.
Exercice 3#
Sans exécuter le programme, qu'affichera-t-il?
1s = 0
2i = 1
3while i <= 5:
4 s = s + i
5 i = i + 1
6print(s)
Solution
ligne |
condition (while) |
s |
i |
|
|---|---|---|---|---|
1 |
0 |
? |
||
2 |
0 |
1 |
||
3 |
1 <= 5: Vrai |
0 |
1 |
|
4 |
1 |
1 |
||
5 |
1 |
2 |
||
3 |
2 <= 5: Vrai |
1 |
2 |
|
4 |
3 |
2 |
||
5 |
3 |
3 |
||
3 |
3 <= 5: Vrai |
3 |
3 |
|
4 |
6 |
3 |
||
5 |
6 |
4 |
||
3 |
4 <= 5: Vrai |
6 |
4 |
|
4 |
10 |
4 |
||
5 |
10 |
5 |
||
3 |
5 <= 5: Vrai |
10 |
5 |
|
4 |
15 |
5 |
||
5 |
15 |
6 |
||
3 |
6 <= 5: Faux |
15 |
6 |
|
6 |
15 |
6 |
15 |
Le programme affichera 15.
Exercice 4#
En utilisant une boucle while, écrivez un programme qui:
affiche tous les nombres entiers jusqu'à 15,
à la fin, affiche "J'ai fini de compter!".
1# Écrivez le programme ici
Solution
1i = 1
2while i <= 15:
3 print(i)
4 i += 1
5print("J'ai fini de compter!")
Exercice 5#
En utilisant une boucle while, écrivez un programme qui:
demande un nombre entier à l'utilisateur,
affiche les 5 premiers multiples de ce nombre.
1# Écrivez le programme ici
Solution
1nombre = int(input("Choisissez un nombre: "))
2i = 1
3while i <= 5:
4 print(i * nombre)
5 i += 1
Exercice 6#
Complétez le programme pour qu'il demande à l'utilisateur la capitale de la Suisse. Tant que la réponse n'est pas "Berne", le programme redemande une nouvelle réponse.
Exemple d'exécution:
Quelle est la capitale de la Suisse?
Zurich
Faux, essaie encore!
Genève
Faux, essaie encore!
Berne
Bravo!
1capitale = input("Quelle est la capitale de la Suisse?")
2
3# Complétez le programme ici
4while ...:
5 capitale = input("Faux, essaie encore!")
6print("Bravo!")
Solution
1capitale = input("Quelle est la capitale de la Suisse?")
2
3while capitale != "Berne":
4 capitale = input("Faux, essaie encore!")
5print("Bravo!")
Exercice 7#
Tout d'abord, sans les exécuter, expliquez la différence entre les deux programmes. Ensuite, testez-les pour vérifier votre réponse.
Programme 1
1n = 5
2if n < 10:
3 n += 1
4 print(n)
Programme 2
1n = 5
2while n < 10:
3 n += 1
4 print(n)
Solution
Le programme 1 affichera: 6
Le programme 2 affichera: 6 7 8 9 10
Avec un if le condition est testée une seule fois, le bloc d'instructions est
lui aussi exécuté une seule fois, alors qu'avec le while, le bloc
d'intructions sera exécuté tant que la condition n < 10 est vérifiée.
Exercice 8#
Déterminez ce qu'affichera le programme suivant.
1x = 0
2y = 20
3while x < y:
4 y -= x * 2
5 x = x + 2
6 print(x + y)
Solution
ligne |
condition (while) |
x |
y |
|
|---|---|---|---|---|
1 |
0 |
? |
||
2 |
0 |
20 |
||
3 |
0 < 20: vrai |
0 |
20 |
|
4 |
0 |
20 |
||
5 |
2 |
20 |
||
6 |
2 |
20 |
22 |
|
3 |
2 < 20: vrai |
0 |
20 |
|
4 |
2 |
16 |
||
5 |
4 |
16 |
||
6 |
4 |
16 |
20 |
|
3 |
4 < 16: vrai |
4 |
16 |
|
4 |
4 |
8 |
||
5 |
6 |
8 |
||
6 |
6 |
8 |
14 |
|
3 |
6 < 8: vrai |
6 |
8 |
|
4 |
6 |
-4 |
||
5 |
8 |
-4 |
||
6 |
8 |
-4 |
4 |
|
3 |
8 < -4: faux |
8 |
-4 |
Exercice 9#
Implémentez l'algorithme d'Euclide qui permet de déterminer le PGDC de 2 nombres donnés par l'utilisateur. L'algorithme d'Euclide est décrit par un ordinogramme au début du chapitre Algorithme.
1# Écrivez le programme ici
Solution
1# Implémentation de l'algorithme d'Euclide pour déterminer le PGDC
2a = int(input("Entrez un 1er nombre entier: "))
3b = int(input("Entrez un 2e nombre entier: "))
4
5r = a%b
6while r!=0:
7 a = b
8 b = r
9 r = a%b
10print("Le PGDC est", b)
Exercice 10#
Vous achetez un scooter à 3'500 CHF avec un crédit dont le taux annuel est de 9%. Vous pouvez rembourser 100 CHF par mois (intérêts compris).
Combien de mensualités sont nécessaires pour rembourser la totalité du montant?
Quel sera le montant total que vous aurez alors payé?
Afin de faciliter la lecture du programme, définissez une variable pour chacun des paramètres de cet exercice: prix, dette, taux d'intérêt, nombre de mensualités ...
Calculez également le taux d'intérêt mensuel puisque la simulation va se faire mois par mois et qu'il faudra donc recalculer les intérêts mois par mois. Le taux d'intérêt mensuel correspond au douzième du taux d'intérêt annuel.
Créez une boucle qui s'exécutera tant que la dette ne sera pas totalement remboursée.
Chaque passage dans la boucle correspond à un mois. Il faut donc mettre à jour les différentes variables à chaque passage dans la boucle.
Faites quelques autres simulations de remboursement en changeant les paramètres de votre programme (durée, prix...)
1# Écrivez le programme ici
Solution
1dette = 3500
2tauxAnnuel = 9 / 100
3tauxMensuel = tauxAnnuel / 12
4remboursement = 100
5montantRembourse = 0
6nb_mensualites = 0
7while dette > 0:
8 dette += dette * tauxMensuel
9 nb_mensualites += 1
10 if dette >= remboursement:
11 dette -= remboursement
12 montantRembourse += remboursement
13 print("Dette après", nb_mensualites, "mois: ", dette, "CHF.")
14 else:
15 print("Le dernier versement sera de", dette, "CHF.")
16 montantRembourse += dette
17 dette = 0
18
19print("Nombre de mensualités nécessaires pour rembourser la dette:", nb_mensualites)
20print("Montant payé au total: ", montantRembourse)