Table des matières
Expressions logiques
Exemple
“Un individu est un super-héros s'il a des super-pouvoirs ou des super-gadgets et si ce n'est pas un vilain.”
On identifie ici :
- des booléens :
- “est un super-héros” → SH
- “a des super-pouvoirs” → SP
- “a des super-gadgets” → SG
- “est un vilain” → V
- des opérateurs logiques :
- “ou” → or
- “et” → and
- “ne… pas” → not
On peut reformuler : SH = SP or SG and not V
Décider pour les cas suivants : Batman, Superman, le Joker, Magneto.
Pour l'instant L'expression est ambiguë : Il faudrait clarifier l'ordre dans lequel le calcul est fait, définir des priorités ou mettre des parenthèses.
- SH = (SP or SG) and (not V)
- SH = SP or (SG and (not V))
Dans notre exemple, nous voulons le parenthésage numéro 1
Opérateurs logiques
On peut prouver que les opérateurs or, and et not suffisent à faire tout ce qui est nécessaire. Il faut donc très bien les comprendre.
not
not a est vrai si et seulement si a est faux.
On peut représenter cela sous forme d'un tableau de vérité.
| a | not a |
|---|---|
| False | True |
| True | False |
Il est plus commode d'écrire 0 pour False et 1 pour True :
| a | not a |
|---|---|
| 0 | 1 |
| 1 | 0 |
or
a or b est vrai si et seulement si au moins un parmi a et b est vrai.
On peut représenter cela sous forme d'un tableau de vérité.
| a | b | a or b |
|---|---|---|
| False | False | False |
| False | True | True |
| True | False | True |
| True | True | True |
Il est plus commode d'écrire 0 pour False et 1 pour True :
| a | b | a or b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
On peut généraliser au cas d'un ou à plus de 2 opérandes :
a or b or c or d or ... est vrai si et seulement si au moins 1 des opérandes est vraie.
and
a and b est vrai si et seulement si a et b sont tous les deux vrais.
On peut représenter cela sous forme d'un tableau de vérité.
| a | b | a and b |
|---|---|---|
| False | False | False |
| False | True | False |
| True | False | False |
| True | True | True |
Il est plus commode d'écrire 0 pour False et 1 pour True :
| a | b | a and b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
On peut généraliser au cas d'un ou à plus de 2 opérandes :
a and b and c and d and ... est faux si et seulement si au moins 1 des opérandes est fausse.
Expressions
Comme on peut assembler des + et des - pour former une expression mathématique, on va pouvoir combiner des or, des and et des not pour former une expression logique.
On peut par exemple tester ces expressions en console :
>>> (True or True) and False False >>> True or (True and False) True >>> True or True and False True >>> not ( True and False ) and (False or True and True) True
On décide, par convention, que not a la priorité d'exécution la plus élevée, and vient en second et or est le moins prioritaire. Autrement dit not a and b or c est équivalent à ((not a) and b) or c.
En Python, les opérateurs de comparaison sont prioritaires sur les opérateurs logiques. Ainsi,
(x >= 3) and (x < 10) ⇔ x >= 3 and x < 10
Ce qui permet d'alléger grandement les expressions.
