SNT / Programmation Python / Séance 4

Les boucles bornées (ou boucles for)

Introduction

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.

Exemple concret

illustration_rs

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 :

Construction d'une boucle bornée

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 :

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.

La fonction 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) :

Exemples :

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]

Boucles bornées avec la fonction 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 :

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)
  1. Quel est le bloc d'instructions répété dans la boucle for ?
  2. Combien de fois est-il répété ?
  3. Combien de valeurs sont affichées au cours de l'exécution de ce programme ?
  4. Exécutez ci-dessous le code ligne par ligne en appuyant sur le bouton 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.

  1. Quel est le bloc d'instructions répété dans la boucle for ? Combien de fois est-il répété ?
  2. Expliquez pourquoi il n'y a qu'une seule valeur qui s'affiche dans la console si on exécute le code ?
  3. Recopiez et complétez le tableau ci-dessous avec les valeurs des variables i, a et b à chaque tour de boucle.
  4. i a b
    1 5
    0 ... ...
    ... ... ...
    ... ... ...
  5. Quelle est la valeur finale de la variable b ?
  6. Exécutez ci-dessous le code ligne par ligne en appuyant sur le bouton Next > pour voir l'évolution des variables. Vous pourrez ainsi vérifier vos réponses aux questions précédentes.
  7. Écrivez ce code, sans faire un copier-coller, dans l'éditeur ci-dessous (c'est pour vous entraîner à écrire le code vous-même !). Exécutez ensuite le code et vérifiez ce qu'il produit.

A faire n°3

illustration

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.

  1. Cliquez sur le bouton "Afficher la vue graphique" sous la console puis exécutez le code pour voir la figure construite par la fonction carre.

    Cela peut éventuellement prendre quelques secondes lors de la première exécution, le temps que le module turtle soit importé.

  2. Vous avez dû constater que l'on doit répéter plusieurs fois les mêmes instructions. Modifiez le code de la fonction carre pour dessiner le carré en utilisant une boucle for (et ainsi réduire le nombre de lignes écrites).
  3. Créez une fonction triangle qui construit un triangle en utilisant une boucle for.
  4. Bonus (à faire une fois que tous les exercices sont faits) : créez une une fonction octogone qui dessine un octogone en utilisant une boucle for.

A faire n°4

illustration

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.

  1. Remplacez les ??? par les bonnes instructions.
  2. Inspirez-vous de l'exemple concret si nécessaire.

  3. Exécutez le programme puis appelez la fonction pour connaître le nombre d'utilisateurs en 2025. (Vous pouvez vérifier en faisant le calcul vous-même).
  4. Quelle modification faut-il faire dans ce code pour connaître le nombre d'utilisateurs en 2030 ? Faites-le. Combien vaut-il ?
  5. Plus difficile : Modifiez la fonction 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.

Exercices bilan

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

la grille du jeu Alien Python

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.

  1. Quelles sont les valeurs affichées dans la console lors de l'exécution de chacun des programmes ci-dessous ? Attention, il faut répondre sans exécuter le code !
    • Programme 1 :
      for i in range(5):
          print(i)
      
    • Programme 2 :
      for k in range(4, 8):
          print(k)
      
    • Programme 3 :
      for ind in range(10, 30, 4):
          print(ind)
      
  2. Utilisez ensuite l'éditeur Basthon pour écrire et exécuter les trois programmes précédents, et vérifier vos réponses.