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 fonctions déjà écrites. Par exemple :

    🐍 Script Python
    if non(booleen):
        ...
    
Contraintes

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 ==, !=, >, etc.

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 arguments les booléens a et b et ne renvoie True que si les deux valent True ;

  • ou prend en arguments les booléens a et b et renvoie False que si les deux valent False ;
  • ou_exclusif prend en arguments les booléens a et b et renvoie False si les deux arguments ont la même valeur et True sinon ;
  • non_ou prend en arguments les booléens a et b et ne renvoie True que si les deux valent False ;
  • non_et prend en arguments les booléens a et b et ne renvoie False que si les deux valent True.
Exemples
>>> 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
1. Opérateur non

Compléter la fonction suivante.

###(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 : 10/10

.128013:ag)R1iTkn/SA=vFmsuhb4;ye2odt c(wr5_P3qplf050C0z0D0c0h0P0s0E0F0P0c0s0s0o010D0h0O010406050s0t0r0r0c0I0y040m0B0P0t0+0B0k0E020c0r0O0x0E0f0z0^0I0N0t0z0s050l0=0@0_0{0:0O041j1q051t0l1t1v1q0:0C0h0p0Z0#0%0)0u0h0d0u0P1J0u0D0.050U0v0P0z1E0$0(011I1K1M1K0D1S1U1Q0D0v0B0C0{1R0I1r0D0u0Z0~0s0O0c0k0)0A011W1G010Q0W0z0k160z1Q1{1}221Y251U280r2a040a0E0L0I0B0O0B0s0h11130S1_0I0I0z0F2v1j2c0k1r0l1@2H0D1=1;1?0C2e0)1M0k272s1Q1B1D0!1X2R0h2T0k1.1C1Q0O2A1r2F2H2/0;1|132Z232(0I0^0P0.0g2E2?0/2=2d2^1Y2`2|0.0A301}322F2Q01370c2}040M3b2G0:3e350)3h3j0w3m3d2?3f3s0.0J3v1s2-1j2X2K0C2O3f0F1.2k0R1C1r2,0z2.313C3L0S3T341F1Y0j0.0S0Q3C3p3!0)0H0.0E3*3x3q3g0Q0.2(0k3;3Z2!010-040G3|2@3,3g0.0c433f400e0b3v060E4g3:3+3~3$040h3)1k314i3=450k47493?404d4p3c4f4h4D33444k0.2A0D0t0I3{4A2G4r3}230j0F0.0q3i0s0z4e4E4j4S0.0z0X4Z4O3Y4G234y4!4D4h4F3f4l4J4L4N2/4Q4.3#4U040i0I1g4e1j3W3S3D590l3G1j0D3I5e2M2I1-1/2K0c1T5b3G1p4-3f2A0r0K0Q0c0j0z0K0u0M0.1b1d1f1h0E4z2;1w321q0n102A0E2,2q2s2u0h120E2x0s0~105X130b3:5M1A1C3f1!1L1N1P5s3?2g27290.2m0m0F0I0,0D2n0y1@123C3R4-2:3U585@454l3(4w453.045+2;4$363^043`6h3~40424,4@3?4u04486w6n0)4b5K314C4g6x6e0.4n3v4~3y4v6C4s6t0.6G4B4=4?6D014_0T4{6O6K4k514W4*4;6J6!6$4K4M6)6;5153554,0:0l6c5a2H5q3F0T0V0X04.
2. Opérateur et

Compléter la fonction suivante.

###(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 : 10/10

.128013,:Cag)R1iTçkn/SAé=vFmsuhb4;ye2odt c(wr5_P3qplf050G0D0H0e0j0T0w0I0J0T0e0w0w0s010H0j0S010406050w0x0v0v0e0M0C040p0F0T0x0/0F0n0I020e0v0S0B0I0h0D0|0M0R0x0D0w050o0_0{0}0 0@0S041n1u051x0o1x1z1u0@0G0j0t0%0)0+0-0y0j0f0y0T1N0y0H0=050Y0z0T0D1I0*0,011M1O1Q1O0H1W1Y1U0H0z0F0G0 1V0M1v0H0y0%120w0S0e0n0-0E011!1K010U0!0D0n1a0D1U1 21261$291Y2c0v2e040a0I0P0M0F0S0F0w0j15170W1}0M0M0D0J2z1n2g0n1v0o1{2L0H1_1^1`0G2i0-1Q0n2b2w1U1F1H0(1#2V0j2X0n1=1G1U0S2E1v2J2L2?0^20172%272,0M0|0T0=0i2I2`0?2_2h2|1$2~300=0E3421362J2U013b0e31040Q3f2K0@3i390-3l3n0A3q3h2`3j3w0=0N3z1w2;1n2#2O0G2S3j0J1=2o0V1G1v2:0D2=353G3P0W3X381J1$0m0=0W0U3G3t3(0-0L0=0I3.3B3u3k0U0=0X3^3%2(010;040K3 2{3:3k0=0e463j430b3z3@3/410n0=0z4c3`430g0c3z060I4u4h3_483*040j3-1o354w402}4a4n48434r4D3g4t4v4Q3747414z4B4g4S3C4l4J414L4s4Q4)4v4Y3`4z2E0H0x0M0n4X4i270m0J0=0k0M1k4(4+4^3)0=4/4;4?4N2K4F4T4_4{040u3m0w0D4s1n3!3W3H5m0o3K1n0H3M5r2Q2M1;1?2O0e1X5o3K1t3$5b1$2E0v0O0U0e0m0D0O0y0Q0=1f1h1j1l0I4M2^1A361u0q142E0I2:2u2w2y0j160I2B0w12145/170c3@5!1E1G3j1(1P1R1T5F3j2k2b2d0=2q0p0J0M0:0H2r0C1{163G3V5F2@3Y5l654-3+0D4C2^523;3?4#2}3|043~586r4K0=456F4,484k044b6K6x420=4f6F5a4Z044m6Q4x4$0=4q504u6L4U0=4W6V6+4H6O6A1$4%6F4P4*6:534A6v4E6|3v4!6!4G6@0=5Y356`4*516#4_540X564@7d3)5d4}4 6_7b6W6s6D0#5i745G0-6^2?7a7p71014.7g4=7i750-4`0=5f7t6)7q4y3}7N7v4d777O4R6R7E4:7G6/7Y5d7M5h5j0o6q5n2L5D1y040d0X0H1Z5+2v2x2z5*0D140I0w000r6d0j5)0r0f3m1g2b6g2B0)0I5L0l5:0_1G217^5X5|1D3S2$48611*1S2f7j0-672m2o6b850S6g0P6i0y6k6K6m4S6o3g057-7Y6t6 8P6R3=045|6w8y3{3}0H6?7x6I8)496=7T4o6T7H7w8-6Z8!7I6S046(7o7c8`4V8U597C6N6P8_8?7y797B8S04557#2?7P4j737z7X8#7Z7h7$9m7(5g7u7z5k3Q2L8M5p3T5E5%2P7_2t7{5.5:5=5@7}5{1w362#601R8v647C8A692p0I6c6e8F6h6j572^8M5Z2^8R9m8T8,8X8Z3Y6R0n6C6E977U448,958,4e8=6X8^9?8#4p784O9l906-928Y944I8/6H04a83r9b9.9d7F9(709@9j9a8 8?9n9far8#9 6_9v3#7.3J9A3J0X0Z0#04.
3. Opérateur ou

