Qu'est-ce qu'une boucle ?
Souvent, dans un programme, il est nécessaire de répéter un certain nombre de fois une (ou des) instruction(s). Pour cela, on utilise ce qu'on appelle des boucles. Il en existe de deux sortes :
Dans cette séance, nous étudierons uniquement les boucles bornées. Ces boucles s'appellent également boucles pour ou boucles for.
Le nombre d'utilisateurs d'un nouveau réseau social est égal à 500 000 en janvier 2020. Ce nombre augmente de 5 % par mois, donc est multiplié par 1.05 chaque mois. Si on veut connaître le nombre d'utilisateurs 10 mois plus tard, il faut effectuer 10 fois de suite le même calcul (une multiplication par 1.05). Au lieu d'écrire 10 lignes identiques il est préférable d'écrire une seule fois cette ligne et d'indiquer de l'exécuter 10 fois : pour cela, on utilise une boucle bornée. En Python, au lieu d'écrire le programme
nb_utilisateurs = 500000
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
nb_utilisateurs = nb_utilisateurs * 1.05
on écrirait celui-ci :
nb_utilisateurs = 500000
for indice in range(10):
nb_utilisateurs = nb_utilisateurs * 1.05
On peut vérifier que cela donne bien le même résultat final en l'affichant :
Pour écrire une boucle bornée en Python on utilise le mot-clé for
. Les boucles bornées sont par conséquent très souvent appelées boucles for (ou boucles pour en français).
Le mot-clé for
peut s'utiliser de deux manières :
range()
: pour itérer sur une liste d'entiersin
: pour itérer sur les éléments de certaines "variables"mais nous nous concentrerons dans cette séance uniquement sur la première possibilité avec range()
Nous aborderons l'autre possibilité (avec
in
) dans des séances ultérieures consacrées à d'autres thèmes du programme.
range()
Avant d'écrire des boucles for, il est important de comprendre le rôle de la fonction range()
. Cette fonction permet de générer une liste d'entiers. On distingue trois cas de figure (les deux premiers sont les plus importants) :
range(n)
: permet de générer n entiers, de 0 (inclus) à n exclu, c'est-à-dire : 0, 1, 2, 3, ..., n-1range(n, m)
: permet de générer m-n entiers, de n (inclus) à m exclu, c'est-à-dire : n, n+1, n+2, ..., m-1range(n, m, p)
: permet de générer les entiers de n (inclus) à m exclus mais avec un pas égal à p, c'est-à-dire : n, n+p, n+2p, ...Exemples :
range(10)
génère la liste d'entiers : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 (il y en a 10 en tout, de 0 inclus à 10 exclu).range(2, 10)
génère la liste d'entiers : 2, 3, 4, 5, 6, 7, 8, 9 (de 2 inclus à 10 exclu).range(2, 10, 3)
génère la liste d'entiers : 2, 5, 8 (de 2 inclus à 10 exclu mais en allant de 3 en 3).On peut visualiser la liste d'entiers générés en utilisant list()
, comme ci-dessous :
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(2, 10))
[2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(2, 10, 3))
[2, 5, 8]
range()
La syntaxe la plus simple d'une boucle for
utilisant la fonction range()
est la suivante.
for indice in range(n):
bloc_instructions
Et avec les deux autres cas d'utilisation de la fonction range()
cela donne
for indice in range(n, m):
bloc_instructions
et
for indice in range(n, m, p):
bloc_instructions
Remarques :
range
permet de générer une liste d'entiers comme vu précédemment.indice
prendra successivement (à chaque tour de boucle) les valeurs des entiers générés par la fonction range
.range
.Si on reprend le code de l'exemple concret, l'instruction range(10)
va générer une liste de 10 entiers : 0, 1, 2, ..., 9. La variable indice
va prendre successivement ces dix valeurs et donc le bloc d'instructions dans la boucle for
sera exécuté 10 fois. On peut visualiser cela :
Observez bien les valeurs prises par la variable
indice
à chaque tour de boucle.
À faire n°1
On considère le programme Python suivant.
a = 2
for i in range(4):
a = a + 1
print(a)
for
?Next >
pour voir l'évolution de la variable a
. Vous pourrez ainsi vérifier votre réponse à la question précédente.A faire n°2
On considère le programme Python suivant.
a = 1
b = 5
for i in range(3):
a = 2 * a
b = b + a
print(b)
On va commencer par analyser le code pour le comprendre.
for
? Combien de fois est-il répété ?i
, a
et b
à chaque tour de boucle.i |
a |
b |
---|---|---|
1 | 5 | |
0 | ... | ... |
... | ... | ... |
... | ... | ... |
b
?Next >
pour voir l'évolution des variables. Vous pourrez ainsi vérifier vos réponses aux questions précédentes.A faire n°3
Le module turtle
(tortue) permet de dessiner avec Python.
Dans cet exercice on a écrit une fonction carre
qui permet de dessiner un carré. Voici dans Basthon le code incomplet du programme.
carre
.
Cela peut éventuellement prendre quelques secondes lors de la première exécution, le temps que le module
turtle
soit importé.
carre
pour dessiner le carré en utilisant une boucle for
(et ainsi réduire le nombre de lignes écrites).triangle
qui construit un triangle en utilisant une boucle for
.octogone
qui dessine un octogone en utilisant une boucle for
.A faire n°4
Un réseau social possédait 25 000 utilisateurs en 2021. Sa popularité est telle que l'on estime que son nombre d'utilisateurs va doubler tous les ans.
La fonction users
(signifie utilisateurs en anglais), qui n'a pas de paramètre, doit renvoyer le nombre d'utilisateurs u
du réseau social en 2025.
Voici le code incomplet de la fonction users
.
???
par les bonnes instructions.Inspirez-vous de l'exemple concret si nécessaire.
users
pour qu'elle ait un paramètre annee
et renvoie le nombre d'utilisateurs l'année annee
. Par exemple, l'appel users(2030)
doit renvoyer le nombre estimé d'utilisateurs en 2030.A faire n°5
L'alien est initialement dans la case centrale. Dans quelle case si situe-t-il après l'exécution de chacun des programmes suivants ?
L'instruction
gauche()
équivaut àgauche(1)
, idem pour les autres directions, c'est-à-dire que si on ne passe par de paramètre à ces fonctions, cela équivaut à leur passer la valeur1
.
Programme 1
for loop in range(5) :
gauche()
for loop in range(5) :
haut()
Programme 2
for loop in range(5) :
gauche()
haut()
Programme 3
bas(6)
droite(6)
for loop in range(4) :
haut(3)
gauche(2)
bas(5)
Programme 4
n = 2
a = 3
gauche(a)
bas(2*a)
for i in range(n):
droite(3)
haut(a)
a = a - 1
Programme 5
a = 2
b = 5
c = b - a
d = 1
gauche()
for loop in range(c) :
d = d + 1
haut()
haut()
droite()
droite()
for loop in range(d) :
bas()
A faire n°6
Voici un script Python permettant d'afficher un rectangle dans la console si on l'exécute.
Modifiez le programme de manière à obtenir le même résultat mais en écrivant uniquement 4 lignes.
A faire n°7
Après avoir regardé la vidéo ci-dessus (jusqu'à 1'55"), répondez aux questions qui suivent. Vous vérifierez ensuite en utilisant un éditeur de code Python.
for i in range(5):
print(i)
for k in range(4, 8):
print(k)
for ind in range(10, 30, 4):
print(ind)