Connaissez-vous la suite de Fibonacci ?
C’est une suite de nombres, commençant par 0 et 1, et dont chaque terme est la somme des deux précédents :
$$ 0 ~~ 1 ~~ 1 ~~ 2 ~~ 3 ~~ 5 ~~ 8 ~~ 13 ~~ 21 ~~ 34 ~~ 55 ~~ 89 ~~ \ldots $$
Pour calculer les termes de cette suite, il faut effectuer des calculs répétitifs :
Répéter de tels calculs peut être long et fastidieux pour nous... mais pas pour notre ordinateur, à condition de lui expliquer comment faire.
Une boucle conditionnelle consiste à répéter un bloc d’instructions tant qu’une condition est vraie.
Pour définir une boucle conditionnelle, on utilise le mot-clé while (tant que) :
Comme pour les fonctions et les conditions, la ligne contenant le mot clé while se termine par :, et les instructions à répéter sont indentées vers la droite (décalées vers la droite).
Prenons un exemple. Essayons de faire compter Python de 1 à 10 avec le programme suivant :
Ça marche, mais si on vous demande de modifier le code précédent pour que Python compte jusqu'à 100, vous conviendrez que c'est long et inutile et surtout répétitif. En programmation, qui dit répétition dit boucle. Dans le code précédent, toutes les instructions se ressemblent, et ne diffèrent que par le nombre affiché. On peut alors demander à Python << Affiche tous les nombres jusqu'à 10 >> de la manière suivante :
Analysons ligne par ligne le code précédent :
On initialise une variable n avec la valeur 1, puisque l'on veut compter à partir de 1. La valeur de la variable n sera modifiée pluseurs fois pour contenir toutes les valeurs entre 1 et 10.
Cette ligne sert à indiquer que les instructions qui suivent seront répétées tant que la valeur de n est inférieure ou égale à 10.
On affiche la variable n. Mais sa valeur n'est pas toujours la même ! Elle est modifiée par la ligne suivante.
Cette ligne est très importante et même indispensable. Sans cette ligne, la valeur de n n'est jamais modifiée, et notre programme affiche toujours la même chose. Or n doit valoir 1, puis 2, puis 3... jusqu'à 10.
Lorsqu'on ajoute 1 à la variable n, on dit qu'on incrémente sa valeur.
Plus grave encore : sans cette ligne, notre programme ne se termine jamais, car si la valeur de n ne change pas, alors la condition n <= 10 est toujours vraie. On aurait alors une boucle infinie. Essayez pour voir :
Et pour compter jusqu'à 100 ? Il suffit juste de modifier quelque chose... À vous de deviner !
Python sait compter jusqu'à de grandes valeurs, mais pas votre navigateur, qui risque de planter... Vous voilà prévenus !
En guise d'entraînement, essayez de deviner ce qu'affichent les 2 programmes suivants :
Une boucle itérative consiste à répéter un bloc d’instructions un nombre de fois fixé à l'avance.
Pour répéter $n$ fois une série d'instructions avec une boucle itérative, on utilise le mot-clé for (pour) et la fonction range :
Par exemple, pour afficher 10 fois << Bonjour >>, on écrira :
Vous avez sans doute remarqué que l'on utilise une variable i dans la boucle. En réalité, l'instruction range(n) retourne la liste des nombres de $0$ à $n-1$. Ainsi, dans notre boucle, la variable i prendra toutes les valeurs comprises entre $0$ et $n-1$.
Une erreur classique est de croire que range(n) retourne la liste des nombres de $1$ à $n$. Mais en informatique, on compte à partir de $0$ et non à partir de $1$ !
La fonction range peut s'utiliser de plusieurs manières différentes :
Pour afficher tous les nombres pairs entre 10 et 30 (inclus), on fait la liste des nombres de 10 à 30 avec un pas de 2 :
À quoi est égale la somme des entiers pairs de 10 à 30 ?
Facile ! Le programme précédent donne la liste de ces valeurs, il ne reste plus qu'à les ajouter :
Bon, c'était facile...
À quoi est égale la somme des entiers pairs de 10 à 3000 ?
C'est plus difficile, et il est impensable d'écrire cette somme comme ci-dessus. Pour calculer une somme de façon itérative, on utilise la méthode suivante :
On utilise plutôt une boucle itérative, parfaitement adaptée ici :
L'instruction somme = somme + i est ainsi répétée pour i égal à 10, puis 12, puis 14, ... jusqu'à 3000.
Au final, notre somme est bien égale à 10 + 12 + 14 + ... + 3000.
Je dispose d'un capital de 100€, qui double tous les ans. Au bout de combien d'années aurais-je plus de 10 000€ ?
Ce calcul peut bien entendu se faire à la main :
Analysons le programme précédent :
On définit le capital de départ, et le nombre d'années écoulées (0 au départ)
Tant que le capital est inférieur à 10 000, on double le capital et on ajoute une année supplémentaire
Une fois la boucle terminée (le capital a dépassé 10 000€), on affiche le nombre d'années nécessaires ainsi que le capital atteint
Au bout de 7 ans, notre capital a donc dépassé les 10 000€ pour atteindre 12 800€.
Au bout de combien d'années notre capital dépasse-t-il 100 000€ ?
Il suffit de modifier le programme précédent... Trouverez-vous la réponse ?