Les structures de contrôle¶
Les structures de contrôle permettent de créer des embranchements dans le flot d’exécution d’un programme. Python, comme la plupart des langages de programmation impératifs, prévoit des instructions pour représenter des décisions et des itérations.
L’indentation du code¶
Une structure de contrôle est associée à un bloc de code qui doit être ou non exécuté (structure de décision) ou répété (structure itérative). Comme pour le corps des fonctions, le code associée à une structure de contrôle est indiqué par l’indentation (généralement de quatre espaces supplémentaires à gauche).
Astuce
Une structure de contrôle doit contenir obligatoirement un bloc de code. Si
vous voulez laisser le bloc vide, vous pouvez utiliser le mot-clé pass
.
if a < 0:
pass
Structures de décision¶
L’instruction if¶
La structure de décision if
exécute un bloc de code si l’expression
associée est évaluée à True
.
if 'b' in 'bonjour':
print ("La lettre b est présente dans le mot bonjour")
if 'z' not in 'bonjour':
print ("La lettre z n'est pas présente dans le mot bonjour")
a = 0
if a < 2:
a += 1
if a < 2:
a += 1
if a < 2:
a += 1
if a < 2:
a += 1
print(a)
# affiche 2
Pour simplifier l’écriture, beaucoup de types peuvent directement s’évaluer comme une expression booléenne en python. Par exemple :
une variable ou un paramètre est équivalent à
False
s’il vautNone
un nombre est équivalent à
True
s’il est différent de 0une chaîne de caractères est équivalente à
True
si elle n’est pas la chaîne vide""
une liste, un ensemble, un dictionnaire ou un tuple est équivalent à
True
s’il n’est pas vide
a = None
if not a:
print(a, "est équivalent à False")
a = 1
if a:
print(a, "est équivalent à True")
a = "bonjour"
if a:
print(a, "est équivalent à True")
a = []
if not a:
print(a, "est équivalent à False")
L’instruction else¶
Il est possible d’ajouter un bloc else
qui sera exécuté si la condition
est évaluée à False
:
a = 2
if a % 2:
print(a, "est un nombre impair")
else:
print(a, "est un nombre pair")
L’instruction elif¶
Si on souhaite représenter plusieurs alternatives, il est possible d’utiliser
le mot-clé elif
:
def get_mention(note):
if note < 10:
return "insuffisant"
elif note <= 12:
return "passable"
elif note <= 14:
return "assez bien"
elif note <= 16:
return "bien"
else:
return "trés bien"
Il est possible de créer des expressions booléennes complexes en les combinant
grâce aux mots-clés and
ou or
ou en chaînant les opérateurs de comparaison :
a = 50
b = -2
if 0 <= a <= 100 and a % 2 and b < 2:
pass
L’opérateur ternaire¶
Il est possible d’affecter une variable à partir d’une décision en l’exprimant sur une seule ligne :
a = 1
# msg vaut "impair" si a % 2 est différent de 0 sinon msg vaut "pair"
msg = "impair" if a % 2 else "pair"
Exercice¶
Exercice : comparaison à la moyenne
Écrivez un programme qui demande à l’utilisateur sa taille et son sexe (homme/femme) puis qui indique l’écart en centimètres par rapport à la moyenne en fonction de son sexe. On pourra utiliser comme moyenne 1m75 pour les hommes et 1m65 pour les femmes.
Structures itératives¶
Les structures itératives permettent de répéter un bloc de code.
L’instruction while¶
Avec l’instruction while
, le bloc de code associé est répété tant que la
condition est vraie.
reponse = None
while reponse != "oui":
reponse = input("Voulez-vous arrêter ? (oui/non) ")
Prudence
Si la condition n’est jamais fausse, le bloc se répète à l’infini.
while True:
print("ceci va continuer encore et encore...")
L’instruction for¶
L’instruction for
permet de parcourir (itérer) tous les éléments *
d’une liste.
ma_liste = ["premier", "deuxième", "troisième"]
for element in ma_liste:
print(element)
Dans l’exemple ci-dessus la portée de la variable element
est limitée
au bloc de code associé à l’instruction for
. La variable element
prend
successivement la valeur des éléments de la liste.
Il est également possible de parcourir tous les caractères d’une chaîne de caractères :
message = "Hello"
for l in message:
print("caractère : ", l)
# Affiche :
# caractère : H
# caractère : e
# caractère : l
# caractère : l
# caractère : o
Note
De manière plus générale, il est possible de parcourir une séquence à l’aide
de l’instruction for
. Nous verrons dans les chapitres suivants d’autres
types de séquence : le n-uplet (tuple), l’ensemble (set) et le dictionnaire
(dict).
La fonction range¶
La fonction range
permet de parcourir une liste de nombres. La méthode
accepte :
un paramètre pour indiquer la borne supérieure (en commençant la liste à 0 et sans inclure la borne supérieure)
for i in range(5): print(i) # Affiche # 0 # 1 # 2 # 3 # 4
deux paramètres pour indiquer l’intervalle avec le début et la fin (exclue)
for i in range(3, 5): print(i) # Affiche # 3 # 4
trois paramètres pour indiquer l’intervalle avec le début, la fin (exclue) et le pas d’incrément entre chaque valeur
for i in range(1, 20, 2): print(i) # Affiche # 1 # 3 # 5 # 7 # 9 # 11 # 13 # 15 # 17 # 19
Il est possible de donner un pas négatif pour obtenir une suite décroissante :
for i in range(5, 0, -1): print(i) # Affiche # 5 # 4 # 3 # 2 # 1
Interrompre un bloc d’itération¶
Il est possible d’utiliser les mots-clés break
et
continue
pour interrompre l’exécution d’un bloc d’itération.
break
interrompt immédiatement le bloc et le flot d’exécution sort de la boucle et reprend après le bloc.
while True: if input("Voulez-vous arrêter ? (oui/non) ") == "oui": break print("C'est fini.")
continue
interrompt immédiatement le bloc et on passe à l’itération suivante.
for l in "Python": if l in "aeiouy": continue print(l)
Structure itérative avec else¶
Il est possible d’utiliser une clause else
après un
while
ou un for
.
Cette clause est exécutée lorsque l’expression de la condition while
est
fausse ou dès que la fin de la séquence à parcourir avec l’instruction for
est atteinte.
L’intérêt du bloc else
réside dans le fait qu’il n’est pas exécuté si
l’itération a été interrompue par un break
.
for i in range(10):
if input("choisissez-vous le nombre %d ? (oui/non) " % i) == "oui":
break
else:
print("il fallait choisir un nombre... dommage")
Exercice¶
Exercice : calcul de la moyenne
Écrivez un programme qui demande à l’utilisateur de saisir une suite de nombres jusqu’à ce qu’il appuie directement sur Entrer.
Puis le programme affiche le tableau des chiffres donnés et ensuite le programme calcule et affiche la moyenne.
Exercice : le code de César
Le code de César est un algorithme de chiffrement classique, utilisé par Jules César dans ses correspondances secrètes. Il se base sur le principe du décalage. Une lettre est remplacée par son équivalent dans l’alphabet en effectuant un décalage. Le programme ci-dessous utilise un décalage de 23. Cela donne comme équivalence :
|
|
|
Ainsi la phrase :
In cryptography, a Caesar cipher is one of the simplest and most widely known encryption techniques.
sera encodée avec un décalage de 23 comme ceci :
Fk zovmqldoxmev, x Zxbpxo zfmebo fp lkb lc qeb pfjmibpq xka jlpq tfabiv hkltk bkzovmqflk qbzekfnrbp.
Écrivez un programme qui demande à l’utilisateur d’entrer une phrase. Puis le programme doit afficher la phrase chiffrée avec un décalage de 23 lettres.
Exercice : le code de César (pythonique)
Écrivez à nouveau le programme précédent mais en utilisant la fonction
str.maketrans()
pour créer une table de traduction. Utilisez ensuite
la méthode str.translate()
pour chiffrer la phrase saisie par
l’utilisateur.
Vous pouvez trouver un exemple d’utilisation dans ce tutoriel.