Aller au contenu

Chapitre 2.5 - Les opĂ©rateurs boolĂ©ens⚓

image

En 1847, George Boole invente une algÚbre pour formaliser la logique. Il définit trois opérateurs de base (et, ou, non), qui vont permettre de traiter tous les problÚmes de logique.

Crédit : Public domain, via Wikimedia Commons.

I. Exemples de propositions et opĂ©rateurs de bases⚓

Exemple

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée

Une proposition peut ĂȘtre vraie ou fausse

Vrai : True ou 1
Faux : False ou 0

Donner la valeur de vérité des propositions a et b

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée

Solution

a est une proposition fausse (False ou 0)
b est une proposition vraie (True ou 1)

Opérateur ou

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée
a ou b est une proposition ...

Notations

On peut noter a or b, ou a \(\vee\) b (correspond au symbole \(\cup\))

Solution

a ou b est une proposition vraie (True ou 1)

Opérateur et

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée
a et b est une proposition ...

Notations

On peut noter a and b, ou a \(\wedge\) b (correspond au symbole \(\cap\))

Solution

a et b est une proposition fausse (False ou 0)

Opérateur non

a : Au self, il y a des frites tous les jours
b : Il est interdit de fumer dans le lycée
non a : ...
non b : ...

Notations

On peut noter not a ou \(\neg\)a

Solution

non a : Il existe au moins un jour sans frites au self
non b : Il est permis de fumer au lycée
non a est une proposition vraie
non b est une proposition fausse

Le chat

Crédit : Philippe Geluck

II. Tables de vĂ©ritĂ©s⚓

On jette deux dés

Des propositions peuvent ĂȘtre vraies ou fausses.
Par exemple : on jette deux dés.
x : le résultat du premier dé est pair
y : le résultat du deuxiÚme dé est pair

Dessiner sur votre cahier l'arbre de toutes les possibilités.

Solution

arbre

Présentation des tables de vérités

La présentation usuelle reprend l'ordre trouvé avec l'arbre ci-dessus :

  • Pour une seule proposition x:
x ...
0 ...
1 ...
  • Pour deux propositions x et y
x y ...
0 0 ...
0 1 ...
1 0 ...
1 1 ...
Table de vérité de l'opérateur non

Compléter la table de vérité

\(x\) \(\overline{x}\)
0 ...
1 ...
Solution
\(x\) \(\overline{x}\)
0 1
1 0
Table de vérité de l'opérateur ou

Compléter la table de vérité

x y x \(\vee\) y
0 0 ...
0 1 ...
1 0 ...
1 1 ...
Solution
x y x \(\vee\) y
0 0 0
0 1 1
1 0 1
1 1 1

parallele

On peut faire l'analogie avec des interrupteurs en parallĂšle.

Table de vérité de l'opérateur et

Compléter la table de vérité

x y x \(\wedge\) y
0 0 ...
0 1 ...
1 0 ...
1 1 ...
Solution
x y x \(\wedge\) y
0 0 0
0 1 0
1 0 0
1 1 1

serie

On peut faire l'analogie avec des interrupteurs en série.

Remarque

On peut écrire toutes les tables de vérités en remplaçant les 0 par des F (pour Faux), et les 1 par des V (pour Vrai)

III. Exemples d’expressions boolĂ©ennes :⚓

1. non (a et b)⚓

non (a et b)

Démontrer en utilisant des tables de vérité que les expressions booléennes suivantes sont équivalentes :

  • not (a and b)
  • not a or not b

Pour cela recopier et remplir les tables de vérités suivantes :

a b a et b non (a et b)
... ... ... ...
... ... ... ...
... ... ... ...
... ... ... ...
a b non a non b (non a) or (nonb)
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
Solution
a b a et b non (a et b)
0 0 0 1
0 1 0 1
1 0 0 1
1 1 1 0
a b non a non b (non a) or (nonb)
0 0 1 1 1
0 1 1 0 1
1 0 0 1 1
1 1 0 0 0

Les derniĂšres colonnes de ces deux tableaux sont identiques, ce qui prouve l'Ă©quivalence.

