Les boucles sont fondamentales en programmation car elles permettent de répéter en boucle justement des parties de votre programme sans avoir besoin de les réécrire autant de fois que le programme est censé les exécuter.
Il y a deux types de boucles en Python : les boucles for et while.
Boucle for
La boucle for énumère les éléments d'un ensemble et pour chaque élément, répète toujours le même code mais pour cet élément. Donnons un exemple informel :
for objet in liste_courses :
trouver(objet)
mettre_dans_le_chariot(objet)
aller_payer()
Détaillons un peu. Pour chaque objet dans ma liste de courses, je fais toujours la même chose : je le trouve, je le mets dans le chariot. C'est ça que fait ma boucle for. Quand il n'y a plus d'objet dans ma liste de course, je vais payer.
Attention au fait que, comme pour le if... else..., il ne faut pas oublier les ":" et ce qui doit être fait en boucle doit être indenté. Et le aller_payer n'est pas indenté car je ne paye qu'à la fin. S'il était indenté, je devrais pour chaque objet aller payer avant de passer à l'objet suivant...
Passons à des exemples plus informatiques.
Énumération de nombres. C'est de loin la plus utile au début. Pour créer une liste de nombres, on utilise la fonction range.
range(n) : crée une liste de n nombres allant de 0 à n-1.
Et oui en informatique, il va falloir prendre l'habitude de toujours commencer à 0 et du coup finir à n-1 si on veut n nombres en tout.
range(n1,n2) : crée une liste de nombres allant de n1 à n2-1.
range(n1,n2,pas) : crée une liste de nombres allant de n1 à n2-1 en sautant de pas en pas.
Par exemple :
range(4) est la suite de nombres 0 1 2 3
range(3,6) est la suite de nombres 3 4 5
range(1,9,3) est la suite de nombres 1 4 7 (de 3 en 3 en partant de 1)
range(3,0,-1) est la suite 3 2 1 (un pas négatif permet de compter à l'envers ce qui est très pratique des fois)
Passons à des exemples d'utilisation.
>>>for i in range(3) :
>>> print(i)
0
1
2
>>>somme=0
>>>for i in range(4) :
>>> somme+= i
>>>print(somme)
6
Détaillons cet exemple : Pour i allant de 0 jusqu'à 3 (c'est à dire range(4)), je demande à chaque fois somme+=i ce qui veut dire que je rajoute à somme la valeur i. Finalement, j'affiche le résultat qui n'est autre que 0+1+2+3.
Énumération d'une liste. On peut créer soi même une liste de choses à énumérer.
Il y aura tout une partie du cours dédiée aux listes car elles sont incontournables en informatique mais je vais présenter ici au moins comment en créer une "à la main".
Pour créer une liste, il suffit de mettre les objets que l'on veut mettre dedans entre [ ] et séparés par des virgules. Exemple :
>>>liste_courses = [ "stylos rouges" , "piles" , "souris pour la salle info" , "claviers" ]
>>>for objet in liste_courses :
>>> print( objet )
stylos rouges
piles
souris pour la salle info
claviers
Énumération de lettres. Si on a une chaine de caractère (c'est à dire du texte entouré par des guillemets), on peut énumérer chaque lettre directement.
Nous verrons plus tard dans le cours tout ce qu'on peut faire avec des chaines de caractères.
>>>for lettre in "math" :
>>> print( lettre )
m
a
t
h
Boucle while
While permet de boucler tant qu'une condition est vérifiée. Exemples :
>>>i = 0
>>>while i < 4 :
>>> print(i)
>>> i+=1
Tant que i<4, on demande d'afficher i et d'augmenter i de 1. Du coup le résultat sera l'affichage d'affilé de 0 1 2 et 3. Le chiffre 4 ne sera pas affiché car quand i vaut 4, la condition i<4 n'est pas vérifiée donc on n’exécute pas la boucle.
Ça peut paraitre du bon sens sur des exemples simples comme celui ci mais il ne faut pas oublier d'augmenter i sinon i vaudra toujours 0 et donc le programme affichera des 0 jusqu'à la fin des temps... C'est ce qu'on appelle une boucle infinie. En voici malheureusement une autre :
>>>while ma_note_en_maths <20 :
>>> je_bosse_mes_maths()
Les conditions que l'on peut mettre après while sont exactement les mêmes que pour if.
Petites astuces
break : Permet d’arrêter une boucle. C'est pratique quand une condition est réalisée d’arrêter la boucle avant sa fin.
Par exemple si vous courez un marathon :
while distance_parcourue < 42.195 :
courir()
if cheville_foulée :
break
continue : Permet de passer directement à la boucle suivante sans finir celle-ci.
Par exemple, toujours en courant un marathon :
while distance_parcourue < 42.195 :
if point_de_côté :
continue
courir()
Si on a un point de côté, on saute directement à la boucle suivante sans exécuter courir()
else : Après une boucle for, on peut placer un else qui n'a pas la même signification que pour un if.
Dans ce cas, ce qui vient après le else ne sera exécuté que si la boucle for s'est terminée normalement (c'est à dire pas par un break). Par exemple si on cherche quelque chose grâce à une boucle for, dès qu'on l'a trouvé, on peut s’arrêter (avec un break) mais si on finit la boucle sans la trouver, il est indispensable d'utiliser else pour exécuter ce que l'on veut dans ce cas car sinon il serait exécuté dans tous les cas (trouvé ou pas).
Exemple pas très informatique :
for element in botte_de_foin
if element=="aiguille":
print("Trouvé !" )
break
else:
print("Pas trouvé")
Si on ne met pas le else, même si on trouve l'aiguille, il affichera "Trouvé !" suivi de "Pas trouvé".
Exercices
On pourra trouver les exercices ici : Lien vers les exercices.