Boucles imbriquées

5.3 Boucles imbriquées

Objectifs d'apprentissage

À la fin de cette section, vous devriez être capable de :

  • Implémenter des boucles while imbriquées.
  • Implémenter des boucles for imbriquées.

Boucles imbriquées

Une boucle imbriquée (nested loop) comporte une ou plusieurs boucles à l'intérieur du corps d'une autre boucle. Les deux boucles sont appelées boucle externe (outer loop) et boucle interne (inner loop). La boucle externe contrôle le nombre d'exécutions complètes de la boucle interne. Il peut exister plus d'une boucle interne dans une boucle imbriquée.

Faites le point

Boucles while imbriquées

Exemple 5.3

Rendez-vous disponibles

Considérons l'emploi du temps d'un cabinet médical. Chaque rendez-vous dure 30 minutes. Un programme permettant d'afficher les rendez-vous disponibles peut utiliser une boucle for imbriquée où la boucle externe itère sur les heures et la boucle interne itère sur les minutes. Cet exemple affiche l'heure sous forme d'heures et de minutes dans la plage comprise entre 8h00 et 10h00. Dans cet exemple, la boucle externe itère sur la partie des heures entre 8 et 9, et la boucle interne itère sur la partie des minutes entre 0 et 59.

    hour = 8
    minute = 0
    while hour <= 9:
      while minute <= 59:
        print(hour, ":", minute)
        minute += 30
      hour += 1
      minute = 0

La sortie du code ci-dessus est :

    8 : 0
    8 : 30
    9 : 0
    9 : 30

Concepts en pratique

Ensemble de questions sur les boucles while imbriquées

1.
Étant donné le code suivant, combien de fois l'instruction print s'exécute-t-elle ?
i = 1
while i <= 5:
  j = 1
  while i + j <= 5:
    print(i, j)
    j += 1
  i += 1
  1. 5
  2. 10
  3. 25
2.
Quelle est la sortie du code suivant ?
i = 1

while i <= 2:
  j = 1
  while j <= 3:
    print('*', end = '')
    j += 1
  print()
  i += 1
  1. ******
    
  2. ***
    ***
    
  3. **
    **
    **
    
3.
Quel programme affiche la sortie suivante ?
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
  1. i = 1
    while i <= 4:
      while j <= 4:
        print(i * j, end = ' ')
        j += 1
      print()
      i += 1
    
  2. i = 1
    while i <= 4:
      j = 1
      while j <= 4:
        print(i * j, end = ' ')
        j += 1
      print()
      i += 1
    
  3. i = 1
    while i <= 4:
      j = 1
      while j <= 4:
        print(i * j, end = ' ')
        j += 1
      i += 1
    

Boucles for imbriquées

Une boucle for imbriquée peut être implémentée et utilisée de la même manière qu'une boucle while imbriquée. Une boucle for est une option préférable lorsqu'une boucle est utilisée pour compter à l'aide d'une fonction range(), ou lors de l'itération sur un objet conteneur, y compris dans des situations imbriquées. Ex. : itérer sur les listes d'inscrits de plusieurs cours. La boucle externe itère sur les différents cours, et la boucle interne itère sur les noms figurant dans chaque liste d'inscrits.

Faites le point

Boucles for imbriquées

Concepts en pratique

Exercices pratiques sur les boucles imbriquées

4.
Étant donné le code suivant, combien de fois la boucle externe s'exécute-t-elle ?
for i in range(3):
  for j in range(4):
    print(i, ' ', j)
  1. 3
  2. 4
  3. 12
5.
Étant donné le code suivant, combien de fois la boucle interne s'exécute-t-elle ?
for i in range(3):
  for j in range(4):
    print(i, ' ', j)
  1. 4
  2. 12
  3. 20
6.
Quel programme affiche la sortie suivante ?
0 1 2 3
0 2 4 6
0 3 6 9
  1. for i in range(4):
      for j in range(4):
        print(i * j, end = ' ')
      print()
    
  2. for i in range(1, 4):
      for j in range(4):
        print(i * j)
    
  3. for i in range(1, 4):
      for j in range(4):
        print(i * j, end = ' ')
      print()
    

Boucles mixtes

Les deux structures de boucle for et while peuvent également être combinées dans une structure de boucle imbriquée. Ex. : afficher les nombres pairs inférieurs à un nombre donné dans une liste. La boucle externe peut être implémentée à l'aide d'une boucle for qui itère sur la liste fournie, et la boucle interne itère sur tous les nombres pairs inférieurs au nombre donné de la liste à l'aide d'une boucle while.

    numbers = [12, 5, 3]
    
    i = 0
    for n in numbers:
      while i < n:
        print (i, end = " ")
        i += 2
      i = 0
      print()

À vous d'essayer

Afficher un triangle de nombres

Écrivez un programme qui affiche la sortie suivante :

     1 2 3 4 5 6 7 8 9
     1 2 3 4 5 6 7 8
     1 2 3 4 5 6 7
     1 2 3 4 5 6
     1 2 3 4 5
     1 2 3 4
     1 2 3
     1 2
     1

Finish!

À vous d'essayer

Afficher deux triangles

Écrivez un programme qui affiche la sortie suivante à l'aide de boucles while et for imbriquées :

    ****
    ***
    **
    *
    ++++
    +++
    ++
    +