Compléter la fonction suivante.

###(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 : 10/10

.128013,:Cag)R1iTçkn/SAé=vFmsuhb4;ye62odt c(wr5_P3qplf050H0D0I0e0j0U0w0J0K0U0e0w0w0s010I0j0T010406050w0x0v0v0e0N0C040p0G0U0x0:0G0n0J020e0v0T0B0J0h0D0}0N0S0x0D0w050o0`0|0~100^0T041o1v051y0o1y1A1v0^0H0j0t0(0*0,0.0y0j0f0y0U1O0y0I0?050Z0z0U0D1J0+0-011N1P1R1P0I1X1Z1V0I0z0G0H101W0N1w0I0y0(130w0T0e0n0.0F011#1L010V0#0D0n1b0D1V2022271%2a1Z2d0v2f040a0J0Q0N0G0T0G0w0j16180X1~0N0N0D0K2A1o2h0n1w0o1|2M0I1`1_1{0H2j0.1R0n2c2x1V1G1I0)1$2W0j2Y0n1?1H1V0T2F1w2K2M2@0_21182(282-0N0}0U0?0i2J2{0@2`2i2}1%2 310?0F3522372K2V013c0e32040R3g2L0^3j3a0.3m3o0A3r3i2{3k3x0?0O3A3t3C3v3l0G303n0?0E3A1x2=1o2$2P0H2T3k0K1?2p0W1H1w2;0D2?363R3!0X3,391K1%0m0?0X0V3R3u3?0.0M0?0J3|3J3~3l0V0?0G0x433=2)010=040L4b2|450n0?0e4i3k4f0b3A423}4d4l040z4o3K4f0g0c3H0J4F4t444d3^040j3{1p364H4c2~4m4z454f4D4O3h064G4#4Q4j4J0?2F0I0x0N0n4s384(280m0K0?0k0N1l4E4G4;3k4K0D1R4N2@4%3D0?4y4Y2L4 4A0?4X2@4!4$4F5c454K4+4-4/5a04563K4@4_4{0D4}5j4u4?4*0Y5o4:5A3@4^040u3n0w5x5q0^0o3/3+3S5S0o3V1o0I3X5X2R2N1=1@2P0e1Y5U3V1u3;4=1%2F0v0P0V0e0m0D0P0y0R0?1g1i1k1m0J5f3-1B371v0q152F0J2;2v2x2z0j170J2C0w13156i180c42671F1H3k1)1Q1S1U5/3k2l2c2e0?2r0p0K0N0;0I2s0C1|173R3*5/2^3-5R6B5t3_0D543-5G3 414U4v4704496*284f4h5q5k4v4T6?6%4e0?4r5q5s4k586/1%4B654Z4#6@5B4L6#3h706^044n6`4I6:5e5y4$793@5C4,4.5F7j5H5v4|5O786{51537t4R3b727i7E0.4W7m7z7u0.5m5D7s6 7o7O5I4`7x5g7M7I017B5M737J7l7y5i7e7a5n7R557T7#5I5K0$5N5g1o6W5T2M5-1z040d0Y0I1!6e2w2y2A6d0D150J0w000r6J0j6c0r0f3n1h2c6M2C0*0J5^0l6j0`1H2285646s1E3%2%456x1+1T2g7N292b2n2p6H8i0T6M0Q6O0y6Q6?6S4;6U3h057}7A6Z7c5b6{405r7(46484a7H5:7)4g8:4w7h2_6{4q7D8^3l7G8~8L757m7=4K4M91577g8:7K7+5i997q5E7S7A7V5w988)047/5p7;6{4w597{5Q3#2M8Z5V3(5.6a2Q862u886h6j6l6n8a6r1x372$6w1S8I6A7=6D8O6G0J6I6K8S6N6P9u3-8Z2_6?8(8L4K3`8:8.6s957!0n6,6.8@4p0?6=9|928|9f6}9c3K9xa8044C9q9?0?9b9m8La7a15d04763s7,7-7p9s7Q9-7d7=am7Y4~9r9taa714x3H7|9B7~3U9F3U0Y0!0$04.
4. Opérateur ou_exclusif

Compléter la fonction suivante.

Aide

On remarque que ou_exclusif(a, b) est évalué à True si a et b ont des valeurs différentes :

  • soit a est True et dans ce cas b est False ;
  • soit a est False et alors b est True.

Il n’est pas interdit de réutiliser certains opérateurs codés dans les questions précédentes 😊.

###(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 : 10/10

.128013,:ag)R1ikn/SA=vmsuhb;yxe2odt c(wr_P3qplf050B0y0C0d0i0N0r0D0E0N0d0r0r0o010C0i0M010406050r0s0q0q0d0H0w040m0A0N0s0)0A0k0D020d0q0M0v0D0g0y0?0H0L0s0y0r050l0:0=0@0_0.0M041h1o051r0l1r1t1o0.0B0i0p0X0Z0#0%0t0i0e0t0N1H0t0C0,050S0u0N0y1C0!0$011G1I1K1I0C1Q1S1O0C0u0A0B0_1P0H1p0C0t0X0|0r0M0d0k0%0z011U1E010O0U0y0k140y1O1_1{201W231S260q28040a0D0J0H0A0M0A0r0i0 110Q1@0H0H0y0E2t1h2a0k1p0l1=2F0C1:1/1;0B2c0%1K0k252q1O1z1B0Y1V2P0i2R0k1,1A1O0M2y1p2D2F2-0/1`112X212$0H0?0N0,0h2C2;0-2:2b2?1W2^2`0,0z2~1{2F2*0y2F2V2I0B2M2O010E1,2i0P1A1p3c2,2 392E053l0Q3s321D1W0j0,0Q0O3u3z2=3B0%0G0,0D3H313J2Y010k0O0,0A0s0I0y0x0Y0s2r3G1i3t2D3j0+040F3P3,330%0k0,0d3;2;3-0,0b3H3O3=3K3T0,0u3{3A3S3.0f0c3H060D4f413|3?013D042y0C0s0H0k403Q3j3^043X473R213.3:3*3a4t4j4v0R4y3}3/4J4G3_4M433.3 4D2E4h482@0,2$4r4T3I4K4C2/423S4v464#4F4Q0,0f0f4S2-4V4z340,4I4.4*4A0,4(3+4i434v4Z4P4951584X043`4~5459044?4s4 4{044-4)5g505i0f4d1h3x3d1q2+1h3f1h0C3h5C2K2G1+1-2I0d1R5x0l3f1n4$4j2y0q0I0O0d0j0y0I0t0K0,191b1d1f0D4c4.1u301o0n0~2y0D2*2o2q2s0i100D2v0r0|0~5}110c3O5/1y1A3j1Y1J1L1N5R432e25270,2k0m0E0H0*0C2l0w1=103P3r3Q2.3t5w6g3S4l3F5b1W3M04675p4W343V4w3Y3!3$3(6G0%4B6U445d6X4R5k5q5m5o536M6V4;5-2-4e4g4/6D0,4n4p4!4^6=5c4}6L4`6,4L5f6+6Y4x7370016W774u4O7b4j6#4#4_7c5n6!4;4@2 7i4N04577e4:726 7j6~6*787a7w7q5e7C7u7n3a7p55457l5s5t4#0.0l6B5y5N5P1s045=2J1T5_2p2r2t5 1T610}7(661q302V6b1L1!1M296%0%6i2g2i6m6o6q6s6u6`3t6x2/4.7S5l0%6E0y3)7F3S6I6K7z4u6O3X3Z3#0}6T7t5h524E8a6Y7E8j7f3~6$744,7M4b4d4g7J6?040i8e7o6|5m8x8u7`790,6.2 6:8H4f8O8b6@0R6_8B78566v8r5r8t3v8v8D8-1W4a8G6;8v4l6^4q8)7j6)3a7Q7S1u5z5O3p7Q0Q0S0U0r04.
5. Opérateur non_ou

Compléter la fonction suivante.

###(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 : 10/10

.128013,:)ag1ikn/S=vmsubhye2odt c(wr_Pplf050x0u0y0e0h0H0p0z0A0H0e0p0p0m010y0h0G010406050p0q0o0o0e0D0t040l0w0H0q0Z0w0j050k0*0,0.0:0(0G040|1305160k1618130(0x0h0n0R0T0V0X0s0h0f0s0H1m0s0y0$050M0r0H0u1h0U0W011l1n1p1n0y1v1x1t0y0r0w0x0:1u0D140y0s0R0?0p0G0e0j0X0v011z1j010I0O0u0j0e0o0u1t1X1Z1(1B1+1x1.1:0$0a0z0F0D0w0G0w0p0h0_0j0z0K1V0D0D0u0A280|1?0j140k1T2l0y1R1Q1S0x1^0X1p0j1-251t1e1g0S1A2v0h2x0j1N1f1t0G2e142j2l2P0)1Y292D1)2I0D0-0H0$0g2i2T0%2S1@2V1B2X2Z0$0v2%1Z2l2M0u2l2B2o0x2s2u010A1N1;142{172N2*2k2=39310K2O2T2 0i0$0K0I3a3e2+1i1B0C0$0z3l382 0j0I0$2I0j0E0w0q3t2j2 0#040B3E3f2,0X0j0$0e3K3n2E013H0b3l3s3F3M013O040r3R2U3o0X3H0d0c3l060z3=3Y3L3+013h042e0y0q0D0{0}2(3@3S2W3y0`3)3G0$3J422?3u3!3$3C493!3H4c2R3Z3_3$3Q4d394o3T3V3X4f4p0$3(4s3m3*4v0$0d0d3:0|3c2_15370k352m2}0|2p2o1M1O2o0e1w4M4P1f2)4P0L0N0P04.
6. Opérateur non_et

Compléter la fonction suivante.

###(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 : 10/10

.128013,:)ag1ikn/S=vmsubhye2odt c(wr_Pplf050x0u0y0e0h0H0p0z0A0H0e0p0p0m010y0h0G010406050p0q0o0o0e0D0t040l0w0H0q0Z0w0j050k0*0,0.0:0(0G040|1305160k1618130(0x0h0n0R0T0V0X0s0h0f0s0H1m0s0y0$050M0r0H0u1h0U0W011l1n1p1n0y1v1x1t0y0r0w0x0:1u0D140y0s0R0?0p0G0e0j0X0v011z1j010I0O0u0j0e0o0u1t1X1Z1(1B1+1x1.1:0$0a0z0F0D0w0G0w0p0h0_0j0z0K1V0D0D0u0A280|1?0j140k1T2l0y1R1Q1S0x1^0X1p0j1-251t1e1g0S1A2v0h2x0j1N1f1t0G2e142j2l2P0)1Y292D1)2I0D0-0H0$0g2i2T0%2S1@2V1B2X2Z0$0v2%1Z2l2M0u2l2B2o0x2s2u010A1N1;142{172N2*2k2=39310K2O2T2 0i0$0K0I3a3e2+1i1B0C0$0z3l382 0j0I0$2I0j0E0L3t2j2 0#040B3D3f2,0X0j0$0e3J3n2E013G0b3l3s3E3L013N040r3Q2U3o0X3G0d0c3l060z3;3X3K3*013h042e0y0q0D0{0}2(3?3R2W3y0`3(3F0$3I412?3u3Z3#3C4c393Y3^3G4b2R4k3S3#3P4i3m3)3S3U3W4e3^3#3%4t4z4w0$0d0d3/0|3c2_15370k352m2}0|2p2o1M1O2o0e1w4M4P1f2)4P0L0N0P04.