Structures conditionnelles⚓︎
À savoir⚓︎
Avec Python, on a les constructions suivantes possibles :
if condition:
action()
Si condition
est évaluée à True
- alors
action()
est exécutée.
if condition:
action()
else:
autre_action()
Si condition
est évaluée à True
- alors
action()
est exécutée, - sinon,
autre_action()
est exécutée.
if condition_1:
action_1()
elif condition_2:
action_2()
elif condition_3:
action_3()
else:
action_autres_cas()
elif
est la contraction deelse if
, pour « sinon si ».- Il peut y avoir autant de blocs
elif
que l'on souhaite. - On peut terminer, par un bloc
else
pour les cas non traités.
Cette construction est utilisée classiquement pour traiter différemment une liste de cas.
Exemples⚓︎
La suite de Syracuse d'un entier \(N>0\) est définie par récurrence, de la manière suivante :
- \(u_0 = N\)
- pour tout entier naturel \(n\) : \(u_{n+1} = \begin{cases}\dfrac{u_n}{2}&\text{si } u_n \text{ est pair,}\\3×u_n + 1&\text{si } u_n \text{ est impair.}\end{cases}\)
On peut définir la fonction terme_suivant
def terme_suivant(u_n):
"Renvoie le terme suivant `u_n` dans une suite de Syracuse"
if u_n % 2 == 0:
return u_n // 2
else:
return 3 * u_n + 1
On peut alors l'utiliser en console :
>>> terme_suivant(7)
22
>>> terme_suivant(22)
11
>>> terme_suivant(11)
34
Dans la console, penser à utiliser la flèche ↑ du clavier pour pouvoir ne modifier que le paramètre.
Répétition d'instructions
On devine rapidement l'intérêt de pouvoir répéter des instructions :
- un nombre choisi de fois, ou alors
- tant qu'une certaine condition est vérifiée.
On verra ceci très bientôt.
Exercice⚓︎
Que dire des scripts suivants ?
- Sont-ils corrects ?
- Sont-ils équivalents ?
- Sont-ils bien écrits ?
if condition_1:
####################
# ##
action_1() ##
# ##
####################
else:
if condition_2:
####################
# ##
action_2() ##
# ##
####################
else:
if condition_3:
####################
# ##
action_3() ##
# ##
####################
else:
####################
# ##
action_0() ##
# ##
####################
if condition_1:
####################
# ##
action_1() ##
# ##
####################
elif condition_2:
####################
# ##
action_2() ##
# ##
####################
elif condition_3:
####################
# ##
action_3() ##
# ##
####################
else:
####################
# ##
action_0() ##
# ##
####################
if condition_1:
####################
# ##
action_1() ##
# ##
####################
elif condition_2:
####################
# ##
action_2() ##
# ##
####################
elif condition_3:
####################
# ##
action_3() ##
# ##
####################
else:
####################
# ##
action_0() ##
# ##
####################
if condition_1:
####################
# ##
action_1() ##
# ##
####################
elif condition_2:
####################
# ##
action_2() ##
# ##
####################
elif condition_3:
####################
# ##
action_3() ##
# ##
####################
else:
####################
# ##
action_0() ##
# ##
####################
Solution
Le script C est incorrect, elif condition_3:
est mal indenté,
le dernier else
également.
Un elif
doit être indenté au même niveau que le elif
précédent ou if
précédent.
Les scripts A, B et D sont équivalents ; oui, techniquement.
Le D est mal écrit, on a le droit d'indenter chaque bloc autant qu'on veut, mais, ici, c'est mal choisi.
Le A est maladroit. On préfère utiliser elif
dans ce cas là.
Le B, voilà la bonne méthode.