2. non (a ou b)⚓

non (a ou b)

Démontrer en utilisant des tables de vérité que les expressions booléennes suivantes sont équivalentes :

  • not (a or b)
  • not a and not b

Pour cela recopier et remplir les tables de vérités suivantes :

a b a ou b non (a ou b)
... ... ... ...
... ... ... ...
... ... ... ...
... ... ... ...
a b non a non b (non a) and (nonb)
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
... ... ... ... ...
Solution
a b a ou b non (a ou b)
0 0 0 1
0 1 1 0
1 0 1 0
1 1 1 0
a b non a non b (non a) et (nonb)
0 0 1 1 1
0 1 1 0 0
1 0 0 1 0
1 1 0 0 0

Les derniĂšres colonnes de ces deux tableaux sont identiques, ce qui prouve l'Ă©quivalence.

Remarque : ces deux propriétés sont connues sous le nom de lois de De Morgan.

IV. Un opĂ©rateur supplĂ©mentaire : xor⚓

Fromage ou dessert ?

Lorsqu’au restaurant on vous demande « fromage ou dessert ? », quels sont les possibilitĂ©s auxquelles vous avez le droit ?

Solution

On peut choisir soit le fromage, soit le dessert, mais pas les deux.

Il s’agit du « ou » exclusif, notĂ© xor.

Exemple du jardinier

Un jardinier doit Ă©laguer tous les arbres qui mesurent plus de 10 mĂštres ou qui ont plus de 10 ans. Peut-il tailler des arbres qui mesurent plus de 10 mĂštres et ont plus de 10 ans ?

Solution

Il peut Ă©videmment tailler des arbres qui mesurent plus de 10 mĂštres et ont plus de 10 ans.

Il s’agit du « ou » inclusif, notĂ© or.

Table de vérité de l'opérateur xor

Recopier et compléter la table de vérité

x y x xor y
... ... ...
... ... ...
... ... ...
... ... ...
Solution
x y x xor y
0 0 0
0 1 1
1 0 1
1 1 0

V. Variables boolĂ©ennes et Python⚓

1. Les variables boolĂ©ennes⚓

Tester en console

Dans la console saisir les lignes suivantes, une par une en exécutant entre chaque (ne pas copier/coller) :

Python Console Session
>>> 3 == 5
>>> 3 == "3"
>>> 3 < 5
>>> 3 != 5

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Des variables booléennes

Souvent les variables booléennes sont le résultat de tests :

Dans la console saisir les lignes suivantes, une par une en exécutant entre chaque (ne pas copier/coller) :

Python Console Session
>>> a = -3**2 == -9
>>> type(a)
>>> a
>>> a = (-3)**2 == -9
>>> a

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

2. Python et les opĂ©rateurs⚓

Les booléens en Python

En Python, les booléens peuvent prendre les valeurs True et False.

Les opérations booléennes de bases sont and, or et not.

Tester en console

Dans la console saisir :

Python Console Session
>>> True and False
>>> True or False
>>> not True

Vous pouvez ajouter vos propres essais 😊.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Les priorités

Comme pour les opérations mathématiques, il y a des priorités sur les opérations booléennes.

Dans la console saisir les lignes suivantes, une par une en exécutant entre chaque (ne pas copier/coller) :

Python Console Session
>>> True or True and False
>>> (True or True) and False
>>> True or (True and False)

Vous pouvez ajouter vos propres essais 😊.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Les priorités

Le and est prioritaire sur le or. De mĂȘme, not est prioritaire sur les autres opĂ©rations.

Tester les priorités

Dans la console saisir les lignes suivantes, une par une en exécutant entre chaque (ne pas copier/coller) :

Python Console Session
>>> not False and False
>>> not (False and False)
>>> (not False) and False

Vous pouvez ajouter vos propres essais 😊.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Attention

Pour Ă©viter toute confusion, il est vivement recommandĂ© d’utiliser des parenthĂšses.

3. Exemples⚓

Question 1

Expliquer pourquoi l’expression 3 == 3 or x == y est vraie pour toute valeur de x et de y.

