Aller au contenu

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 :

  1. 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...

  2. 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 exemples

    it = 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 :

  1. La méthode "classique" utilisable dans la plupart des langages : on accède aux éléments par son indice.

    for index in range(len(l)): # len(l) donne la longueur de la liste
        print(l[index])
    
    # affiche :
    # pomme
    # raisin
    # kiwi
    
    Noter la syntaxe 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)

  2. Si l'on n'a besoin que des valeurs (et pas des indices): on accède directement aux éléments (spécifique à python)

    for element in l:
        print(element)  
    
    # affiche :
    # pomme
    # raisin
    # kiwi
    
    Pour les curieux on peut citer une troisième technique :

  3. 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