Imbrication de blocs
Les défis des derniers ateliers ajoutaient déjà cette difficulté, un bloc pouvait contenir un autre bloc, par exemple un if dans un for. C'est ce qu'on appelle l'imbrication de blocs.
Indentation
Chaque niveau d'imbrication ajoute un niveau d'indentation. C'est cette indentation qui détermine à quel bloc appartient une instruction, une erreur d'indentation change complètement le comportement du code.
# Version A
for i in range(1, 4):
if i == 2:
print(i, "est le milieu")
print(i)
# Version B
for i in range(1, 4):
if i == 2:
print(i, "est le milieu")
print(i)
Dans la version A, print(i) est indenté au même niveau que le if, il fait donc partie du for et s'exécute à chaque tour de boucle. Dans la version B, print(i) est indenté au niveau du contenu du if, il ne s'exécute donc que lorsque i == 2.
if dans un for
for i in range(1, 6):
if i % 2 == 0:
print(i, "est pair")
else:
print(i, "est impair")
for dans un for
Une boucle peut aussi en contenir une autre, la boucle intérieure recommence entièrement à chaque tour de la boucle extérieure.
for i in range(1, 4):
for j in range(1, 4):
print(i, "x", j, "=", i * j)
print("---")
Ici, pour chaque valeur de i (1, 2, 3), la boucle intérieure fait tous ses tours (j de 1 à 3) avant de passer à la valeur suivante de i.
while dans un if (ou l'inverse)
L'imbrication fonctionne avec n'importe quelle combinaison de blocs, pas seulement if et for.
age: int = 15
majeur: bool = False
if age < 18:
annees_restantes: int = 0
while age < 18:
age += 1
annees_restantes += 1
print("Majeur dans", annees_restantes, "ans")
else:
majeur = True
print("Déjà majeur")
Limiter l'imbrication
Trop de niveaux d'imbrication rendent le code difficile à lire. Lorsque c'est possible, simplifiez:
# Version imbriquée
for i in range(1, 11):
if i % 2 == 0:
if i % 3 == 0:
print(i, "est pair et divisible par 3")
# Version simplifiée, conditions combinées
for i in range(1, 11):
if i % 2 == 0 and i % 3 == 0:
print(i, "est pair et divisible par 3")
Indenter dans VS Code
Plutôt que d'ajouter ou retirer des espaces manuellement, sélectionnez les lignes à modifier (ou placez seulement le curseur sur une ligne) et utilisez:
Tab: augmente l'indentationShift+Tab: réduit l'indentation
Ça fonctionne aussi sur plusieurs lignes sélectionnées en même temps, tout le bloc sélectionné est indenté ou désindenté d'un coup.