Solution

3 == 3 est évaluée à True. True or True et True or False sont évaluées à True.

Donc quelle que soit la valeur de vérité de x == y l'expression est évaluée à True

Question 2

Expliquer pourquoi l’expression 1 == 2 and x == y est fausse pour toute valeur de x et de y.

Solution

1 == 2 est évaluée à False. False and True et False and False sont évaluées à False.

Donc quelle que soit la valeur de vérité de x == y l'expression est évaluée à False.

VI. CaractĂšre sĂ©quentiel de certains opĂ©rateurs boolĂ©ens.⚓

Python paresseux

Lorsque Python Ă©value une expression boolĂ©enne, il le fait de façon paresseuse. C’est Ă  dire que si la partie gauche d’un or est vraie, il n’évalue pas la partie droite. De mĂȘme si la partie gauche d’un and est fausse, la partie droite n’est pas Ă©valuĂ©e.

Tester les Ă©valuations paresseuses

Dans la console saisir :

Python Console Session
>>> x = 0
>>> x == 0 or 0 < 1/x < 1
>>> x !=0 and 0 < 1/x < 1

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Diviser par 0 ?

Si la division 1/x Ă©tait Ă©valuĂ©e, il y aurait une erreur, puisque l’on ne peut pas diviser par 0.

Python paresseux

Dans les deux cas, l’évaluation n’est pas faite puisque le rĂ©sultat de l’expression a dĂ©jĂ  pu ĂȘtre dĂ©terminĂ© grĂące Ă  la partie gauche.

VII. Exercices⚓

Exercice 1

Déterminer la table de vérité de : a ou (non b)

Solution
a b non b a ou (non b)
F F V V
F V F F
V F V V
V V F V
Exercice 2

Déterminer la table de vérité de : (non a) et b

Solution
a b non a (non a) et b
F F V F
F V V V
V F F F
V V F F
Exercice 3 Ă  utiliser pour les exercices suivants

Faire un arbre de toutes les possibilitĂ©s avec trois propositions a, b et c comme nous l’avons fait en cours pour deux propositions.

Solution

arbre

Exercice 4

Déterminer la table de vérité de : (a ou b) et c

Solution
a b c a ou b (a ou b) et c
F F F F F
F F V F F
F V F V F
F V V V V
V F F V F
V F V V V
V V F V F
V V V V V
Exercice 5

Déterminer la table de vérité de : (a et b) ou c

Solution
a b c a et b (a et b) ou c
F F F F F
F F F F V
F V F F F
F V V F V
V F F F F
V F V F V
V V F V V
V V V V V
Exercice 6

DĂ©montrer que a xor b est Ă©quivalent Ă  : (a ou b) et (non (a et b))

Solution
a b a xor b
F F F
F V V
V F V
V V F
a b a ou b a et b non (a et b) (a ou b) et (non(a et b))
F F F F V F
F V V F V V
V F V F V V
V V V V F F
Exercice 7

⌛ Ne faire cet exercice qu'aprĂšs avoir terminĂ© l'Ă©tude des fonctions en Python.

Ecrire la fonction et_logique qui prend en paramĂštres deux entiers a et b valant 0 ou 1. Cette fonction renvoie a et b.

Contrainte

Utiliser exclusivement le « matériel » Python suivant : def, if, elif, else, ==, return.

Exemple

Python Console Session
>>> et_logique(0, 1)
0
>>> et_logique(0, 0)
0
>>> et_logique(1, 1)
1

Compléter le script ci-dessous (observer les affichages de tests):

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier
Évaluations restantes : 5/5

