Logique avec Python

Découvrir l’algèbre de Boole avec Python
mercredi 5 septembre 2012
par  Nathalie CARRIÉ

 Qu’est-ce qu’un booléen ?
 Expressions booléennes
 Opérateurs relationnels ou de comparaison
 Les 3 opérateurs logiques : not, or, and
 Aller plus loin en logique : implication, équivalence et ou exclusif
(avec application en cryptographie)
 Mini-projet

Qu’est-ce qu’un booléen ?

Voir la page sur Wikipédia

C’est une variable qui ne peux prendre que deux valeurs : VRAI ou FAUX.
En Python, le type d’une telle variable est bool, les deux valeurs possibles sont True ou False.

Expressions booléennes

Une expression booléenne a deux valeurs possibles : True ou False.
Python attribue à une expression booléenne la valeur False si c’est :
 la constante False
 la constante None
 une séquence ou une collection vide
 une donnée numérique de valeur 0. Tout le reste vaut True.

>>> type(False)
<class 'bool'>
>>> type(True)
<class 'bool'>
>>> False
False
>>> bool(None)
False
>>> bool(' ')
True
>>> bool('')
False
>>> bool(0)
False
>>> bool(156.87)
True

Opérateurs relationnels ou de comparaison

Ce sont les opérateurs == ,  != , > , >= , < et <=.

* Illustration pour x = 7 et y = 17

Opérateur Expression Signification Valeur
== x == y Égal 0 (faux)
 != x  != y Non égal 1 (vrai)
> x > y Plus grand que 0
 < x < y Plus petit que 1
>= x >= y Plus grand ou égal à 0
<= x <= y Plus petit ou égal à 1
is x is y est le même objet 0
is not x is not y n’est pas le même objet 1

Cela donne dans le shell de Python :

>>> x=7
>>> y=17
>>> x==y
False
>>> x!=y
True
>>> x>y
False
>>> x>=y
False
>>> x<y
True
>>> x<=y
True
>>> x is y
False
>>> x is not y
True


* Illustration avec deux chaînes de caractères

>>>a='encyclopédie1'
>>>b='encyclopédie2'
>>>a==b
False
>>>len(a)
13
>>>a[:12]==b[:12]
True

Exercices Python

1/ Écrire un programme dont la sortie dans le shell de Python est la suivante :

>>>Entrez un entier naturel : 45
>>>Entrez un second entier naturel : 215
>>>
>>>    x==y a pour type <class 'bool'>
>>>
>>>    x==y est un booléen : il est soit vrai, soit faux
>>>
>>>x est différent de y donc la valeur du booléen est : False

