Les boucles while avec Python

Boucles non bornées avec Python

Cette page s’adresse aux débutants en Python (par exemple des élèves de seconde). Lorsque vous concevez un algorithme, il vous faut parfois intégrer une boucle, c’est-à-dire qu’une partie du programme tournera plusieurs fois : soit un nombre d’itérations déterminé (par le programmeur ou par l’utilisateur) et ce cas est traité en page boucles for avec Python, soit un nombre indéterminé, c’est-à-dire jusqu’à ce qu’un critère soit réalisé, et ce cas est traité ici.

D’ailleurs on peut se débrouiller pour ne jamais employer de boucle bornée for, au bénéfice des boucles non bornées while. Mais en pratique, ces dernières sont plus rares que les boucles for.

boucles

 

Exemple

Nous présenterons la boucle while à travers un exemple.

On a placé la somme de 3 000 € à intérêts composés au taux annuel de \(2,5\%\) le 1er janvier 2000. En quelle année le capital dépasse-t-il 3 300 € ?

Ce problème peut être résolu dès le collège. Une augmentation de \(2,5\%\) se traduit dans les calculs par un coefficient multiplicateur de \(1 + \frac{2,5}{100},\) soit 1,025. Donc, après un an, ce capital s’élève à \(3\,000 × 1,025 = 3\,075\) €. Les intérêts sont composés, c’est-à-dire que ceux de la deuxième année sont établis à partir de 3 075. Donc \(3\,075 × 1,025 = 3\,151,88\) €. Et ainsi de suite.

Cette question faisait partie du sujet du bac ES de Pondichéry en 2013 (exercice sur les suites géométriques) mais ne partez pas, nul besoin d’avoir le niveau terminale pour comprendre ce qui est demandé, ni même de le programmer. L’exercice tel qu’il se présentait aux futurs bacheliers est traité en page de suite géométrique au bac ES.

L’algorithme était donné en langage « naturel ». Donc, pour répondre à la question posée, soit les candidats programmaient leur calculatrice, soit ils calculaient le montant du capital pour chaque année, comme ci-dessus, jusqu’à trouver un montant supérieur à 3 300.

boucle while

 

Traduction en Python

Traduisons ce programme au plus près en Python. Il y a trois variables : une variable d’entrée S, dont la valeur sera en l’occurrence 3 300, une variable compteur n que l’on doit incrémenter au début de chaque boucle et une variable U dont la valeur est issue du traitement et qui est comparée à S.

# Entrée
S = int(input('Saisir un nombre supérieur à 3000 : '))

# Initialisation
n = 0
U = 3000

# Traitement
while U <= S:
    n = n + 1
    U = U * 1.025

# Sortie
print(2000 + n)

Ce que voit l’utilisateur :

Saisir un nombre supérieur à 3000 : 3300
2004

Remarquez que l’instruction print se situe au même niveau que while. Il n'y a pas d'équivalent à l'instruction Fin tant que puisque celle-ci est gérée par l'incrémentation (pas de marge pour l'instruction print). Notez aussi qu'avec Python il existe une façon plus simple d'incrémenter de 1 :

n += 1

Le programme ci-dessous vise à afficher toutes les valeurs de fin d’année. Contrairement à ce qui caractérisait le programme précédent, il faut incrémenter l’instruction print. Quant à l’instruction round(U, 2), elle permet d’arrondir les montants à deux décimales, c'est-à-dire au centime près.

# Entrée
S = int(input('Saisir un nombre supérieur à 3000 : '))

# Initialisation
n = 0
U = 3000

print(2000, '...', 3000, ' €')

# Traitement
while U <= S:
    n = n + 1
    U = U * 1.025
    print(2000 + n, '...', round(U, 2), ' €')

Ce que voit l’utilisateur :

Saisir un nombre supérieur à 3000 : 3300
2000 ... 3000 €
2001 ... 3075.0 €
2002 ... 3151.87 €
2003 ... 3230.67 €
2004 ... 3311.44 €


Exercice

Écrire un programme en Python pour répondre à la question suivante (elle fait l'objet d'un exercice en page boucles avec calculatrice Casio) : chaque année, une entreprise de téléphonie mobile voit le nombre de ses anciens abonnés diminuer de \(16\%\) tout en enregistrant l’arrivée de 100 000 nouveaux clients. On raisonnera à partir d’une fin d'année où le nombre total d’abonnés est de 400 000 (pour simplifier les calculs, on la nommera année 0). À partir de quelle année le nombre d’abonnés dépassera-t-il un certain seuil ?

 

Proposition de corrigé

# Entrée
X = int(input("Saisir le nombre d'abonnés : "))

# Initialisation
A = 0
C = 400000

# Traitement
while C < X:
    C = C * 0.84 + 100000
    A = A + 1

# Sortie
print ("Dans le courant de l'année ", (A))


L’instruction break

L’instruction d’arrêt fonctionne avec while comme avec for ou if. Par exemple, si l’utilisateur souhaite interrompre une suite de saisies, le programme doit prévoir cette éventualité avec un break.

 

boucle programme