Boucle non bornée while dans Python


En programmation, on appelle boucle « un système d’instructions qui permet de répéter un certain
nombre de fois (voire indéfiniment) toute une série d’opérations
».

Python propose une instruction particulière pour construire des boucles bornées, à condition de savoir le nombre d’itérations (répétitions) nécessaires : La boucle « for » permet de répéter plusieurs fois le même traitement. Par exemple, pour calculer la somme des $n$ termes d’une suite numérique.

Python propose une autre instruction particulière pour construire des boucles non bornées, c’est-à-dire dont on ne connaît pas le nombre nécessaire d’itérations. La boucle sert à le calculer. La boucle « while » dépend donc d’une condition Test. Le traitement est répété tant que la condition est vraie. Par exemple, pour déterminer à partir de quel rang $n$, la suite numérique $2^n$ dépasse une valeur $M$ donnée au départ.

Définition 1.
Le mot « while » signifie « Tant que » en anglais. L’instruction « while » est suivie d’une Condition test, puis d’un bloc d’instructions et indique à Python qu’il lui faut répéter autant de fois qu’il faut, le bloc d’instructions qui suit, tant que la Condition est vraie. La boucle s’arrête au premier tour où la condition devient fausse.
En général, on affiche après le nombre $n$ d’itérations dans la boucle et/ou la valeur d’une variable calculée à chaque itération.

Exemples

Exercice n°1.
Écrire un programme Python, qui permet de déterminer le plus petit entier naturel $n$ pour lequel $2^n\geqslant10000$.

On crée une boucle « while » (non bornée), Tant que le contraire de cette condition est vrai, on incrémente $n$ (augmenter de 1). Le programme s’arrête dès que la condition devient vraie,

n=0
while 2**n<10000:
$\qquad$ n=n+1
print(n)

>>> 14


Exercice n°2.
Reprendre l’exercice précédent pour afficher les couples $(n, u_n)$, avec $u_n=2^n$.

On peut améliorer ce petit programme, en affichant toutes les valeurs obtenues de $n$ et de $2^n$ à chaque itération, en rentrant les instructions print(n) et print(2**n) dans la boucle en affichant des couples $(n;2^n)$.

n=0
while 2**n<10000:
$\qquad$ n=n+1
$\qquad$ print(“(“,n,”;”,2**n,”)”)
print(“Conclusion. Le plus petit entier est n =”,n)

>>>
( 1 ; 2 )
( 2 ; 4 )
( 3 ; 8 )
( 4 ; 16 )
( 5 ; 32 )
( 6 ; 64 )
( 7 ; 128 )
( 8 ; 256 )
( 9 ; 512 )
( 10 ; 1024 )
( 11 ; 2048 )
( 12 ; 4096 )
( 13 ; 8192 )
( 14 ; 16384 )
Conclusion : Le plus petit entier est : 14


Exercice n°3.
Reprendre l’exercice précédent pour afficher les résultats sous la forme d’une ou deux listes : les rangs et les valeurs.

On peut aussi, afficher les résultats sous la forme d’une ou deux listes : les rangs et les valeurs. A chaque itération, on ajoute le rang à la liste L1 et la valeur $u_n$ à la liste L2.

n=0
L1=[0]
L2=[1]
while 2n<10000:
$\qquad$ n=n+1
$\qquad$ L1.append(n)
$\qquad$ L2.append(2n)
print(“Conclusion. Le plus petit entier est n =”,n)
print(L1)
print(L2)

>>>
Conclusion. Le plus petit entier est n = 14
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384]