Chp D. Les boucles WHILE et FOR
On va distinguer deux type de boucles. Les boucles conditionnelles (mot clé while) et les boucles inconditionnelles
1. Les boucles conditionnelles : WHILE
Ce type de boucle est appelé ainsi, car elles répètent un bloc d'instruction tant que une certaine condition est vérifiée. On l'appelle aussi parfois boucle universelle car on pourra simuler des boucles inconditionnelles (voir plus loin...)
La structure d'une boucle conditionnelle en python est la suivante:
Boucle conditionnelle (simple)
while condition :
bloc d'instructions
Ce type de boucle est très pratique par exemple pour déterminer des "seuils".
utilisation d'une boucle while
Par exemple, on souhaite résoudre dans \(\mathbb N\), l'inéquation \(2^n>1\,000\,000\). Puisque on ne cherche les solutions que parmi les entiers positifs, et que les nombres \(2^n\) augmentent lorsque \(n\) augmente, une méthode brutale consiste à tester toutes les valeurs de l'entier \(n\) jusqu'à trouver la première qui convienne. Tester le programme suivant :
n = 1
while 2**n <= 1000000 : # " tant que 2^n <= 100000 faire..."
n = n + 1
print(f"La plus petite valeur n telle que 2**n>1000000 est n={n}")
# affiche : ... est n=20
Remarques :
-
Noter la syntaxe bien pratique (déjà rencontrée) des f-string (la chaîne de caractère précédée de la lettre f) pour afficher le résultat...
-
On peut bien entendu retrouver ce résultat sans boucle si l'on connait la fonction logarithme népérien :
\[2^n > 1000000 \iff n\ln(2) > \ln(1000000) \iff n > \dfrac{\ln(1000000)}{\ln(2)}\]from math import log # importe la fonction logarithme népérien depuis le module math print(log(1000000)/log(2)) # affiche : 19.931568569324174
Attention
Pour de telles boucles la condition de l'arrêt doit toujours être posée.
Dans le cas précédent, on "sait" que la fonction \(n\mapsto 2^n\) est croissante et tend vers l'infini, donc on est assuré qu'à partir d'un certain moment la condition 2**n < 1000000
sera fausse et que la boucle s'arrêtera.
Ressources supplémentaires
ALler voir avec intérêt la section relative au boucles while sur le site W3school
Pour s'exercer
Faire le TD D1
2. Les boucles inconditionnelles : FOR
On a déjà vu dans le paragraphe précédent, la structure universelle d'une boucle avec l'instruction WHILE. Dans le cas où l'on connait à l'avance le nombre de répétitions, les langages de programmations comme python on introduit une syntaxe un peu plus courte : la boucle inconditionnelle, ou boucle FOR. Sa structure en python est la suivante :
Boucle inconditionnelle
for i in iterable :
bloc d'instructions
Précisons un peu la notion d'itérable. Pour faire simple, c'est toute sorte d'objet dont python peut énumérer les composantes. Par exemple, essayer le code suivant:
Première boucle FOR
it = range(10) # range(10) est un "itérable" constitué des entiers de 0 à 9
for i in it:
print(i)
Ce script va simplement afficher les 10 chiffres de 0 à 9.
Voyons quelques exemples classiques d'itérables :
Exemples d'itérables classiques
-
On peut itérer sur un objet issu de la fonction
range(...)
. Celle-ci peut recevoir de 1 à 3 arguments. Voyons son fonctionnement sur des exemplesit = range(10) # les entiers de 0 à 10 exclu it = range(3,10) # les entiers de 3 à 10 exclu it = range(3,10,2) # les entiers de 3 à 10 exclu en allant de 2 en 2
-
Les chaînes de caractères sont itérables :
it = 'abc' # les 3 lettres 'a' , 'b' et 'c'
-
Les listes sont itérables également :
it = [2,3,5,7] # les 4 premiers nombres premiers it = ['cos', 'sin', 'tan' ] # les abréviations des 3 fonctions trigo.
Attention
Même si techniquement en python c'est faisable, on s'interdira de modifier la valeur de la variable i
à l'intérieur de la boucle. En effet cela nuit gravement à la lisibilité du code, à son debogage ainsi qu'à sa preuve.
Il est utile de connaître au moins deux façons différentes pour parcourir une liste en python :
Comment parcourir une liste ?
Considérons par exemple la liste l=['pomme', 'raisin', 'kiwi']
. On peut procéder ainsi :
-
La méthode "classique" utilisable dans la plupart des langages : on accède aux éléments par son indice.
Noter la syntaxefor index in range(len(l)): # len(l) donne la longueur de la liste print(l[index]) # affiche : # pomme # raisin # kiwi
l[index]
qui permet d'accéder à l'élément de numéro index stocké dans la liste (avec une numérotation qui commence à 0) -
Si l'on n'a besoin que des valeurs (et pas des indices): on accède directement aux éléments (spécifique à python)
Pour les curieux on peut citer une troisième technique :for element in l: print(element) # affiche : # pomme # raisin # kiwi
-
Une méthode qui permet de re-créer les numéros des indices d'un itérable :
for index, element in enumerate(l): # enumerate crée une liste de couples print(index,'->',element) # affiche : # 0 -> pomme # 1 -> raisin # 2 -> kiwi
Remarque : Il existe bien d'autres itérables en python, on peut même créer ses propres itérables, mais cela n'est pas une priorité pour l'instant !
Ressources supplémentaires
Aller voir avec intérêt la section relative au boucles for sur le site W3school
Pour s'exercer
Faire le TD D2
3. Les TD D...
Dans ces TDs, on va manipuler les boucles WHILE et FOR. On va aussi découvrir les listes, qui sont des structures de données très utiles en programmation.
LE TD D1 : boucle While
TD D1 version interactive capytale
Versions html : Énoncé et Correction
LE TD D2 : boucle For, listes
TD D2 version interactive capytale
Versions html : Énoncé et Correction