Vidéo 27 : Boucles for imbriquées

\(\newcommand{\ds}{\displaystyle}\) \(\newcommand{\Frac}{\ds\frac}\) \(\renewcommand{\r}{\mathbb{ R}}\) \(\newcommand{\C}{\mathbb{ C}}\) \(\newcommand{\n}{\mathbb{ N}}\) \(\newcommand{\z}{\mathbb{ Z}}\) \(\newcommand{\Q}{\mathbb{ Q}}\) \(\newcommand{\N}{\mathbb{ N}}\) \(\newcommand{\n}{\mathbb{ N}}\) \(\newcommand{\ol}{\overline}\) \(\newcommand{\abs}[1]{\left| \,{#1} \right|}\) \(\newcommand{\pv}{\;;\;}\) \(\newcommand{\ens}[1]{\left\{ {#1} \right\}}\) \(\newcommand{\mens}[1]{\setminus\left\{ {#1} \right\}}\) \(\newcommand{\Par}[1]{\left({#1}\right)}\)

Vidéo 27 : Boucles for imbriquées

Boucles for imbriquées

Soit à écrire un code Python qui affiche un texte comme le suivant :

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12 13
1 2 3 4 5 6 7 8 9 10 11 12 13 14

Plus précisément, chaque ligne L reprend la ligne précédente K mais L est complétée par l’entier qui suit le dernier entier de la liste affichée dans K.

Noter qu’il y a deux types de répétition d’actions :

  • répétition d’affichage de ligne
  • répétition d’affichage de nombres dans chaque ligne

Un code répondant au problème pourrait être le suivant :

1
2
3
4
for lig in range(1,15):
    for col in range(1,lig + 1):
        print(col, end = " ")
    print()

On constate qu’une boucle for (lignes 2-3) est imbriquée dans une boucle for (lignes 1-4). On dit que :

  • la boucle ligne 1 est la boucle externe ;
  • la boucle ligne 2 est la boucle interne (ou encore la boucle la plus profonde).

La boucle for (ligne 1) contrôle la progression par ligne. Un numéro lig de ligne étant fixée, l’autre boucle for (ligne 2) contrôle la progression de gauche à droite dans la ligne fixée.

Noter à la ligne 3 la présence de l’argument nommé de la fonction print :

end = " "

qui permet

  • d’empêcher le passage à la ligne pendant qu’on affiche les éléments de la \(i^\text{e}\) ligne,
  • de séparer deux nombres par un espace.

Noter aussi ligne 4, l’appel à la fonction print pour séparer deux lignes consécutives de l’affichage.

D’une façon générale, le corps de toute boucle for peut contenir n’importe quel type d’instructions, et en particulier une autre boucle for.