Une grande faculté des ordinateurs est de pouvoir faire des calculs, énormément de calculs. C'est ainsi que de grandes simulations peuvent être réalisées, par exemple. Les ordinateurs ont ainsi la possibilité de répéter un très grand nombre de fois des actions, pour par exemple exécuter plusieurs fois un calcul, faire fonctionner un jeu, etc.
Nous allons donc voir ce que Python (et la plupart des langages, à vrai dire) permet de faire en termes de répétitions.
L'exemple qui vient en tête le premier est de répéter une action un nombre déterminé de fois.
Pour illustrer ça, nous allons commencer par un exemple simple. Imaginons que nous voulons (pour des raisons que nous n'allons pas lister ici, c'est un exemple, hé !) écrire 124 fois le message "Ping !". La manière qui vient tout de suite, mais qui détruit les doigts, est d'écrire 124 fois print("Ping !"). Cette méthode est évidemment fatigante... Non seulement on se fatigue les doigts, mais en plus de cela imaginez si nous voulions ajouter ou enlever des instructions, voir si nous devenions plus gentils et voulions afficher le message "Bonjour !"...
Une meilleure manière serait d'écrire une seule fois l'action et d'indiquer à l'interpréteur que nous voulons répéter cette action 124 fois. Comme ça, nous pourrions modifier facilement le nombre de répétitions et n'aurions qu'à modifier une seule fois le message ! C'est ce que nous permettent de faire les boucles dites itératives (nous verrons pourquoi se nomment-elles comme ça plus tard...).
En Python, pour répéter une suite d'instruction un certain nombre de fois, nous écrivons ceci:
for i in range(nombre_de_répétitions):
#Toutes les instructions à répéter sont indentées
Nous remarquons encore une fois quatre espaces pour écrire tout ce qui est dans la boucle, comme pour les conditions. Nous pouvons encore une fois mettre plusieurs instructions, il suffit juste d'appliquer la règle des trois espaces
Ainsi, notre petit exemple peut s'écrire comme cela, beaucoup plus joliment (quoi ? c'est joli !) qu'avec des copier-coller:
for i in range(124):
print("Ping !") #Allons ping le monde entier !!!
Ces boucles ont énormément d'intérêt en programmation. En effet, il y aura des moments où il faudra répéter un grand nombre de fois des actions et une telle boucle est très utile ! Elle nous permet aussi de prendre le temps de voir l'essentiel et de réfléchir séparément aux actions en elles-mêmes et au nombre de répétitions.
Nous pouvons aussi utiliser des variables dans une répétition. Par exemple, construisons un programme qui permet de calculer le double de tous les nombres entre 0 et 100 et de l'afficher. Pour cela, nous pouvons utiliser une variable qui vaudra 0 au début. Ensuite, nous allons afficher son double, puis lui ajouter 1 à chaque fois et on répète ceci 100 fois ! Comme ça, notre variable ira de 0 à 100 et nous afficherons alors à chaque fois son double. Allez, on écrit ce programme:
x = 0
for i in range(100):
print(2 * x)
x += 1
Simple et efficace, moi je trouve ça émouvant ! D'autant que cette méthode où on modifie à chaque répétitions la variable est assez générale !
Nous pouvons aussi mettre des conditions dans les boucles itératives, en respectant l'indentation de quatre espaces. Ainsi, voilà un programme qui affiche tous les nombres pairs de 1 à 100. Je ne vais pas prendre le temps de tout expliquer, car je ne suis pas votre nounou et parce que cela est un bon entrainement. En effet, savoir lire des programmes, c'est au moins comprendre les notions qui vont avec.
x = 1
for i in range(99):
if x % 2 == 0:
print(x)
x += 1
Voyons maintenant le deuxième type de boucle que nous allons utiliser: les boucles conditionnelles. Elles ont leurs propres particularités et seront aussi très utile, vous allez le voir.
Prenons un exemple: nous voulons programmer un système de sécurité qui a besoin d'un mot de passe. Le programme va demander d'entrer un mot de passe. Si le mot de passe est correct, il fera un message de bienvenue. Sinon, il va redonner la possibilité d'entrer le mot de passe.
Ici, nous ne savons pas combien de répétitions nous allons faire, l'utilisateur pouvant aussi bien écrire le bon mot de passe du premier coup ou au bout du millième essai (si il l'a oublié ou si ce n'est pas lui). Le programme va devoir demander le mot de passe tant que celui écrit n'est pas le bon. Nous allons devoir répéter l'action tant que le mot de passe n'est pas correct.
Les boucles conditionnelles permettent de répéter une suite d'instructions tant qu'une condition est vraie. Pour les construire, en Python, on écrire ceci:
while condition:
#Suite d'instruction indentée
Ainsi, notre exemple de mot de passe peut s'écrire ainsi:
mot_de_passe = "1234" #Le pire mot de passe du monde !
essai = input("Entrez le mot de passe: ")
while essai != mot_de_passe:
essai = input("Mot de passe invalide. Veuillez réessayer: ")
Tout d'abord, nous allons demander le mot de passe à l'utilisateur. Ensuite, tant que le mot de passe n'est pas bon (inégal au bon mot de passe), nous le demandons. Ainsi, si il le donne du premier coup, l'interpréteur va voir que essai != mot_de_passe est un booléen faux et va donc ne pas exécuter la boucle. Sinon, il l'exécute.
Ces boucles permettent donc de répéter un nombre indéterminé de fois une boucle. Cela est différent des boucles itératives et les rend donc quelquefois indispensables. De plus, les boucles conditionnelles pourraient être utilisées pour répéter un certain nombre de fois un suite d'instructions. Il suffit d'utiliser une variable égale au début à 0, puis de lui ajouter 1 et de vérifier que la variable ne dépasse pas un certain nombre ! On peut ainsi réécrire l'exemple ci-dessus qui écrit "Ping !" 124 fois:
compteur = 0
while compteur < 124:
print("Ping !")
compteur += 1
Néanmoins, les boucles itératives ont leur utilité. Tout d'abord, elles permettent de ne pas créer une variable supplémentaire et de potentiellement s'emmêler les pinceaux sur des gros codes. Les boucles itératives ont aussi bien d'autres avantages, mais que nous verrons plus tard... Il est donc recommandé de ne pas remplacer les boucles itératives par les boucles conditionnelles, mais si vous voulez, vous pouvez le faire, on ne vous tapera pas sur les doigts (au pire, dites que je vous l'ai dit, ça fait une excuse... ^^').
Enfin, un avertissement avec les boucles conditionnelles. En effet, elles ne se terminent que quand la condition devient fausse. Or, si cette condition est toujours vrai, cela peut créer... des boucles qui ne finissent pas ! Si votre condition est toujours vraie, la suite d'instruction sera répété indéfiniment. Vérifiez donc toujours que votre condition puisse devenir fausse à un moment, car cela est une source de problèmes quand on commence à les utiliser... Vous pourrez cependant toujours interrompre des programmes qui bouclent indéfiniment avec Ctrl + C.
Vous pouvez cependant utiliser des boucles infinies quelquefois pour exécuter des programmes sans arrêt. Par exemple, nous pouvons faire un mini-calculateur qui demande toujours un nombre et redonne son carré.
while True:
x = input("Choisissez un nombre: ")
print(x ** 2)
Pour faire une boucle infinie facilement, il suffit d'écrire True dans la condition. En effet, l'interpréteur va alors toujours recevoir True et donc toujours exécuter la boucle. Ça a le mérite d'être clair et donc toutes les boucles infinies volontaires doivent par convention s'écrire ainsi.
Pour répéter un nombre déterminé de fois une suite d'instruction, nous utilisons les boucles itératives. En Python, nous les écrivons comme ceci:
for i in range(nombre_de_répétitions):
...
Il faut indenter de trois espaces la suite d'instructions, comme avec les conditions.
Nous pouvons utiliser des variables et les modifier à chaque tour, ce qui permet par exemple de compter le nombre de tours.
Les boucles conditionnelles, elles, répètent une action tant qu'une condition est vraie. En Python, elles s'écrivent ainsi:
while condition:
...
Elles permettent de répéter un nombre indéterminé de fois, ce qui les différencie des boucles itératives. Elles peuvent même répéter un certain nombre de fois une suite d'instructions en utilisant une variable qui fait office de "compteur", un peu comme les boucles itératives. Cependant, utiliser ces dernières est recommandé et elles comportent d'autres avantages que nous verrons plus tard.
Il y a néanmoins un danger à utiliser des boucles conditionnelles. En effet, il se peut que la condition ne soit jamais fausse, ce qui fait que la boucle est infinie. La manière la plus simple de créer une boucle infinie est de mettre en condition True et les boucles conditionnelles volontairement infinies ont souvent ceci en condition. Cela peut être utile, mais aussi dans certains cas problématique, car le programme ne s'arrêtera pas.
En cas de problème, vous pouvez toujours arrêter un programme en faisant le raccourci Ctrl+C.