12 Exos Boucle While Correction
Exercices à programmer⚓︎
Exercice 1⚓︎
Voici un programme permettant d’afficher les carrés et les cubes des \(20\) premiers entiers naturels non nuls. Réécrivez-le avec une boucle while à la place de la boucle for.
for n in range(1, 21):
print("Le carré de " + str(n) + " est : " + str(n**2) + ".")
print("Le cube de " + str(n) + " est : " + str(n**3) + ".")
Avec une boucle while :
k = 0
while k < 21:
print(k, ':', k * k, k ** 3)
k += 1
Exercice 2⚓︎
Voici un programme permettant d’afficher toutes les tables de multiplication de \(0\) à \(10\). Réécrivez-le avec des boucles while à la place des boucles for.
for k in range(0,11,1):
print("Table de " + str(k) + " : ")
for j in range(0,11,1):
print(k," *",j," =",k*j)
print()
k = 0
while k < 11:
print("Table de " + str(k) + " : ")
j = 0
while j < 11:
print(k," *",j," =",k*j)
j += 1
print()
k += 1
Exercice 3⚓︎
Écrire un programme qui affiche une table de conversion des sommes d’argent exprimées en euros et en francs suisses. La progression des valeurs sera géométrique comme dans l’exemple ci-dessous :
1 CHF = 1,07 EUR
2 CHF = 2,14 EUR
3 CHF = 3,21 EUR
4 CHF = 4,144 EUR
On s’arrêtera lorsqu'on aura dépassé 4000 euros. Ne pas déterminer le nombre de tours de boucles.
n_suisse = 0
n_euros = 0.0
while n_euros <= 4000 :
print(f"{n_suisse : } CHF = {n_euros : .3f} EUR")
n_suisse += 1
n_euros = n_suisse * 1.07
Exercice 4⚓︎
Écrire un programme qui affiche une suite de nombres dont chaque terme est égal au triple du précédent. On part avec nb = 2, et on s'arrête lorsqu'il dépasse \(1\) million.
nb = 2
while nb < 1000000:
print(nb)
nb *= 3
Exercice 5⚓︎
Modifier le programme ci-dessous afin de s'assurer que l'utilisateur ne choisisse que des nombres entiers entre 0 et 10 (s'il joue autre chose, on lui redemande de saisir 𝑥 et 𝑦).
On utilise une boucle while pour redemander à l'utilisateur de saisir des valeurs tant que ce qu'il a écrit ne répond pas aux critères que l'on a fixés (que \(x\) et \(y\) soient des nombres entre \(0\) et \(10\)).
a, b = 4, 7
print("À vous de jouer")
x = int(input("x ? "))
y = int(input("y ? "))
# ici si les nombres ne sont pas bons, on redemande
while x < 0 or x > 10:
print("Merci de choisir un nombre entier entre 0 et 10.")
x = int(input("x ? "))
while y < 0 or y > 10:
print("Merci de choisir un nombre entier entre 0 et 10.")
y = int(input("y ? "))
# fin de la boucle
if x == a and y == b:
print("Coulé")
else:
if x == a or y == b:
print("En vue")
else:
print("À l'eau")
On pouvait aussi faire une seule boucle en redemandant \(x\) et \(y\) dès que l'un des deux ne correspond pas à ce qui est attendu.
Pour aller plus loin
On pouvait aussi s'assurer que l'utilisateur tape bien un entier. Dans ce cas, il faut accepter que le "input" soit, par exemple, "ab", et tenter une conversion en int sans echec.
a, b = 4, 7
print("À vous de jouer")
x = ""
while type(x) is not int or x < 0 or x > 10:
print("Merci de choisir un nombre entier entre 0 et 10.")
x = input("x ?")
try:
x = int(x) #on tente la conversion
except:
print("un entier, svp")
Exercice 6⚓︎
Modifier le programme ci-dessous afin de permettre à l’utilisateur de rejouer s’il le souhaite.
Si on veut permettre à l’utilisateur de rejouer "s’il le souhaite", il faut lui poser la question après un tour de jeu. On choisit une variable qui note la réponse de l'utilisateur, et on crée un boucle while qui fait jouer et rejouer tant que la valeur de la variable.
Pour commencer le jeu, la variable est initialisée à la valeur qui permet de jouer.
a, b = 4, 7
jeu_en_cours = 'y'
while jeu_en_cours == 'y':
print("À vous de jouer")
x = int(input())
y = int(input())
if x == a and y == b:
print("Coulé")
else:
if x == a or y == b:
print("En vue")
else:
print("À l'eau")
jeu_en_cours = input("Continuer ? ('y' ou 'n') : ")
On peut imaginer une autre solution, où le fait de rejouer est lié, non pas au choix de l'utilisateur, mais au fait d'avoir trouvé la réponse, par exemple.
a, b = 4, 7
jeu_en_cours = True
while jeu_en_cours:
print("À vous de jouer")
x = int(input())
y = int(input())
if x == a and y == b:
print("Coulé")
jeu_en_cours = False #le jeu s'arrête
else:
if x == a or y == b:
print("En vue")
else:
print("À l'eau")
Exercice 7⚓︎
Expérimenter avec la conjecture de Syracuse :
On part d'un nombre strictement positif ; s'il est pair, on le divise par 2 ; s'il est impair, on le multiplie par 3 et on ajoute 1. On s'arrête dès que l'on atteint 1.
La conjecture de Syracuse annonce qu'on finira par atteindre 1 pour n'importe quel entier de départ (mais attention, ça peut être long, et bloquer l'ordinateur).
Écrire une fonction qui prend en paramètre un entier \(n\), et qui fait affiche les termes successifs de cette suite jusqu'à ce qu'elle s'arrête. Tester avec quelques valeurs.
def syracuse(n):
print(n)
while n > 1:
if n % 2:
n = n // 2
else:
n = 3 * n + 1
print(n)
syracuse(14)
Exercices sur la terminaison des boucles While⚓︎
Pour chaque exercice ci-dessous, déterminer, en justifiant, si la boucle while se termine ou non. Si elle ne se termine pas, proposer une modification pour la faire terminer.
Exercice 8⚓︎
y = 5
while y > 0:
print(y)
y = y + 1
- La boucle ne se termine pas.
- Justification :
yest incrémenté à chaque itération, donc il restera toujours supérieur à0. - Modification pour terminer :
y = y - 1au lieu dey = y + 1
Exercice 9⚓︎
z = 100
while z != 0:
print(z)
z = z - 2
- La boucle ne se termine pas.
- Justification :
zest impair et est décrémenté de2à chaque fois, donc il restera impair et n'atteindra jamais exactement0. - Modification pour terminer : changer la condition à
while z > 0:
Exercice 10⚓︎
a = 1
while a < 10:
print(a)
a = a * 2
- La boucle se termine.
- Justification :
aest multiplié par2à chaque itération, dépassant rapidement10.
Exercice 11⚓︎
b = 0
while b < 15:
if b % 2 == 0:
print(b)
b = b + 1
- La boucle se termine.
- Justification :
best incrémenté à chaque itération et atteindra15en un nombre fini d'étapes.
Exercice 12⚓︎
b = 0
while b < 15:
if b % 2 == 0:
print(b)
b = b + 1
-
La boucle ne se termine pas.
-
Justification : à cause de l'indentation incorrecte, l'incrémentation de
b(b = b + 1) ne se produit que lorsquebest pair. Lorsquebdevient impair (1), cette ligne n'est plus exécutée, etbreste bloqué à1, ce qui est toujours inférieur à15. La boucle continue donc indéfiniment. -
Modification pour terminer : corriger l'indentation de la ligne
b = b + 1pour qu'elle soit au même niveau que leif:🐍 Script Pythonb = 0 while b < 15: if b % 2 == 0: print(b) b = b + 1Avec cette correction,
bsera incrémenté à chaque itération, permettant à la boucle de se terminer.