Livre_silo 30 août 2013 16:32 Page 90
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
90
Informatique pour tous
4.2.3 Test avec alternative
On a vu au chapitre 3 qu’il était possible d’obtenir la négation d’un élément du type bool à
l’aide de l’opérateur not. On pourrait penser que cela permet d’exécuter certaines instructions lorsqu’une condition est vérifiée et d’autres quand elle ne l’est pas, avec deux tests.
Par exemple, si l’on voulait ajouter 1 à x quand sa valeur est impaire et la diviser par 2 sinon,
on pourrait écrire :
if x % 2 == 1:
x = x + 1
if not(x % 2 == 1):
x = x // 2
Cependant, cet extrait de programme pose de multiples problèmes. On peut déjà remarquer qu’il est redondant, puisque le programmeur doit écrire deux fois la même condition.
Il est également inefficace : cette condition devra être évaluée deux fois, ce qui ne pose pas
de problème dans l’exemple donné, mais peut prendre un temps de calcul non négligeable
dans d’autres cas.
Enfin et surtout, l’action de ce programme sur l’état n’est pas celui que l’on voulait. En effet,
dans le cas où la valeur de x est impaire, la première instruction conditionnelle ajoute 1 à x.
Dans le nouvel état obtenu, x devient pair. La seconde instruction conditionnelle s’exécute
dans ce nouvel état et la condition not(x % 2 == 1) s’évalue à True. Par conséquent, pour une
valeur initiale impaire de x, le contenu de x est remplacé non pas par x+1 mais par (x+1)//2.
Pour ces trois raisons, on enrichit la syntaxe des tests pour proposer une alternative :
if condition:
bloc_d_instructions_si_la_condition_est_vérifiée
else:
bloc_d_instructions_si_la_condition_n_est_pas_vérifiée
Le programme correct pour l’exemple précédent s’écrit alors :
if x % 2 == 1:
x = x + 1
else:
x = x // 2
SAVOIR-FAIRE Documenter un programme
Dès que l’on écrit un programme de plus d’une dizaine de lignes, il devient indispensable de le rendre parfaitement lisible, pour permettre à un autre programmeur de le
comprendre, ou pour le reprendre soi-même plus tard.
¯
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
90
Informatique pour tous
4.2.3 Test avec alternative
On a vu au chapitre 3 qu’il était possible d’obtenir la négation d’un élément du type bool à
l’aide de l’opérateur not. On pourrait penser que cela permet d’exécuter certaines instructions lorsqu’une condition est vérifiée et d’autres quand elle ne l’est pas, avec deux tests.
Par exemple, si l’on voulait ajouter 1 à x quand sa valeur est impaire et la diviser par 2 sinon,
on pourrait écrire :
if x % 2 == 1:
x = x + 1
if not(x % 2 == 1):
x = x // 2
Cependant, cet extrait de programme pose de multiples problèmes. On peut déjà remarquer qu’il est redondant, puisque le programmeur doit écrire deux fois la même condition.
Il est également inefficace : cette condition devra être évaluée deux fois, ce qui ne pose pas
de problème dans l’exemple donné, mais peut prendre un temps de calcul non négligeable
dans d’autres cas.
Enfin et surtout, l’action de ce programme sur l’état n’est pas celui que l’on voulait. En effet,
dans le cas où la valeur de x est impaire, la première instruction conditionnelle ajoute 1 à x.
Dans le nouvel état obtenu, x devient pair. La seconde instruction conditionnelle s’exécute
dans ce nouvel état et la condition not(x % 2 == 1) s’évalue à True. Par conséquent, pour une
valeur initiale impaire de x, le contenu de x est remplacé non pas par x+1 mais par (x+1)//2.
Pour ces trois raisons, on enrichit la syntaxe des tests pour proposer une alternative :
if condition:
bloc_d_instructions_si_la_condition_est_vérifiée
else:
bloc_d_instructions_si_la_condition_n_est_pas_vérifiée
Le programme correct pour l’exemple précédent s’écrit alors :
if x % 2 == 1:
x = x + 1
else:
x = x // 2
SAVOIR-FAIRE Documenter un programme
Dès que l’on écrit un programme de plus d’une dizaine de lignes, il devient indispensable de le rendre parfaitement lisible, pour permettre à un autre programmeur de le
comprendre, ou pour le reprendre soi-même plus tard.
¯
