1.6. Structures de contrôle

Présentation des structures de contrôle : Conditions, branchements et boucles

# Afficher la table des matières

from jyquickhelper import add_notebook_menu
add_notebook_menu()
run previous cell, wait for 2 seconds

1.6.1. Test : if - elif - else

La syntaxe Python pour l’exécution conditionnelle du code utilise les mots-clés if, elif (else if), else :

Instruction1 = False
Instruction2 = False

if Instruction1:
    print("Instruction1 est vrai")
    
elif Instruction2:
    print("Instruction2 est vrai")
    
else:
    print("Instruction1 et Instruction2 sont toutes les deux False")
Instruction1 et Instruction2 sont toutes les deux False

Remarque : être très attentif sur la gestion des indentations car la fin d’indentation signifie la fin d’un bloc de commandes

L’étendue d’un bloc de code est définie par le niveau d’indentation (habituellement une tabulation ou quatre espaces blancs). Cela signifie qu’il faut faire attention à indenter votre code correctement, sinon vous obtiendrez des erreurs de syntaxe.

Instruction1 = Instruction2 = True

if Instruction1:
    if Instruction2:
        print("l'Instruction1 et l'Instruction2 sont toutes les deux True")
l'Instruction1 et l'Instruction2 sont toutes les deux True
# Mauvaise indentation!
if Instruction1:
    if Instruction2:
    print("l'Instruction1 et l'Instruction2 sont toutes les deux True")  # Cette ligne n'est pas correctement indentée
  File "/var/folders/2b/cj2pm60x61s5qlxpmr7g7km00000gn/T/ipykernel_6795/510671156.py", line 4
    print("l'Instruction1 et l'Instruction2 sont toutes les deux True")  # Cette ligne n'est pas correctement indentée
    ^
IndentationError: expected an indented block
Instruction1 = False 

if Instruction1:
    print("Afficher si Instruction1 est True")
    
    print("Encore à l'intérieur du bloc if")
if Instruction1:
    print("Afficher si Instruction1 est True")
    
print("Maintenant à l'extérieur du bloc if")
Maintenant à l'extérieur du bloc if
##### Syntaxe compacte d'une assignation conditionnelle

Exemple :

x,y = 10, 6
if x < y:
    minimum = x
else:
    minimum = y

minimum
6

Python offre une syntaxe abrégée (inspirée du C) pour faire ceci :

minimum = x if x < y else y
minimum
6

1.6.2. Boucles

En Python, les boucles peuvent être programmées de différentes façons. Il y a deux types de boucles, la boucle for parcourt un ensemble, la boucle while continue tant qu’une condition est vraie.

La plus courante est la boucle for, qui est utilisée avec des objets itérables, comme des listes. La syntaxe de base est :

1.6.2.1. Boucle for :

for x in [1,2,3]:
    print(x)
1
2
3
for i in range (4) :    # Par défaut range commence à 0
    print(i, end =" ")
0 1 2 3 

Note : - range (4) génère une liste de 0 à n-1 donc, ne comprend pas 4! Syntaxe générale de range : range(start, stop, step) - la propriété end = ” ” dans la fonction print permet de rester sur la même ligne lors de l’affichage

Pour itérer sur les paires clé-valeur d’un dictionnaire:

for cle, valeur in mois.items():
    print(cle + " = " + str(valeur))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/var/folders/2b/cj2pm60x61s5qlxpmr7g7km00000gn/T/ipykernel_5191/576506978.py in <module>
----> 1 for cle, valeur in mois.items():
      2     print(cle + " = " + str(valeur))

NameError: name 'mois' is not defined

Parfois, il est utile d’avoir accès aux indices des valeurs lors de l’itération sur une liste. Nous pouvons utiliser la fonction enumerate pour cela :

for idx, x in enumerate(range(-3,3)):
    print(idx, x)
0 -3
1 -2
2 -1
3 0
4 1
5 2

1.6.2.1.1. Listes en Compréhension

La liste en compréhension permet d’éviter une écriture en boucle explicite et rend l’exécution plus rapide

L = [x ** 2 for x in range (0 ,5)]
print (L)
[0, 1, 4, 9, 16]

est la version courte de :

L =list()
for x in range (0, 5):
    L.append (x ** 2)
print (L)
[0, 1, 4, 9, 16]

1.6.2.2. Boucle while :

Parfois, on ne sait pas à l’avance combien de fois on veut exécuter un bloc d’instructions. Dans ce cas, il vaut mieux utiliser une boucle while dont la syntaxe est:

'''
while CONDITION:
    INSTRUCTION 1
    INSTRUCTION 2
    ...
    INSTRUCTION n
'''
'\nwhile CONDITION:\n    INSTRUCTION 1\n    INSTRUCTION 2\n    ...\n    INSTRUCTION n\n'

Le bloc d’instruction est exécuté (au complet) tant que la condition est satisfaite. La condition est testée avant l’exécution du bloc, mais pas pendant. C’est donc toutes les instructions du bloc qui sont exécutées si la condition est vraie. Par exemple, on peut afficher les puissances de 5 inférieures à un million avec une boucle while :

a = 1
while a < 1000000:
    print(a)
    a = a * 5
1
5
25
125
625
3125
15625
78125
390625
ct =2
while ct <= 8:
    print(ct , end =" ")
    ct = ct + 2
2 4 6 8 

1.6.3. Interruptions de boucles avec break et continue

  • La commande break permet d’interrompre une boucle for ou while en cours:

for i in range(10):
    if i == 5:
        break
    print(i)
0
1
2
3
4

On remarque que les valeurs plus grandes que 4 n’ont pas été affichées par la fonction print.

  • La commande continue permet de continuer le parcours d’une boucle à la valeur suivante :

for i in range(10):
    if i == 5:
        continue
    print(i)
0
1
2
3
4
6
7
8
9

On remarque que la valeur 5 n’a pas été affichées par la fonction print.