.128013(og)5rh36a v,c8lS/ekm=4p9qnib1:y-2ut_dTPf7s0050M0t0K0k0C0q0R0l0o0q0k0R0R0w010K0C0y010406050R0J0v0v0k0g0G040r0c0q0J0-0c0B050s0@0_0{0}0=0y04051d161g0s1d0=0M0C0m0#0%0)0+0%0B0d0J0k0d0t0H0y0G0K0h140l0h0C0d0h0q1I0h0K0:050W0D0q0t1p0(0*011H1J1L1J0K1R1T1P0K0g1e1D0#100R0y0k0B0+0I011V1r010P0Y0t0B0k0v0t1P1;1?1{1X1~1T21230:0a0l0O0g0c0y0c0R0C130B0l0U1/0g0g0t0o2o16260B1e0s1D2B1+1-1,1Q0M281s0C0B202l1P1m1o0$1W2L2N0B0c2R1P0y2u1e2z2B2(0?1=2p2T1|2X0g0`0q1P0k1G2u0P0+030L0L0o2Y0t1L2W0c0H0Q0H0E0:0l0E160k2)2,0;2+272.1X2:2=2@2_0t2{012}2 31332O360H1_040l0I3d3f1?3h2z2K013m0k2?1e2^0h2`2|2~300U3w2X3y0i3a0i3E2y3g0=3I3k0+3L3N053P3R3s3T3v2M3x370x3a0x3$173(3i2-1q3l0c2;3M3o3Q3q3S3u3V3^3X370f3a0f3~2(3)2,3J3-483;3t3U324e35370j3a0j4k403*433,453n3O3p3r4s3@343y0Q3a0Q4B3G4m3j4E3K4G474I494K3?4d4N370p3a0p4S2A4U422U4X463.3:4a3=4c4u4)0H0z3a0z4.3H4n3+4?4H3/4J4b4t3W4w380S0:0E0S534:4o4Y4^5a4{5c4v3y0E39045u5k415m4@4q4`4L4(3_383A0E3D0s3e3%3G1h2$162R2E0M1-2J564t2Q1n1e2#0t2%3g5N2A054t5(270C0M0+2~2z5t3o5:5=4|5d5^0l2c0t5{5r4~5v3$4D4=0u0:0U0P5*3B5z560B0P0:0V0L0q0c0d0C0A0J0t6d6f4W0/040b6t672/0:0k6z556v0:0n6d0l6u4=0B0:0D6E4V4=6w0e0F6d0=3 5O3I5`015?2,3y3A596#4%4}5G1_5 22616$5|5s376*5L3B0l6~6L6B042u2k0B0R6s6Y2A6K6A1X0c0:0w6J701X0v0C0:5j783h7n5z6,0L5@373Z4I7r635G3Z6;23624M7z1P6|6~6 7b0+69040C6c7n7a6F6M6C7g7K017d040w7f7Q7h0+7j5h6Q4;1|6w6V7n6X2*6!5;6@7t0H3{7w7@6-5}3`1`607D5F4f7`7G3e7I897R6R1|7M7O7V7S716P7$7W7Y7!8g8c7i7k5w7+3J7.6W8t7r7_4h7|836.854h7B6?7~6_0H8A3E8a8N8b7,3l0:7314768o8Q0+8m8W3J7)8s7:8x7}7s6(4x5_8*7y854y8G8C7 0H4y2B887I7%017M2u0K0J0g158k8h8R720t748V8(7p7?5{7_4P8B6@8:5e4P8?9k7E859i3E7;5)9f7^8,0H4+9j8I4~4+9o9C5G9A66970+0o5v030l0N0t0R0K0R8w9e4n8y9y509B6^4~509F9$5G9!9J8p7L6C0)0t0g0K8!6g6j0K6l6n6p6r8t566w6y9W9.018$7m7=9K016w6I96a5a7a06G040e9^4W8m7#2(8P8#8ra840a42p9Y1?5t5g9#9laz816=8@8J5i875.8X8 9:769?al7T046k6m6o6q77a9a5a2ah4=agav8u6HaQ1|8$3ca(a10:akaeaLana+8q7l9VaYaw8*7_5u8.aG64399)aC37b18{aK3J7M1W9=9@a?4o9`9|aV9 a/aia3a}ar7*bn6Sa*bh56a-a#7-a;a_8Y7eao3gaqbx8ra.4l8)9g9y5Jb29p845ebPb69qbT6{5M7Wbd9;aPbw4W6NaS9{aU9~aX9vaaa!bta,bJbz1XacbCa6asb_0+6Tb|a^b(a$b~9d2*0s5-5P5%5R5!160K5Ucf2H2C0k1Scc0s5S6X0U0W0Y0R04.
Exercice 8

