9: Else, and, or, not

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 instruction else est exécutée si C est false
  • vous pouvez combinez des conditions booléennes en utilisant A and B, A or B, et not 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:

Exemple
Calcul du maximum et illustration de else
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

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.

Exercice de code : Valeur absolue
La valeur absolue est définie de la manière suivante: pour un nombre x positif ou nul, la valeur absolue de x est x; pour un nombre négatif, la valeur absolue de x est -x, soit l'opposé de x. Par exemple, la valeur absolue de 5 est et la valeur absolue de -10 est 10. En utilisant if et else, écrivez un programme qui lit un entier comme entrée et qui affiche sa valeur absolue.
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

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 vrai
Comme 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
Exercice de code : Premier, deuxième, troisième
Les abréviations anglais 1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, et 9th sont des adjectifs ordinaux. Ecrivez un programme qui prend un entier x entre 1 et 9 en entrée. Le programme doit afficher l'adjectif ordinal correspondant à x.
Indice: Vous n'avez pas besoin de 9 cas séparés; 4 suffisent.
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

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 fois A et B sont vrais et fausse si un des deux ou les deux sont faux. (Par exemple, vous serez mouillé s'il pleut et que vous avez oublié votre parapluie.)
  • L'expression A or B est vraie si soit A est vraie soit B est vrai et fausse si les deux sont faux. (Par exemple l'école est fermée pendant les vacances ou c'est le weekend.)
  • L'expression not A est vraie si A est faux et fausse si A est vrai. (Par exemple, vous avez faim si vous n'avez pas 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é.

Exemple
Tables de vérité

Comme exemple d'utilisation de and, voici un programme qui convertit des chiffres en lettres avec contrôle d'erreurs.

Exemple
Un exemple qui convertit les chiffres en lettres avec 1=A, 2=B, etc.
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Exercice de code : 26 Lettres
Ecrivez un programme qui fait l'inverse de l'exemple ci-dessus: il prendra un caractère en entrée et affichera le nombre correspondant (entre 1 et 26). Votre programme n'acceptera que les lettres majuscules: affichez non valide si l'entrée n'est pas une des lettres majuscules A, B, ..., Z. IndiceMéthode de comparaison alternative
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Exercice à choix multiple : Loi de De Morgan
Laquelle de ces expressions est équivalente à A or B?
Correct! Voici une façon d'arriver à cette réponse. Tout d'abord, 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 B
Cette 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:

Exercice à choix multiple : Ordre des Opérations
Quelle est la valeur de

A or not B and C
Si (A, B, C) = (False, True, True)? Indice
Correct ! L'ordre des opérations le rend équivalent à
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.