Dans cette leçon, vous allez apprendre à effectuer des tests booléens complexes de manière élégante en utilisant deux éléments du langage Python:
- après une instruction
if «C»
, une instructionelse
est exécutée siC
est false - vous pouvez combinez des conditions booléennes en utilisant
A and B
,A or B
, etnot A
else
Une tâche courante lorsque l'on écrit des programmes est de vouloir tester des conditions et de faire une chose ou une autre suivant que la condition est vraie ou fausse. Nous avons vu un exemple précédemment où nous voulions déterminer lequel de deux nombres x
, y
était le plus grand et nous avons pour cela utilisé deux instructions if
. Réécrivons le programme en utilisant l'instruction else
:
Plus généralement, on utilise else
à l'aide de la paire de blocks d'instructions:
if «test»: «corps-vrai» # un block indenté else: «corps-faux» # un autre block indentéPython évalue le test. Si le résultat est vrai alors le block corps-vrai est exécuté et si le résultat est faux, alors le block corps-faux est exécuté.
La Philosophie du else
L'instruction else
ne nous donne pas des pouvoirs magiques mais rend le code plus facile à lire, à déverminer et à maintenir à jour. Voici deux extraits de code qui font la même chose:
Version A
if hauteur < 256: print('Montagnes russes interdites') else: print('Bienvenu à bord!') |
Version B
if hauteur < 256: print('Montagnes russes interdites') if hauteur >= 256: print('Bienvenu à bord!') |
Les deux extraits font la même chose et B n'a même pas besoin du else
. Cependant, la plupart des programmeurs seront d'accord de dire que A est meilleur. Par exemple avec A, changer la condition (e.g., 128 au lieu de 256) ne demande qu'un changement alors qu'il en faut deux avec B. De plus, A est compris immédiatement par un lecteur humain, alors qu'avec B il vous faut vérifier et réfléchir si les deux conditions peuvent être vraies ou non en même temps.
Python a une fonction intégrée abs(x) qui calcule la valeur absolue de x . Le "grader" ci-dessus vous empêche de l'utiliser pour cet exercice mais vous pourrez l'utiliser plus tard. |
elif
Python propose une autre instruction, elif
, qui facilite la vérification de plusieurs instructions en une seule fois. La forme la plus simple de elif
est la suivante:
if «test1»: «body1» # exécuté si test1 est vrai elif «test2»: «body2» # exécuté si test1 est faux et test2 est vraiComme vous l'avez peut être deviné,
elif
est la contraction de "else if" (sinon si) et revient au même que de mettre une instruction if à l'intérieur d'un block else. Mais cela abouti à un code plus court et moins d'indentation, ce qui rend votre programme plus facile à lire, déverminer et éditer. De plus, vous pouvez en combiner autant d'instructions elif que vous le souhaitez et même ajouter une instruction else
à la fin:
if «test1»: «body1» # exécuté si test1 est vrai elif «test2»: «body2» # exécuté si test1 est faux et test2 est vrai elif «test3»: «body3» # exécuté si test1 & test2 sont tous les deux faux & test3 est vrai else: # ces deux dernières lignes sont optionnelles «autrement»# exécuté si tous les autres tests sont faux
Opérateurs Booléens: and
, or
, not
Vous pouvez combiner des expressions booléennes en utilisant "and
", "or
", and "not
" ("et", "ou" et "non").
- L'expression
A and B
est vraie si à la foisA
etB
sont vrais et fausse si un des deux ou les deux sont faux. (Par exemple, vous serez mouillé s'il pleutet
que vous avez oublié votre parapluie.) - L'expression
A or B
est vraie si soitA
est vraie soitB
est vrai et fausse si les deux sont faux. (Par exemple l'école est fermée pendant les vacancesou
c'est le weekend.) - L'expression
not A
est vraie siA
est faux et fausse siA
est vrai. (Par exemple, vous avez faim si vous n'avezpas
mangé votre diner.)
Voici un programme qui affiche automatiquement toutes les possibilités. Comme les tables de multiplication que vous connaissez de l'école promaire, ceci s'appelle des tables de vérité.
Comme exemple d'utilisation de and
, voici un programme qui convertit des chiffres en lettres avec contrôle d'erreurs.
A or B
?not (A or B)
n'est vrai que lorsque les deux
A
et B
sont fausses.
Notez également que (not A) and (not B)
n'est vrai que si les deux
not A
et not B
sont vraies,
c.-à-d. que si les deux A
et B
sont fausses.
Donc, nous avons l'égalité suivante:
(not A) and (not B) = not (A or B)Mettez un
not
autour des deux côtés, donc on en déduit
not ((not A) and (not B)) = not (not (A or B))et observez que
not (not X)
toujours égale
X
, alors
not ((not A) and (not B)) = not (not (A or B)) = A or BCette façon de réécrire une expression booléenne est un des lois de De Morgan.
Ordre des Opérations
Les opérateurs booléens ont un "ordre d'opérations" tout comme les opérateurs mathématiques. L'ordre est
NAO: not (précédence haute), and, or (précédence basse)
donc par exemple,
not x or y and z
signifie (not x) or (y and z)
Nous concluons cette leçon avec une courte question sur ce thème:
A or not B and CSi (A, B, C) = (False, True, True)? Indice
A or ((not B) and C)en remplaçant les valeurs, nous avons
False or ((not True) and True)et maintenant, simplifiant une étape à la fois donne
False or ((not True) and True) = False or (False and True) = False or False = False
Quand vous avez terminé, vous êtes prêt pour la prochaine leçon.