Boucles non bornées¶
Syntaxe¶
Les boucles for
permettent de répéter un nombre défini de fois un bloc d'instructions.
Il y a des cas ou cela n'est pas possible. Dans ce cas, on utilise une boucle while
, "tant que" en anglais dont la syntaxe est:
while condition:
bloc_instructions_1
bloc_instructions_2
Le mot clé while
est suivi d'une condition qui est ponctué par un :
. S'en suit un bloc d'instructions indenté qui sera répété tant que la condition sera vraie.
Le bloc bloc_instructions_1
est répété tant que la condition condition
est évaluée à True
.
Dès que la condition condition
est évaluée à False
le bloc bloc_instructions_2
, s'il existe, est exécuté.
Exemple
Ce programme affiche la valeur de affiche la valeur affectée à la variable i
tant que i < 5
Ce programme affiche:
Début
1
2
3
4
Fin
i
prend successivement les valeurs de 1 à 5.
Attention aux boucles infinies¶
Les boucles while
présente un risque de boucle infinie. En effet, si la condition après le mot clé while
est toujours évaluée à True
la boucle se répète indéfiniment et le programme ne s'arrête pas. Il faut alors forcer son arrêt.
Exemple
while True:`
print('Bonjour!')
Bonjour!
i = 5
while i > 3:
i = i + 1
i
est initialisée à 5 et à chaque tour de boucle est incrémenté de 1. i
est donc toujours strictement supérieur à 3. La condition i > 3
est donc toujours évaluée à True
et la boucle est donc répétée indéfiniment.
Exemple 2¶
On place une somme d'argent sur un compte rémunéré à 5 %. Le capital ainsi placé augmente chaque année de 5 %. C’est-à-dire qu’il est multiplié par 1,05 chaque année. On veut connaître le nombre d'années qu'il faut pour faire fructifier une certaine somme d'un montant donné.
Pour cela on va utiliser la fonction calcul_nb_annees
qui a pour paramètres:
capital_depart
un flottant qui est le capital initial déposé.gain
un flottant qui est le gain que l'on souhaite.
Cette fonction retourne un entier qui représente la première année ou le capital a rapporté au moins le gain escompté.
Exemple 2
On doit utiliser une boucle while
car on ne sait pas à l'avance combien d'années il faut pour obtenir le gain escompter. Obtenir ce gain traduit par la condition capital_arrivee <= capital
.
Le bloc d'instruction qui calcule le capital de l'année suivante et incrémente l'année de 1 est répété tant que l'on n'a pas cette condition, ce qui se traduit par capital_arrivee > capital
Voici la trace de l'appel calcul_nb_annees(100,20)
qui retourne le nombre d'années nécessaire pour que 100€ rapporte 20€. Les nombres ont été arrondis au centième près.
Le tableau contient l'état de la condition capital_arrivee > capital
et des variables capital
et annee
au moment des commentaires #ICI
et #LA
.
capital_arrivee > capital | capital | annee | |
---|---|---|---|
#ICI | X | 100 | 0 |
#LA | True |
105 | 1 |
#LA | True |
110,25 | 2 |
#LA | True |
115,76 | 3 |
#LA | False |
121,55 | 4 |
Cet appel retourne 4: Il faut 4 ans pour que 100€ placé à 5% d'intérêt rapporte 20€.
L'instruction break
¶
Avec l'instruction break
nous pouvons arrêter la boucle même si la condition après lewhile
est vraie. Cela permet une sortie anticipée d'une boucle, ce qui peut être utile dans certain cas.
On peut aussi utiliser cette instruction dans une boucle for
Exemples
i = 1
while i < 5:
print(i)
if i == 2:
break
i = i + 1
print("Fin")
i
est affecté de la valeur 2, le test i == 2
est évalué à True
. L'instruction break
est exécuté et le programme sort de la boucle.
Ce programme affiche:
1
2
Fin
while True:
a = input()
if a == "q":
print("Fin")
break
else:
print("echo",a)
q
le programme s'arrête et affiche Fin
sinon il affiche echo
suivit de la chaine saisie puis attend à nouveau que une saisie par l'utilisateur.
L'instruction continue
¶
L'instruction continue
permet de passer au tour de boucle suivant sans sortir de la boucle.
On peut aussi utiliser cette instruction dans une boucle for
Exemple
i = 0
while i < 5:
i = i + 1
if i == 2:
continue # passe au tour suivant si i == 2. Dans ce cas le print(i) n'est pas exécuté.
print(i)
1
3
4
while
ou for
?¶
On peut toujours remplacer une boucle bornée par une boucle non bornée.
Exemples
Les deux programmes affichent les nombres de 1 à 5, le premier utilise un boucle bornée, le second une boucle non bornée.
for i in range(1,6):
print(i)
i = 1
while i < 6:
print(i)
i = i + 1
Par contre, lors que l'on ne sait pas à priori le nombre de tours de boucle nécessaire, il faut utiliser une boucle while
. Dans ce cas il faut être vigilant au fait que le programme sort de la boucle.