⌛ Ne faire cet exercice qu'aprĂšs avoir terminĂ© l'Ă©tude des fonctions en Python.

Ă©crire la fonction ou_logique qui prend en paramĂštres deux entiers a et b valant 0 ou 1. Cette fonction renvoie a ou b.

Contrainte

Utiliser exclusivement le « matériel » Python suivant : def, if, elif, else, ==, return.

a et b sont des variables pouvant prendre les valeurs 0 ou 1.

Exemple

Python Console Session
>>> ou_logique(0, 1)
1
>>> ou_logique(1, 1)
1
>>> ou_logique(0, 0)
0

Compléter le script ci-dessous (observer les affichages de tests):

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier
Évaluations restantes : 5/5

.128013(og)5rh36a v,clS/ekm=4p9qnib1:y-2ut_dPfs0050L0s0J0k0B0p0O0l0o0p0k0O0O0v010J0B0x010406050O0I0u0u0k0g0F040q0c0p0I0*0c0A050r0;0?0^0`0/0x04051a131d0r1a0/0L0B0m0Y0!0$0(0!0A0d0I0k0d0s0G0x0F0J0h110l0h0B0d0h0p1F0h0J0-050T0C0p0s1m0#0%011E1G1I1G0J1O1Q1M0J0g1b1A0Y0}0O0x0k0A0(0H011S1o010N0V0s0A0k0u0s1M1.1:1^1U1{1Q1~200-0a0l0M0g0c0x0c0O0B100A0l0R1,0g0g0s0o2l13230A1b0r1A2y1(1*1)1N0L251p0B0A1}2i1M1j1l0Z1T2I2K0A0c2O1M0x2r1b2w2y2#0:1/2m2Q1_2U0g0@0p1M0k1D2r0N0(030K0K0o2V0s1I2T0c0G0y0G0D0-0D130k2$2)0.2(242+1U2-2/2;2?0s2^012`2|2~302L330G1?040H393b1:3d2w2H013i0k2:1b2=0h2@2_2{2}0R3s2U3u0i0-0i3z2v3c0/3D3g0(3G3I053K3M3o3O3r2J3t340w0-0w3X143Z3e2*1n3h0c2.3H3k3L3m3N3q3Q3:3S340f0-0f3_2#3!2)3E3(433,3p3P2 4932340j0-0j4f3c1e2Z132O2B0L1*2G3$014o2N1k1b2Y0s2!4x3`3B054o4O240B0L0(2{2w3u363J0l4W4Y474p314#1@290s4*4o3R4r351M0r3a3|3E0t0-0R0N3Y3B0l4}4G0A0N0-0c0I0K0p0c0d0B0z0I0s532x563~0(0,040b5l4U3}2R3F0-0k5t5n5w5q0n5t553#5o5x040C5A5H5C0-0e0E5t0/4Q5m3D4)014Z2)3u3w3*4(4X5Y4+4@5#4/1 4;5*4?4q5-2y3a0l5`5G4i570-2r2h0A0O5k5U045|3f5I0c0-0v5F5B1_0u0B375S5M4i5X5Z1:3T3k6m5+5?343U0l4:4=3/4-6u4`5_5{6e1U4 040B5265675v2,5y6d5N1_6a040v6c6L6F0(6g0-0P6k685O045R655T2%5W5)6n0A3u3?4%6r5=6A0G3?6w5/6y486{6@3z5{756M4~0-6J6Q5}5I0A0-5L6X6R1U6T6V7b6(6f6h046$656Y015q6+4g6%2m6r4!4b6q6:6s6{4c6~20704,3;0G4c5^66767R7t7e046011637m6N7j6b7Z3E6!7q6j7s6/4*7B0G4t6^7E6`7M4t7I5:3.717^6C7Q5`7t6H2r0J0I0g127h7c5w7U7W62647x7s0r4T4y4N4A4K130J4D8o2E2z0k1P8l0r4B5T0R0T0V0O04.