2/ Écrire un programme qui dira si
 un nombre x appartient à l’intervalle [a, b]
 un nombre x appartient à l’intervalle ]a, b[ U [c, d]
 un nombre x appartient à l’intervalle [a, b[ ∩ ]c, d]

3/ Écrire un programme qui affiche Bon anniversaire ! si nous sommes à la date de votre anniversaire, Bonne journée sinon.

Les 3 opérateurs logiques

Voir sur Wikibooks

Les expressions avec un opérateur logique sont évaluées à True ou False.

* Le NON (négation, contraire)
p étant un booléen,
NON p = 1 - p
En Python, on appelle l’instruction not.
(NON p est noté en logique ¬p)

>>> 2<1
False
>>> not 2<1
True

Table de vérité : retrouver celle de NON p à l’aide de Python.

p NON p
VRAI FAUX
FAUX VRAI

Correction en Python :

>>> P=[True,False]
>>> for p in P:
	print(p,not p)
True False
False True


* Le OU logique (disjonction)

p et q étant deux booléens,
p or q
vaut True si p vaut True. Si p est False, l’expression est évaluée à la valeur booléenne de q
(si p est faux, retourne q, sinon retourne p).
(p OU q est noté en logique p ∨ q)

>>> 8<9
True
>>> 2<1
False
>>> (8 < 9) or (2 < 1)
True

Retrouver à l’aide de Python la table de vérité d’une disjonction :

p q p OU q
VRAI VRAI VRAI
VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX

* Le ET logique (conjonction)

p and q
vaut False si p est False. Si p est True, l’expression est évaluée à la valeur booléenne de q
(si p est faux, retourne p, sinon retourne q).
(p ET q est noté en logique p ∧ q)

>>> 8<9
True
>>> 2<1
False
>>> (8 < 9) and (2 < 1)
False
>>> x=36
>>> (x > 13) and (x < 27)
False
>>> x=20
>>> (x > 13) and (x < 27)
True

Retrouver à l’aide de Python la table de vérité d’une conjonction :

p q p ET q
VRAI VRAI VRAI
VRAI FAUX FAUX
FAUX VRAI FAUX
FAUX FAUX FAUX

Aller plus loin en logique : implication, équivalence et ou exclusif

* Implication logique

L’implication logique p ⇒ q est le booléen : NON p OU q

 Dresser à l’aide de Python la table de vérité de l’implication logique.
 Écrire une fonction implique(p,q) en Python qui retourne NON p OU q, p et q étant deux booléens.

* Équivalence logique

L’équivalence logique p ⇔ q est le booléen : (p ⇒ q) ET (q ⇒ p)

 Dresser à l’aide de Python la table de vérité de l’équivalence logique.
 Écrire une fonction equivalence(p,q) en Python qui retourne (p ⇒ q) ET (q ⇒ p), p et q étant deux booléens.


* Le OU exclusif (XOR) :

soit p, soit q, mais pas les deux à la fois.

Le OU exclusif (noté XOR ou ⊕) p XOR q est le booléen : (p OU q) ET NON (p ET q).

Retrouver à l’aide de Python la table de vérité du OU exclusif :

p q p XOR p
0 0 0
0 1 1
1 0 1
1 1 0

Voir une application en cryptographie

Questions :
 Quel serait le message en français envoyé du futur dans le film « Le code Andromède » s’il était codé à l’aide de la clé de 7 bits K=1001110 et du OU exclusif ? [1]
 Écrire une fonction xor(p,q) en Python qui retourne soit p (sous-entendu p Vrai), soit q (sous-entendu q Vrai) mais pas les deux, p et q étant deux booléens.

Récapitulatif :
Voir sur Wikipédia l’article Fonction logique

Mini-projet

À rendre par groupe.

 Écrire un programme Python qui dresse les tables de vérité de NON p, p OU q, p ET q telles qu’elles sont affichées dans ce tableau :

NON p
p OU q
NONp
pOUq
p ET q
pETq

Annexe : formatage d’une chaîne de caractères : lire Apprendre à programmer avec Python3 de Gérard Swinnen page 158 : Formatage des chaînes de caractères.

 Découverte des propriétés de l’Algèbre de Boole
p et q sont deux booléens.
Démontrer à l’aide d’un programme Python que :

  • Règles d’addition (le OU est noté +)
    p + 0 = p
    p + 1 = 1
    p + p = p
    p + NON p = 1
  • Règles de multiplication (le ET est noté . )
    p . 0 = 0
    p . 1 = p
    p . p = p
    p . NON p = 0
  • Commutativité
    p . q = q . p
  • Associativité
    p . ( q + r ) = p . q + p . r
  • Les lois de MORGAN
    p et q sont deux booléens.
    Démontrer à l’aide d’un programme Python que :
    NON (p OU q) = NON p ET NON q
    NON (p ET q) = NON p OU NON q
  • Vérifier que (p ⇒ q) et (NON q ⇒ NON p) ont même table de vérité.
  • Tautologie
    p, q, r sont trois booléens.
    Vérifier que [(p ⇒ q) ET (q ⇒ r)] ⇒ [p ⇒ r] est toujours vrai.
    C’est la base des raisonnements en chaîne en mathématiques.


Commentaires