Aller au contenu

Opérateurs booléens⚓︎

Certains opérateurs booléens tels que « \(et\) », « \(ou\) » et « \(non\) » existent de façon native en Python. Leurs tables de vérités sont rappelées plus bas.

Le but de cet exercice est d'écrire des fonctions mimant leur fonctionnement en n'utilisant que des tests if...elif...else.

Astuce

On rappelle que si a est un booléen, l'instruction if a == True: peut-être allégée en if a:.

Les seules structures autorisées dans cet exercice sont :

  • les tests simples :
🐍 Script Python
if booleen:
    ...
elif booleen:
    ...
else:
    ...
  • les tests imbriqués :
🐍 Script Python
if booleen_1:
    if booleen_2:
        ...
  • l'utilisation dans les tests de fonction déjà écrites. Par exemple :
🐍 Script Python
if non(booleen):
    ...

Contrainte

Il est donc interdit dans cet exercice d'utiliser les opérateurs booléens natifs de Python : not, and, or. De la même façon on ne comparera pas les valeurs à l'aide de ==, !=, >, ...

On s'interdira de la même façon d'utiliser la bibliothèque operator ainsi que des conversions telles que int(a)...

On demande d'écrire les fonctions suivantes :

  • non prend en argument le booléen a et renvoie False si a vaut True, True s'il vaut False ;
  • et prend en argument les booléens a et b et ne renvoie True que s'ils valent l'un et l'autre True ;
  • ou prend en argument les booléens a et b et renvoie True dès que l'un ou l'autre vaut True (ou les deux) ;
  • ou_exclusif prend en argument les booléens a et b et renvoie True si les deux arguments ont des valeurs différentes ;
  • non_ou prend en argument les booléens a et b et ne renvoie True que s'ils valent l'un et l'autre False. ;
  • non_et prend en argument les booléens a et b et ne renvoie False que s'ils valent l'un et l'autre True.

Exemples

🐍 Console Python
>>> non(True)
False
>>> et(True, False)
False
>>> ou(True, False)
True
>>> ou_exclusif(True, True)
False
>>> non_ou(False, True)
False
>>> non_et(False, True)
True

La table de vérité de cet opérateur est :

a non(a)
False True
True False

La table de vérité de cet opérateur est :

a b et(a, b)
False False False
False True False
True False False
True True True

La table de vérité de cet opérateur est :

a b ou(a, b)
False False False
False True True
True False True
True True True

La table de vérité de cet opérateur est :

a b ou_exclusif(a, b)
False False False
False True True
True False True
True True False

La table de vérité de cet opérateur est :

a b non_ou(a, b)
False False True
False True False
True False False
True True False

La table de vérité de cet opérateur est :

a b non_et(a, b)
False False True
False True True
True False True
True True False
###
# Testsbksl-nlassert non(True) == Falsebksl-nlassert et(True, False) == Falsebksl-nlassert ou(True, False) == Truebksl-nlassert oupy-undexclusif(True, True) == Falsebksl-nlassert nonpy-undou(False, True) == Falsebksl-nlassert nonpy-undet(False, True) == Truebksl-nlbksl-nl# Test supplémentairesbksl-nlfor a, b in ((False, False), (False, True), (True, False), (True, True)):bksl-nl assert non(a) == (not a)bksl-nl assert et(a, b) == (a and b)bksl-nl assert ou(a, b) == (a or b)bksl-nl assert oupy-undexclusif(a, b) == (a ^ b)bksl-nl assert nonpy-undou(a, b) == (not (a or b))bksl-nl assert nonpy-undet(a, b) == (not (a and b))bksl-nlbksl-nl 5/5

def non(a):bksl-nl ...bksl-nlbksl-nlbksl-nldef et(a, b):bksl-nl ...bksl-nlbksl-nlbksl-nldef ou(a, b):bksl-nl ...bksl-nlbksl-nlbksl-nldef oupy-undexclusif(a, b):bksl-nl ...bksl-nlbksl-nlbksl-nldef nonpy-undou(a, b):bksl-nl ...bksl-nlbksl-nlbksl-nldef nonpy-undet(a, b):bksl-nl ...bksl-nlbksl-nlbksl-nl# Testsbksl-nlassert non(True) == Falsebksl-nlassert et(True, False) == Falsebksl-nlassert ou(True, False) == Truebksl-nlassert oupy-undexclusif(True, True) == Falsebksl-nlassert nonpy-undou(False, True) == Falsebksl-nlassert nonpy-undet(False, True) == Truebksl-nlbksl-nldef non(a):bksl-nl if a:bksl-nl return Falsebksl-nl else:bksl-nl return Truebksl-nlbksl-nlbksl-nldef et(a, b):bksl-nl if a:bksl-nl if b:bksl-nl return Truebksl-nl return Falsebksl-nlbksl-nlbksl-nldef ou(a, b):bksl-nl if a:bksl-nl return Truebksl-nl elif b:bksl-nl return Truebksl-nl return Falsebksl-nlbksl-nlbksl-nldef oupy-undexclusif(a, b):bksl-nl return ou(et(a, non(b)), et(non(a), b))bksl-nlbksl-nlbksl-nldef nonpy-undou(a, b):bksl-nl return non(ou(a, b))bksl-nlbksl-nlbksl-nldef nonpy-undet(a, b):bksl-nl return non(et(a, b))bksl-nlbksl-nlbksl-nl# Testsbksl-nlassert non(True) == Falsebksl-nlassert et(True, False) == Falsebksl-nlassert ou(True, False) == Truebksl-nlassert oupy-undexclusif(True, True) == Falsebksl-nlassert nonpy-undou(False, True) == Falsebksl-nlassert nonpy-undet(False, True) == Truebksl-nlbksl-nl

A

Pas de remarques particulières.

Z