Aller au contenu

Les listes⚓︎

Les fonctions de base⚓︎

Le retour des listes chaînées

Puisque le paradigme fonctionnel est particulièrement adapté à la récursivité, nous allons utiliser les listes chaînées de la forme (tete, queue) pour les exercices suivants.

Dans tous les exercices, vous pourrez utiliser les fonctions suivantes :

Fonctions prédéfinies pour les exercices suivants
nil = None
cons = lambda t, q: (t, q)
est_vide = lambda liste: liste is None
tete = lambda liste: liste[0]
queue = lambda liste: liste[1]
Exemples d'utilisation
>>> est_vide(cons(2, cons(4, nil)))
False
>>> tete(cons(2, cons(4, nil)))
2
>>> queue(cons(2, cons(4, nil)))
(4, None)
>>> est_vide(nil)
True
Exercice 4 : longueur(liste)

Écrire le code de la fonction longueur qui prend en paramètre une liste liste et qui renvoie la longueur, c'est-à-dire le nombre d'éléments qu'il contient. La liste vide a une longueur de 0.

Exemples d'utilisation
>>> longueur(cons(5, cons(3, cons(2, cons(6, nil)))))
4
>>> longueur(nil)
0

def longueur(liste):
...
# Tests
assert longueur(cons(5, cons(3, cons(2, cons(6, nil))))) == 4
assert longueur(nil) == 0
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h/4qpo+b (d)uvis2mf3ytc10050z0i0K0d0D0f0E0x0L0f0d0E0E0j010K0D0t010406050E0B0G0G0d0c0J040h0u0f0B0(0u0m050q0/0;0?0^0-0t040518111b0q180-0z0D0C0W0Y0!0$0p0D0l0p0f1p0p0K0+050R0w0f0i1k0Z0#011o1q1s1q0K1y1A1w0K0c190K0p0W0{0E0t0d0m0$0F011C1m010H0T0i0m0d0G0i1w1V1X1$1E1)1A1,1.0+0a0x0e0c0u0t0u0E0D0~0m0x0P1T0c0c0i0L26111;0m190q1R2j1O1Q1P1x0z1?0$1s0m1+231w1h1j0X1D2t0D2v0m0u2z1w0t2c192h2j2N0.1W272B1%2G0c0=0f0+0M2g2R0,2Q1=2T1E2V2X0+0F2#1X2%2h2s012,0d2Y040I2:2i0-2?2*0$2_2{0r2~2=2R2@340+0o371c2L112z2m0z1Q2r32010L2H1/193i1a3g2P122$053p0P2M393n0g0+0P0H3e311l1E0b0+0x3J3D3L330H0+0f0 0l0B0i0B0c3Q2)3S010*040y3%2S3)0m3V0D0E0K0i3.2@3+0A0n37060x413P3K2C013F040D3I3x2;433R453;040i3@0k0C0D0P3`3n3+3-4b2i2(3/4f3=3@3_4s3C3(453|3~4A40424I4u2@472c0K3#104A4d4C1%0G0D0+0N3 4J441%470i0U4z2P4#1E3+4F2N4H4I414K3E0+4N4P374S4v4U4W042!4R4@3)0u0+0v4|544w043W0m3Y3!3$4A5a1%4q4o3:0+0s3Z3Z5m4D0+4r4+4e2U4x3^5s5k0+0A0A3 113A0i2j2K5J3h1i3j2m2p2k0d1z5M0q3i0-5W0Q0S0U04.

def longueur(liste):
if est_vide(liste):
return ...
else:
return ...
# Tests
assert longueur(cons(5, cons(3, cons(2, cons(6, nil))))) == 4
assert longueur(nil) == 0
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h/4qpo+b (d)uvis2mf3ytc10050z0i0K0d0D0f0E0x0L0f0d0E0E0j010K0D0t010406050E0B0G0G0d0c0J040h0u0f0B0(0u0m050q0/0;0?0^0-0t040518111b0q180-0z0D0C0W0Y0!0$0p0D0l0p0f1p0p0K0+050R0w0f0i1k0Z0#011o1q1s1q0K1y1A1w0K0c190K0p0W0{0E0t0d0m0$0F011C1m010H0T0i0m0d0G0i1w1V1X1$1E1)1A1,1.0+0a0x0e0c0u0t0u0E0D0~0m0x0P1T0c0c0i0L26111;0m190q1R2j1O1Q1P1x0z1?0$1s0m1+231w1h1j0X1D2t0D2v0m0u2z1w0t2c192h2j2N0.1W272B1%2G0c0=0f0+0M2g2R0,2Q1=2T1E2V2X0+0F2#1X2%2h2s012,0d2Y040I2:2i0-2?2*0$2_2{0r2~2=2R2@340+0o371c2L112z2m0z1Q2r32010L2H1/193i1a3g2P122$053p0P2M393n0g0+0P0H3e311l1E0b0+0x3J3D3L330H0+0f0 0l0B0i0B0c3Q2)3S010*040y3%2S3)0m3V0D0E0K0i3.2@3+0A0n37060x413P3K2C013F040D3I3x2;433R453;040i3@0k0C0D0P3`3n3+3-4b2i2(3/4f3=3@3_4s3C3(453|3~4A40424I4u2@472c0K3#104A4d4C1%0G0D0+0N3 4J441%470i0U4z2P4#1E3+4F2N4H4I414K3E0+4N4P374S4v4U4W042!4R4@3)0u0+0v4|544w043W0m3Y3!3$4A5a1%4q4o3:0+0s3Z3Z5m4D0+4r4+4e2U4x3^5s5k0+0A0A3 113A0i2j2K5J3h1i3j2m2p2k0d1z5M0q3i0-5W0Q0S0U04.

longueur = lambda liste: ... if est_vide(liste) else ...
# Tests
assert longueur(cons(5, cons(3, cons(2, cons(6, nil))))) == 4
assert longueur(nil) == 0
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013raPlkSe=_gn:h/qpo+b (d)uvis2mfytc10050w0h0G0c0A0e0B0u0H0e0c0B0B0i010G0A0q010406050B0y0D0D0c0b0F040g0r0e0y0!0r0l050o0+0-0/0;0)0q0405140}170o140)0w0A0z0S0U0W0Y0n0A0k0n0e1l0n0G0%050N0t0e0h1g0V0X011k1m1o1m0G1u1w1s0G0b150G0n0S0@0B0q0c0l0Y0C011y1i010E0P0h0l0c0D0h1s1R1T1Y1A1#1w1(1*0%0a0u0d0b0r0q0r0B0A0`0l0u0L1P0b0b0h0H220}1-0l150o1N2f1K1M1L1t0w1/0Y1o0l1%1 1s1d1f0T1z2p0A2r0l0r2v1s0q28152d2f2J0*1S232x1Z2C0b0.0e0%0I2c2N2f2G0h2f2v2i0w1M2n2P1A0H2D1+152%162H2M1T2K2Y052.0L2I2N2o010l0%0e0{0k0y0h0y0b2X2_0u2^2O1h1A0r0%0i3c2e3e2d310f341)0t0w0c3m043o302,0Y33041o0B0G0h3x3f310$040m3x3z1.3B010D0A0%0J3P3K3S3r040A0E3Y3p3S3D0h3G0j0z0A0L3J3*3h0Y3M0v3?3A3^32340A3G3I0~2{3@2y013M0x3)3}473#0h0Q432J3Q3g473U2V4b3R3~3j040s4o4k2Q3436383a3|4p473`4B4v1A3D0p4z4h454c1Z4E442_3Z3~3D3F3H4F3L0%0x4a4Q2e0)0o2}2#182@0o2=2g2)0}2j4=0c1v4+4.1e0(0}0L0N0P0B04.
Exercice 5 : contient(liste, v)

Écrire le code de la fonction contient qui prend en paramètres une liste liste et un élément v, et qui renvoie un booléen indiquant si v appartient à liste ou pas.

Exemples d'utilisation
>>> contient(nil, 4)
False
>>> contient(cons(3, nil), 4)
False
>>> contient(cons(3, nil), 3)
True
>>> contient(cons(7, cons(2, cons(8, cons(2, nil)))), 8)
True

def contient(liste, v):
...
# Tests
assert contient(nil, 4) == False
assert contient(cons(3, nil), 4) == False
assert contient(cons(3, nil), 3) == True
assert contient(cons(7, cons(2, cons(8, cons(2, nil)))), 8) == True
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkTSe=_gn:5h/46qpob (d7uv)is2Fmf3y,tc1050A0j0O0d0F0f0G0y0P0f0d0G0G0k010O0F0v010406050G0C0J0J0d0c0M040i0w0f0C0+0w0n050r0=0@0_0{0:0v04051b141e0r1b0:0A0F0D0Z0#0%0)0q0F0m0q0f1s0q0O0.050U0x0f0j1n0$0(011r1t1v1t0O1B1D1z0O0c1c0O0q0Z0~0G0v0d0n0)0H011F1p010K0W0j0n0d0J0j1z1Y1!1)1H1,1D1/1;0.0a0y0e0c0w0v0w0G0F110n0y0S1W0c0c0j0P29141@0n1c0r1U2m1R1T1S1A0A1_0)1v0n1.261z1k1m0!1G2w0F2y0n0w2C1z0v2f1c2k2m2Q0;1Z2a2E1*2J0c0^0f0.0Q2j2U0/2T1^2W1H2Y2!0.0H2(1!2*2k2v012/0d2#040L2?2l0:2_2-0)2|2~0s312^2U2`370.0p3a333c352{0w2Z2}0.0t3h2+2V1o2.3m2:040B3a1f2O142C2p0A1T2u3k0P2K1=1c3E1d3C2S152)053K0S2P3j3u0)0g0.0S0K3A343Z010b0.0y3)3Y2F2{0K0.3K0n0+1.0O3:2,3+0-040z3~3t3=0n0.1v0G0O0j442`410N3a3/3*460.0D4d3k410E0o3h0y4t4i3;1*3#040F3(3S2@4v3 4k040j4a0l0D0F0S4n400.434C2l3s3d480F4a4c4S3X4F1*4p4r4!064u4,4E454x0.2f0O0C0c134!4.2`0g0P0.0I2}0G4Z2Q4+4u4U3k4y0j1v4B2Q4{3k47044m4`573+0w0.0k0k4h5k4G4b4b4O3=414R2S4j2X4W4Y5v4%0.4q4s4-4t5r4:044=4@4_5d5L1H4}0.0h0c0C532)555K5A5T0.5a525E1H414)545J5$4w5(5N0T5P5q5%363^123{3`5,0)5x622{0.0u5Y5Y65644!5S5}04495u6d5|014p4g5j6k5g5i5z5?635G3r0r3V0j2m2N6z3D1l3F2p2s2n0d1C6C0r3E0:6M0T0V0X04.

def contient(liste, v):
if est_vide(liste):
return ...
elif ...:
return True
else:
return contient(..., ...)
# Tests
assert contient(nil, 4) == False
assert contient(cons(3, nil), 4) == False
assert contient(cons(3, nil), 3) == True
assert contient(cons(7, cons(2, cons(8, cons(2, nil)))), 8) == True
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkTSe=_gn:5h/46qpob (d7uv)is2Fmf3y,tc1050A0j0O0d0F0f0G0y0P0f0d0G0G0k010O0F0v010406050G0C0J0J0d0c0M040i0w0f0C0+0w0n050r0=0@0_0{0:0v04051b141e0r1b0:0A0F0D0Z0#0%0)0q0F0m0q0f1s0q0O0.050U0x0f0j1n0$0(011r1t1v1t0O1B1D1z0O0c1c0O0q0Z0~0G0v0d0n0)0H011F1p010K0W0j0n0d0J0j1z1Y1!1)1H1,1D1/1;0.0a0y0e0c0w0v0w0G0F110n0y0S1W0c0c0j0P29141@0n1c0r1U2m1R1T1S1A0A1_0)1v0n1.261z1k1m0!1G2w0F2y0n0w2C1z0v2f1c2k2m2Q0;1Z2a2E1*2J0c0^0f0.0Q2j2U0/2T1^2W1H2Y2!0.0H2(1!2*2k2v012/0d2#040L2?2l0:2_2-0)2|2~0s312^2U2`370.0p3a333c352{0w2Z2}0.0t3h2+2V1o2.3m2:040B3a1f2O142C2p0A1T2u3k0P2K1=1c3E1d3C2S152)053K0S2P3j3u0)0g0.0S0K3A343Z010b0.0y3)3Y2F2{0K0.3K0n0+1.0O3:2,3+0-040z3~3t3=0n0.1v0G0O0j442`410N3a3/3*460.0D4d3k410E0o3h0y4t4i3;1*3#040F3(3S2@4v3 4k040j4a0l0D0F0S4n400.434C2l3s3d480F4a4c4S3X4F1*4p4r4!064u4,4E454x0.2f0O0C0c134!4.2`0g0P0.0I2}0G4Z2Q4+4u4U3k4y0j1v4B2Q4{3k47044m4`573+0w0.0k0k4h5k4G4b4b4O3=414R2S4j2X4W4Y5v4%0.4q4s4-4t5r4:044=4@4_5d5L1H4}0.0h0c0C532)555K5A5T0.5a525E1H414)545J5$4w5(5N0T5P5q5%363^123{3`5,0)5x622{0.0u5Y5Y65644!5S5}04495u6d5|014p4g5j6k5g5i5z5?635G3r0r3V0j2m2N6z3D1l3F2p2s2n0d1C6C0r3E0:6M0T0V0X04.

contient = lambda liste, v: ... if est_vide(liste) else True if ... else contient(..., ...)
# Tests
assert contient(nil, 4) == False
assert contient(cons(3, nil), 4) == False
assert contient(cons(3, nil), 3) == True
assert contient(cons(7, cons(2, cons(8, cons(2, nil)))), 8) == True
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013raPlkTSe=_gn:h/qpob (d)uvis2Fmfy,tc1050w0i0I0c0A0e0B0u0J0e0c0B0B0j010I0A0r010406050B0y0E0E0c0b0G040h0s0e0y0#0s0m050p0,0.0:0=0*0r0405150~180p150*0w0A0z0T0V0X0Z0o0A0l0o0e1m0o0I0(050O0t0e0i1h0W0Y011l1n1p1n0I1v1x1t0I0b160I0o0T0^0B0r0c0m0Z0C011z1j010F0Q0i0m0c0E0i1t1S1U1Z1B1$1x1)1+0(0a0u0d0b0s0r0s0B0A0{0m0u0M1Q0b0b0i0J230~1.0m160p1O2g1L1N1M1u0w1:0Z1p0m1(201t1e1g0U1A2q0A2s0m0s2w1t0r29162e2g2K0+1T242y1!2D0b0/0e0(0K2d2O2g2H0i2g2w2j0w1N2o2Q1B0J2E1,162(172I2N1U2L2Z052/0M2J2O2p010m0(2/0m0#1(0I2Y2`0u2_2P1i1B0s0(0j3b2f3d2e320f0(0V0E0t0w0c3l043n312-0Z34041p0B0I0i3x3e320%040H3x3z1/3B330(0z3J3o3S3M0n3P3K3S0f0J0(0D0c0R3I0 2Z3Q3f2z013q040A0F3#3X3g3C0(0i3G0k0z0A0M3W3A3~013M0v473R493D3F3H4d3=1!3M0x3|483?3^0i3-4o4e4q3)040g0b0y3.2K3;3p0(3`4u4k1B3D3V3/3c3$493i040j3k4N3m4P3?3D3H4i4V304v4l0(4c4$4X2R3r0A3G4C2|3}3?4m4I4F044s0B4=4O4@4.043638374j3L4*573S3D0q4B4B5a494b5g4Y4/4;5j4)040x3O4$4E5b3U5n1B4_4$0*0p2~2$192^0p2?2h2*0~2k5K0c1w5D5G1f0)0~0M0O0Q0B04.
Exercice 6 : i_eme(liste, i)

Écrire le code de la fonction i_eme qui prend en paramètres une liste liste et un entier i, et qui renvoie l'élément d'indice i dans liste. On suppose que i est inférieur à la longueur de liste.

Indications
  • L'élement d'indice 0 est la tête de la liste.
  • L'élément d'indice 3 d'une liste et l'élément d'indice 2 de la queue de la liste.
Exemples d'utilisation
>>> i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 0)
5
>>> i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 1)
2
>>> i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 2)
-1
>>> i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 3)
3

def i_eme(liste, i):
...
# Tests
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 0) == 5
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 1) == 2
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 2) == -1
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 3) == 3
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h/4-qpob (d)uvis2mf3y,tc10050z0i0L0d0D0f0E0x0M0f0d0E0E0j010L0D0u010406050E0B0G0G0d0c0J040h0v0f0B0)0v0m050q0:0=0@0_0.0u040519121c0q190.0z0D0C0X0Z0#0%0p0D0l0p0f1q0p0L0,050S0w0f0i1l0!0$011p1r1t1r0L1z1B1x0L0c1a0L0p0X0|0E0u0d0m0%0F011D1n010H0U0i0m0d0G0i1x1W1Y1%1F1*1B1-1/0,0a0x0e0c0v0u0v0E0D0 0m0x0Q1U0c0c0i0M27121=0m1a0q1S2k1P1R1Q1y0z1@0%1t0m1,241x1i1k0Y1E2u0D2w0m0v2A1x0u2d1a2i2k2O0/1X282C1(2H0c0?0f0,0N2h2S0-2R1?2U1F2W2Y0,0F2$1Y2(2i2t012-0d2Z040I2;2j0.2@2+0%2`2|0r2 2?2S2^350,0o381d2M122A2n0z1R2s33010M2I1:1a3j1b3h2Q132%053q0Q2N3a3o0g0,0Q0H3f321m1F0b0,0x3K3E3M340H0,0D0k0i1/3R2*3T010+040y3#2T3%0m0,1t0E0L0i3,2^3)0K383Q3L2D2_3W3^3o3)0A0n38060x493}3S3 3G040D3J3y2=4b3$3 3/4f3|2)3-3 0v0,0j0j4p3~1(0G0D0,0O423%3)464i304a4K4k4r1(4e2d0L0B0c114I044M3b0,3?3?4E3 3)3+4V4q4Y043;4#4*4y1F44474K4+3F0,0i0V3@4:4c1(4G4@4L494_3%4P0R4S4U2O4X3o4n3X3Z4~2Q4;0%4(4$2V0,0t0B0i5r5n4=0,4)5j502,3:0D3=5i3z5k3(0,0A3{4V5d3.414 4l1(4t040s5u0%4A2!5V5H040A47123B0i2k2L5*3i1j3k2n2q2l0d1A5-0q3j0.5`0R0T0V04.

def i_eme(liste, i):
if i == 0:
return ...
else:
return ...
# Tests
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 0) == 5
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 1) == 2
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 2) == -1
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 3) == 3
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h/4-qpob (d)uvis2mf3y,tc10050z0i0L0d0D0f0E0x0M0f0d0E0E0j010L0D0u010406050E0B0G0G0d0c0J040h0v0f0B0)0v0m050q0:0=0@0_0.0u040519121c0q190.0z0D0C0X0Z0#0%0p0D0l0p0f1q0p0L0,050S0w0f0i1l0!0$011p1r1t1r0L1z1B1x0L0c1a0L0p0X0|0E0u0d0m0%0F011D1n010H0U0i0m0d0G0i1x1W1Y1%1F1*1B1-1/0,0a0x0e0c0v0u0v0E0D0 0m0x0Q1U0c0c0i0M27121=0m1a0q1S2k1P1R1Q1y0z1@0%1t0m1,241x1i1k0Y1E2u0D2w0m0v2A1x0u2d1a2i2k2O0/1X282C1(2H0c0?0f0,0N2h2S0-2R1?2U1F2W2Y0,0F2$1Y2(2i2t012-0d2Z040I2;2j0.2@2+0%2`2|0r2 2?2S2^350,0o381d2M122A2n0z1R2s33010M2I1:1a3j1b3h2Q132%053q0Q2N3a3o0g0,0Q0H3f321m1F0b0,0x3K3E3M340H0,0D0k0i1/3R2*3T010+040y3#2T3%0m0,1t0E0L0i3,2^3)0K383Q3L2D2_3W3^3o3)0A0n38060x493}3S3 3G040D3J3y2=4b3$3 3/4f3|2)3-3 0v0,0j0j4p3~1(0G0D0,0O423%3)464i304a4K4k4r1(4e2d0L0B0c114I044M3b0,3?3?4E3 3)3+4V4q4Y043;4#4*4y1F44474K4+3F0,0i0V3@4:4c1(4G4@4L494_3%4P0R4S4U2O4X3o4n3X3Z4~2Q4;0%4(4$2V0,0t0B0i5r5n4=0,4)5j502,3:0D3=5i3z5k3(0,0A3{4V5d3.414 4l1(4t040s5u0%4A2!5V5H040A47123B0i2k2L5*3i1j3k2n2q2l0d1A5-0q3j0.5`0R0T0V04.

i_eme = lambda liste, i: ... if i == 0 else ...
# Tests
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 0) == 5
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 1) == 2
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 2) == -1
assert i_eme(cons(5, cons(2, cons(-1, cons(3, nil)))), 3) == 3
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013raPlkSe=_gn:-h/qpob (d)uvis2mfy,tc10050w0h0H0c0A0e0B0u0I0e0c0B0B0i010H0A0r010406050B0y0D0D0c0b0F040g0s0e0y0#0s0l050p0,0.0:0=0*0r0405150~180p150*0w0A0z0T0V0X0Z0o0A0k0o0e1m0o0H0(050O0t0e0h1h0W0Y011l1n1p1n0H1v1x1t0H0b160H0o0T0^0B0r0c0l0Z0C011z1j010E0Q0h0l0c0D0h1t1S1U1Z1B1$1x1)1+0(0a0u0d0b0s0r0s0B0A0{0l0u0M1Q0b0b0h0I230~1.0l160p1O2g1L1N1M1u0w1:0Z1p0l1(201t1e1g0U1A2q0A2s0l0s2w1t0r29162e2g2K0+1T242y1!2D0b0/0e0(0J2d2O2g2H0h2g2w2j0w1N2o2Q1B0I2E1,162(172I2N1U2L2Z052/0M2J2O2p010l0(0A0j0h1+2Y2`0u2_2P1i1B0s0(0i3a2f3c2e320f0(0V0D0t0w0c3k043m312-0Z34041p0B0H0h3w3d320%040G3w3y1/3A33353I3n3R3L0m3O3J3R3C3G3G3U3z3f0Z3L0v3)3Q3+3S3D0A3F3H0 2|3V3;3L0x3Z3|2z013p040A0E403*423C0A483:423h040i3j3`3b3!3;0D0A0(0K4d3e42440h0R3_2K3P4t2R3537394k2f4m423-3/4B1B3C0q0y0h4Q4L3K0(3.4G304e4C3?3^4T3W0(0x3N4X4A324b4%3;4g0n4:424o2W4@1!3~3w0*0p2~2$192^0p2?2h2*0~2k590c1w52551f0)0~0M0O0Q0B04.
Exercice 7 : maximum(liste)

Écrire le code de la fonction maximum qui prend en paramètre une liste liste non vide et qui renvoie le plus grand élément de liste.

On pourra utiliser la fonction max pour déterminer le maximum de deux éléments.

Indications

Puisque la liste ne peut pas être vide, le cas de base est la liste qui ne contient qu'un seul élément.

On sait qu'une liste ne contient qu'un élément quand la queue est vide.

Exemples d'utilisation
>>> maximum(cons(5, nil))
5
>>> maximum(cons(5, cons(9, cons(3, cons(8, nil)))))
9

def maximum(liste):
...
# Tests
assert maximum(cons(5, nil)) == 5
assert maximum(cons(5, cons(9, cons(3, cons(8, nil))))) == 9
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_Vgn:5h/4qpob (Od)uvis2émf3y,tc1Rx.;050A0i0N0d0E0f0F0x0O0f0d0F0F0j010N0E0u010406050F0C0I0I0d0c0L040h0v0f0C0.0v0n0x020d0I0u0T0x0Q0i0{0c0t0C0i0F050r0^0`0|0~0?0u04051t1m1w0r1t0?0A0E0D0$0(0*0,0q0E0m0q0f1K0q0N0;050X0w0f0i1F0)0+011J1L1N1L0N1T1V1R0N0c1u0N0q0$110F0u0d0n0,0G011X1H010J0Z0i0n190i1R1@1_1~1Z211V240I26040a0x0e0c0v0u0v0F0E14160V1=0c0c0i0O2r1m280n1u0r1:2D1-1/1.1S0A2a0,1N0n232o1R1C1E0%1Y2N0E2P0n0v2T1R0u2w1u2B2D2+0@1^162V1 2!0c0{0f0;0P2A2/0=2.292;1Z2?2^0;0G2|1_2~2B2M01330d2_040K372C0?3a310,3d3f0s3i392/3b3o0;0p3r1x2)1m2T2G0A1/2L3m010O2#2g0U1D1u2(0i2*2}3y3J0V3R301G1Z0g0;0V0J3y3l3Y0,0b0;0x3(3t3H0n0J0;0{0R0E0I0_3/3X2W010:040y3}2:3*3c0;1N0F0N0i443b410B0o3r060x4k3.3)3 3!040E3%1n2}4m3:460n0;1k0N0k0D0E0V4d3H41434t382 453 4y041i0i1j4G464I4U4O480E4a4c4K2C4M4e0;0B4g4i4l4/4v3~1 4p2w0N0C0c0n3r4;4N2=0;4b4b4X1 4W4%3W4 324Z4#541Z4f4.4l4)3H4p0i0!4$2-4n550;4h574j4:4k5i464@0W4`4|574~3u0w3@0d0R5d0,565o4w4Y04525n3S5p5e0;4J5N4=5a044953575x3 4f0M4}5)50043^3`3|5(5U5L5W5K474Q1j4T5@5O5q425{4P5$5S4L5^404+4,4i1m3U3Q3z6g0r3C1m0N3E6l2J2E0d1U6i3C1s583b2w0I0k0J0d0g0i0k0q0K0;1e1g4R0#5s2-1z2~1t0z160u4S0N0x0H0O0c0E2w0x0(0x0J152y0E150x0F1_0#130Z4!0i0c3.6f3b1#1M1O1Q6w3;5G5:5I3y0r6f045s1A3M2U466~1%1P27612b222e2g0l6_2p6.310E4R6/6;0x3^3y3P582,3S795.3Z3#0i4s5Y593+3-643?753_3{0I5{5M5T7k3n5b5%7L4*044-5t4/7G0,4p4r5-694P4A4C4E674(697W687Y5|4R5 7$4H5`605Z7Z5#4!7#7X866a7(7)2+5u5v7,015z4_4{7:7~4P5R7V84824x7!7_724V4+5g5w695k5m8s7a8B4:8j4P5;8o8c0v0;0j8N7M5|5;7T8G5X8b8T4P808x8j7|7`8p8w8G6c7*5v5E5j0;7/5D8K5H3_8S3b8P04020m0N0T8|3;510W8%7{8t8Z3u8,858T4f6N2}8h8:8C7~8l5B948v7R0E8I7+8D4z8F9e7%9h389j9k8j9n8n8^7;968a7}8c8)8y5P668-6d783K2D7B3B3N6v0e0v4`6%0d0x0D7q6-166*0n6,152P0f1V0M6/0v2q0x6.0d0u6U9?1W0G6)9`0#05798V0_0y8$0y668.799^0F9`6W6.6?491W0C2Pa49/2r0x1_150L2f0x1i0E0x3P0n2La79Ua90Iab5~0iad890iaf9U0x23au0c0m0_230N0S1x2~2T6}1O7h718j2c23250;7p0c7r9-6+2r9=1V7w0n0#7z5(9W6O2-7F9I9r8W9H7~8~8Rb88c4p0(0I0w0A0d9p9PaO8G9A2C8;9q8r9y8363bt9q9Qbw5*8Abc8T7.7K4u8_047?4D4Fbz628Y9L8!0;8$8X649d8ubA8ebk4?9w0F8xbqbXbO8*bd4819bhbjbC9c5:bnbZ5!7Ub;8=4qbF38b(5/b`2+c01Z8~9092b^87bsbWbNbU885cbM5V7(c98kb#b%bHcb9bbub*9O5/byccci4,csbHaIbTch87bScD8dczb5cvcq8z8e0B9S7F1z3A6j9Y3B0W0Y0!04.

def maximum(liste):
if ...:
return ...
else:
return max(..., ...)
# Tests
assert maximum(cons(5, nil)) == 5
assert maximum(cons(5, cons(9, cons(3, cons(8, nil))))) == 9
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_Vgn:5h/4qpob (Od)uvis2émf3y,tc1Rx.;050A0i0N0d0E0f0F0x0O0f0d0F0F0j010N0E0u010406050F0C0I0I0d0c0L040h0v0f0C0.0v0n0x020d0I0u0T0x0Q0i0{0c0t0C0i0F050r0^0`0|0~0?0u04051t1m1w0r1t0?0A0E0D0$0(0*0,0q0E0m0q0f1K0q0N0;050X0w0f0i1F0)0+011J1L1N1L0N1T1V1R0N0c1u0N0q0$110F0u0d0n0,0G011X1H010J0Z0i0n190i1R1@1_1~1Z211V240I26040a0x0e0c0v0u0v0F0E14160V1=0c0c0i0O2r1m280n1u0r1:2D1-1/1.1S0A2a0,1N0n232o1R1C1E0%1Y2N0E2P0n0v2T1R0u2w1u2B2D2+0@1^162V1 2!0c0{0f0;0P2A2/0=2.292;1Z2?2^0;0G2|1_2~2B2M01330d2_040K372C0?3a310,3d3f0s3i392/3b3o0;0p3r1x2)1m2T2G0A1/2L3m010O2#2g0U1D1u2(0i2*2}3y3J0V3R301G1Z0g0;0V0J3y3l3Y0,0b0;0x3(3t3H0n0J0;0{0R0E0I0_3/3X2W010:040y3}2:3*3c0;1N0F0N0i443b410B0o3r060x4k3.3)3 3!040E3%1n2}4m3:460n0;1k0N0k0D0E0V4d3H41434t382 453 4y041i0i1j4G464I4U4O480E4a4c4K2C4M4e0;0B4g4i4l4/4v3~1 4p2w0N0C0c0n3r4;4N2=0;4b4b4X1 4W4%3W4 324Z4#541Z4f4.4l4)3H4p0i0!4$2-4n550;4h574j4:4k5i464@0W4`4|574~3u0w3@0d0R5d0,565o4w4Y04525n3S5p5e0;4J5N4=5a044953575x3 4f0M4}5)50043^3`3|5(5U5L5W5K474Q1j4T5@5O5q425{4P5$5S4L5^404+4,4i1m3U3Q3z6g0r3C1m0N3E6l2J2E0d1U6i3C1s583b2w0I0k0J0d0g0i0k0q0K0;1e1g4R0#5s2-1z2~1t0z160u4S0N0x0H0O0c0E2w0x0(0x0J152y0E150x0F1_0#130Z4!0i0c3.6f3b1#1M1O1Q6w3;5G5:5I3y0r6f045s1A3M2U466~1%1P27612b222e2g0l6_2p6.310E4R6/6;0x3^3y3P582,3S795.3Z3#0i4s5Y593+3-643?753_3{0I5{5M5T7k3n5b5%7L4*044-5t4/7G0,4p4r5-694P4A4C4E674(697W687Y5|4R5 7$4H5`605Z7Z5#4!7#7X866a7(7)2+5u5v7,015z4_4{7:7~4P5R7V84824x7!7_724V4+5g5w695k5m8s7a8B4:8j4P5;8o8c0v0;0j8N7M5|5;7T8G5X8b8T4P808x8j7|7`8p8w8G6c7*5v5E5j0;7/5D8K5H3_8S3b8P04020m0N0T8|3;510W8%7{8t8Z3u8,858T4f6N2}8h8:8C7~8l5B948v7R0E8I7+8D4z8F9e7%9h389j9k8j9n8n8^7;968a7}8c8)8y5P668-6d783K2D7B3B3N6v0e0v4`6%0d0x0D7q6-166*0n6,152P0f1V0M6/0v2q0x6.0d0u6U9?1W0G6)9`0#05798V0_0y8$0y668.799^0F9`6W6.6?491W0C2Pa49/2r0x1_150L2f0x1i0E0x3P0n2La79Ua90Iab5~0iad890iaf9U0x23au0c0m0_230N0S1x2~2T6}1O7h718j2c23250;7p0c7r9-6+2r9=1V7w0n0#7z5(9W6O2-7F9I9r8W9H7~8~8Rb88c4p0(0I0w0A0d9p9PaO8G9A2C8;9q8r9y8363bt9q9Qbw5*8Abc8T7.7K4u8_047?4D4Fbz628Y9L8!0;8$8X649d8ubA8ebk4?9w0F8xbqbXbO8*bd4819bhbjbC9c5:bnbZ5!7Ub;8=4qbF38b(5/b`2+c01Z8~9092b^87bsbWbNbU885cbM5V7(c98kb#b%bHcb9bbub*9O5/byccci4,csbHaIbTch87bScD8dczb5cvcq8z8e0B9S7F1z3A6j9Y3B0W0Y0!04.

maximum = lambda liste: ... if ... else max(..., ...)
# Tests
assert maximum(cons(5, nil)) == 5
assert maximum(cons(5, cons(9, cons(3, cons(8, nil))))) == 9
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_Vgn:h/qpob (Od)uvis2émf3y,tc1Rx.;050y0i0L0d0C0f0D0v0M0f0d0D0D0j010L0C0s010406050D0A0G0G0d0c0J040h0t0f0A0,0t0n0v020d0G0s0R0v0O0i0_0c0r0A0i0D050q0?0^0`0|0;0s04051r1k1u0q1r0;0y0C0B0!0$0(0*0p0C0m0p0f1I0p0L0/050V0u0f0i1D0%0)011H1J1L1J0L1R1T1P0L0c1s0L0p0!0 0D0s0d0n0*0E011V1F010H0X0i0n170i1P1=1@1|1X1 1T220G24040a0v0e0c0t0s0t0D0C12140T1:0c0c0i0M2p1k260n1s0q1.2B1+1-1,1Q0y280*1L0n212m1P1A1C0#1W2L0C2N0n0t2R1P0s2u1s2z2B2)0=1?142T1}2Y0c0_0f0/0N2y2-2B2$0i2B2R2E0y1-2J2/1X0M2Z2e0S1B1s2}2(2{2`1@1s370T3e27350*0n0/0_0P0C0G0@3g2A0v2,3m1E1X0t0/0j3w043y2z2K010g0/0$0G0u0y0d3G3I2-3K3p041L0D0L0i3G3z2.3B0*0.040o3T3(3W0/3#3#3%3J3n013,0w3^3V3`3X3Z3@1l3f3_3*3{0/0z3/462U3L0/0C0H4b3 473X1i0L0k0B0C0T3~3A4d3|4s3)4d3X1g0i1h4w3K4v443h3:403N0C3!3$4G2A4I473,0z4a4O3H4Q4d3M040i0Y4N2)3U4t2:0u3q0d0P4D3`4F2+4c2:3=0U4%454j4u0/3}4V4X4^3Y4L434?4}1}4S0K4i4*1X3X3r3t3v514@1X4=4|5d3o0/4A4C5j585l4 4:4k4K4M5x4~044T4U2)0;0q3j2~1v2%1k301k0L325P2H2C0d1S5K0q301q3l4x1}2u0G0k0H0d0g0i0k0p0I0/1c1e4A0Z3.511x0:1t040x140s4B0L0v0F0M0c0C2u0v0$0v0H132w0C130v0D1@0Z110X4L0i0c3y5J3K1Z1K1M1O5#3W4,043r3%5I383-1v5}2R6u1M1#1N255u0*2a21230/0l6q2n6i350C4A6j6l0v6D513d3(2*3f5J6z3`4Z0T4h5t5o010b0/3y6_5$5e0H4-3s3u0G5B595w6 3;545A7a4;495`5G0v7j4)700*4Z4g5c7m014l3!4o4q4{4H5k3+79576`4z1h5s7C7r5m7y6Q7s5z565n7I490z7h2{067k7W7l3K4Z2u0L0A0c0n7q7b3?7x4P7z4804507H7b427-6;4R493G7V7k521X4Z4#0D7_807A6H4V7~7X7Y4J6C4.0C7*3`3D043F4V8c5y8e745i7?7f7;775e5q7F857/7J7.7L41558z7L4S5F7U8b7j864e047p8m8N5f8f8h478j020m0L0R8V4y4_7O7K6`8B7`8%7c8)8C8+7g7}8L7X8N7!0U7%7)8R7/8T3s8@8L8`0/838G8=887i8^7 7/8{7$7(8$537,8v877=7P7@8F9l7:8J3h5H6:5L5X5Z5~0e0t7%6b0d0v0B6X6h146e0n6g132N0f1T0K6j0t2o0v6i0d0s629Q1U0E6d9U0Z056:5g750w5r0i0w7^4T1k6:9S0D9U646i6n3Z1U0A2N9(9M2p0v1@130J2d0v1g0C0v2}0n2J9+6G9-0@9/8y9=8F9@6F3k0v21a70c0m0@210L0Q6I1z1B6L1!6x6P6`6S2c2e6W0c6Y9K6f2p9P1T6%0n0Z6*2+6,2+519w90735h768 7L8j8l4(953Y173Q3Sa-7D7N987Q9a2{8n8.9k7e7{8ub48.7^9r4S9i814f6^a;a)4!7u4p4rb778b68s8o9:ba7B9o8db9bm5v5D9t3xa=97bc9m9r4Z3Oa^bE7M6Cbsa 3hb153a,bg7L7obfb08S3qbK8X8Z8#a`7r3Xb3bp5C9n8*b)a|bNbA4W9e964$bKb*4`bNb.8;b:8/a}4E7Rb 8-bR8f75b~9r7E4Bc38tc6bYc2b=ar5G9^6G9x2 3b5H0T0V0X0D04.
Exercice 8 : indice_et_max(liste)

Écrire le code de la fonction indice_et_max qui prend en paramètre une liste liste non vide et qui renvoie un couple formé de l'indice et de la valeur du plus grand élément de liste.

⚠ Attention cette fonction est plus difficile à écrire que maximum.

Indications

Si le maximum a pour indice 3 dans la queue(liste), alors il a pour indice 4 dans liste.

Exemples d'utilisation
>>> indice_et_max(cons(5, nil))
(0, 5)
>>> indice_et_max(cons(5, cons(9, cons(3, cons(8, nil)))))
(1, 9)

def indice_et_max(liste):
...
# Tests
assert indice_et_max(cons(5, nil)) == (0, 5)
assert indice_et_max(cons(5, cons(9, cons(3, cons(8, nil))))) == (1, 9)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wr8aPlkSe=_gn:5h/46qpo+b 9(d7uv)is2mf3y,tc10x;050C0j0P0e0H0g0I0z0Q0g0e0I0I0k010P0H0v010406050I0E0K0K0e0c0N040i0w0g0E0/0w0n050r0_0{0}0 0@0v04051f181i0r1f0@0C0H0F0%0)0+0-0q0H0m0q0g1w0q0P0=050Y0y0g0j1r0*0,011v1x1z1x0P1F1H1D0P0c1g0P0q0%120I0v0e0n0-0J011J1t010L0!0j0n0e0K0j1D1$1(1-1L1:1H1?1^0=0a0z0f0c0w0v0w0I0H150n0z0W1!0c0c0j0Q2d181{0n1g0r1Y2q1V1X1W1E0C1}0-1z0n1=2a1D1o1q0(1K2A0H2C0n0w2G1D0v2j1g2o2q2U0^1%2e2I1.2N0c0|0g0=0R2n2Y0?2X1|2!1L2$2(0=0J2,1(2.2o2z012?0e2)040M2`2p0@2}2;0-30320s352|2Y2~3b0=0p3e373g392 0w2%310=0t3l2/2Z1s2=3q2@040D3v383y3a3A3s040d3E3n3G3p3r320A3e1j2S182G2t0C1X2y3o0Q2O1_1g3X1h3V2W192-053%0W2T3N2J010h0=0W0L3T3F3_0b0=0z3 3^2#0L0=2L1o0Q0j0l0X0l0|0T452:3O0;040B4j3x3_0n0=1z0I0P0j4p2~4m0G0o3l0z4E44401.3{040H3~3/2{4G462=0=0j4v0l0F0H0W4y3o4m4o4N2p3w3h0=0u0E0j4-4Z4l0=4$2W4H4R044u4w4:3_4A4B4D4F524)3o4J2j0P0E0c174%044P4k4~4=4}1.0K0H0=0S5i1L4m0O3e5e4q2#0=4w4|5c544;4n5o3a4t0H4v4x5z4^0-4 514E5A3_4J0j0#5I4@4Q5L0=4C5c0652535K2 494g0e0T0H5D015q5s5P5v044h5.5c5t2~0w0=0k5=5(4s4K0n4b4d4f4h5/4#5/634,4.5U3:5(6b5J5W5)4`5G5y5V5f1.5M5!5$4F5?1L4J4L616l635_6B6r1L5~04020m0P0U6F5u4_5x6g2{6x5X5C6k6G5E6n5H6a0=506u6v5$6U3`0=57595b2U5|4!5h6X6P6Z0H5+5-5/6I0x5/5k2*6$045r5{6,6D5,5`6q6`5:6%5N6+5(5R5T755Z2U5#6*5%6l560X6:6O4z6^7d2~73045n6_7x767w3o636R754?6h6C5F6#7E6@040G0G3v0r3=0j2q2R7Z3W1p3Y2t2w2r0e1G7$0r3X0@7:0X0Z0#04.

def indice_et_max(liste):
if est_vide(...):
return (0, ...)
else:
i_maxi, maxi = indice_et_max(...)
if ...:
return (..., maxi)
else:
return (..., tete(liste))
# Tests
assert indice_et_max(cons(5, nil)) == (0, 5)
assert indice_et_max(cons(5, cons(9, cons(3, cons(8, nil))))) == (1, 9)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wr8aPlkSe=_gn:5h/46qpo+b 9(d7uv)is2mf3y,tc10x;050C0j0P0e0H0g0I0z0Q0g0e0I0I0k010P0H0v010406050I0E0K0K0e0c0N040i0w0g0E0/0w0n050r0_0{0}0 0@0v04051f181i0r1f0@0C0H0F0%0)0+0-0q0H0m0q0g1w0q0P0=050Y0y0g0j1r0*0,011v1x1z1x0P1F1H1D0P0c1g0P0q0%120I0v0e0n0-0J011J1t010L0!0j0n0e0K0j1D1$1(1-1L1:1H1?1^0=0a0z0f0c0w0v0w0I0H150n0z0W1!0c0c0j0Q2d181{0n1g0r1Y2q1V1X1W1E0C1}0-1z0n1=2a1D1o1q0(1K2A0H2C0n0w2G1D0v2j1g2o2q2U0^1%2e2I1.2N0c0|0g0=0R2n2Y0?2X1|2!1L2$2(0=0J2,1(2.2o2z012?0e2)040M2`2p0@2}2;0-30320s352|2Y2~3b0=0p3e373g392 0w2%310=0t3l2/2Z1s2=3q2@040D3v383y3a3A3s040d3E3n3G3p3r320A3e1j2S182G2t0C1X2y3o0Q2O1_1g3X1h3V2W192-053%0W2T3N2J010h0=0W0L3T3F3_0b0=0z3 3^2#0L0=2L1o0Q0j0l0X0l0|0T452:3O0;040B4j3x3_0n0=1z0I0P0j4p2~4m0G0o3l0z4E44401.3{040H3~3/2{4G462=0=0j4v0l0F0H0W4y3o4m4o4N2p3w3h0=0u0E0j4-4Z4l0=4$2W4H4R044u4w4:3_4A4B4D4F524)3o4J2j0P0E0c174%044P4k4~4=4}1.0K0H0=0S5i1L4m0O3e5e4q2#0=4w4|5c544;4n5o3a4t0H4v4x5z4^0-4 514E5A3_4J0j0#5I4@4Q5L0=4C5c0652535K2 494g0e0T0H5D015q5s5P5v044h5.5c5t2~0w0=0k5=5(4s4K0n4b4d4f4h5/4#5/634,4.5U3:5(6b5J5W5)4`5G5y5V5f1.5M5!5$4F5?1L4J4L616l635_6B6r1L5~04020m0P0U6F5u4_5x6g2{6x5X5C6k6G5E6n5H6a0=506u6v5$6U3`0=57595b2U5|4!5h6X6P6Z0H5+5-5/6I0x5/5k2*6$045r5{6,6D5,5`6q6`5:6%5N6+5(5R5T755Z2U5#6*5%6l560X6:6O4z6^7d2~73045n6_7x767w3o636R754?6h6C5F6#7E6@040G0G3v0r3=0j2q2R7Z3W1p3Y2t2w2r0e1G7$0r3X0@7:0X0Z0#04.

indice_et_max = lambda liste: (0, ...) if est_vide(...) else (lambda c: (..., c[1]) if ... else (..., tete(liste)))(indice_et_max(...))
# Tests
assert indice_et_max(cons(5, nil)) == (0, 5)
assert indice_et_max(cons(5, cons(9, cons(3, cons(8, nil))))) == (1, 9)
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013r[aPlkSe=_gn:h/qpo+b (d])uvis2mfy,tc10x;050x0i0J0d0C0f0D0v0K0f0d0D0D0j010J0C0r010406050D0A0F0F0d0b0H040h0s0f0A0)0s0m050p0:0=0@0_0.0r040519121c0p190.0x0C0B0X0Z0#0%0o0C0l0o0f1q0o0J0,050S0u0f0i1l0!0$011p1r1t1r0J1z1B1x0J0b1a0J0o0X0|0D0r0d0m0%0E011D1n010G0U0i0m0d0F0i1x1W1Y1%1F1*1B1-1/0,0a0v0e0b0s0r0s0D0C0 0m0v0Q1U0b0b0i0K27121=0m1a0p1S2k1P1R1Q1y0x1@0%1t0m1,241x1i1k0Y1E2u0C2w0m0s2A1x0r2d1a2i2k2O0/1X282C1(2H0b0?0f0,0L2h2S2k2L0i2k2A2n0x1R2s2U1F0K2I1:1a2,1b2M2R1Y2P2%052?0Q2N2S2t010m0,2F1i0K0i0k0R0k0?0N2$2~0v2}2T1m1F0s0,0j3j2j3l2i360g0,0Z0F0u0x0d3t043v352;0%38041t0D0J0i3F3m360+040n3F3H1?3J013U0w3R3w3!0F0C0,0M3(3I3o0%3U0I3X3S3!3L3P3P3/3Z3;3#0,3%13303)403L3N3}442~3_403U0z0z3^462D013y040C0G4i3:4k3L0i3O0k0B0C0Q3~3n4k3$4A363L0q0A0i4I4E3!4D4b2j4d4s3z0C3O3Q4O343 4C0,4g4q4Y1(4m0i0V4V2O3Y4B1(4N2Q4j4(3z1.3C3E4W4.4F0,0K4L4e0,3W4|4Q4:42514R04504W561F3U0c591(3+3-5i5f0,0y5m0%3q040t5q015k042#5d4?5n043@555B3K4 5v5g5v5x5z4=4r57040y4h5F5P1F4m4o4$4/1F3L5c5O4%5C5h5A5V0%5M5J5o5Z365s020l0J0O5=3`0,3|4,455-4104435(5!5H3M4T4a663T4!5|404)4+6f4Z645L3,043.5,5)3=0,5E4-5e685 5:6l6q67374S4U6z4g0z65616r6D4n0m3b3d3f3h6z6J4c5G6M4H4J606V624;6K6C486a6!4P6W4f4#4W0.0p322*1d2|0p2`2l2.122o6 0d1A6^6{1j0-120Q0S0U0D04.
Exercice 9 : concatene(liste1, liste2)

Écrire le code de la fonction concatene qui prend en paramètre deux listes liste1 et liste2, et qui renvoie une nouvelle liste contenant tous les éléments de liste1 puis ceux de liste2 dans le même ordre.

Indication

La concaténation de liste1 à liste2 c'est :

  • liste2 si liste1 est vide.
  • la tête de liste1 mise devant la concaténation de la queue de liste1 et de liste2.
Exemples d'utilisation
>>> concatene(cons(3, nil), cons(7, nil))
(3, (7, None))
>>> concatene(cons(2, cons(8, nil)), cons(1, cons(9, cons(7, nil))))
(2, (8, (1, (9, (7, None)))))

def concatene(liste1, liste2):
...
# Tests
assert concatene(cons(3, nil), cons(7, nil)) == (3, (7, None))
assert concatene(cons(2, cons(8, nil)), cons(1, cons(9, cons(7, nil)))) == (2, (8, (1, (9, (7, None)))))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h4/qpob (d)uvis2mf3y,tc1050y0i0K0d0C0f0D0w0L0f0d0D0D0j010K0C0t010406050D0A0F0F0d0c0I040h0u0f0A0%0u0m050r0.0:0=0@0,0t040517101a0r170,0y0C0B0V0X0Z0#0p0C0l0p0f1o0p0K0*050Q0v0f0i1j0Y0!011n1p1r1p0K1x1z1v0K0c180K0p0V0`0D0t0d0m0#0E011B1l010G0S0i0m0d0F0i1v1U1W1#1D1(1z1+1-0*0a0w0e0c0u0t0u0D0C0}0m0w0O1S0c0c0i0L25101:0m180r1Q2i1N1P1O1w0y1=0#1r0m1*221v1g1i0W1C2s0C2u0m0u2y1v0t2b182g2i2M0-1V262A1$2F0c0;0f0*0M2f2Q0+2P1;2S1D2U2W0*0E2!1W2$2g2r012+0d2X040H2/2h0,2=2)0#2^2`0q2}2;2Q2?330*0o361b2K102y2l0y1P2q31010L2G1.183h193f2O112#053o0O2L383m0g0*0O0G3d301k1D0b0*0w3I3C3K320G0*3o0m0L0d0K1*0i3P2(3R010)040x3$2R3(0m0*1r0D3Z2Z3w2:2%3.2B3)0*0J363O3J3}3:043=3Z2.3_2h3{2?3*0z0n36060w4j423Q3}3E040C3H4a044l3%440*0i3?0k0B0C0O3-4d0*3,4s4c3m45470i3^2O431$4e4g4s4i4k4W4J3(4o2b0K0A0c0 4s4u3|2T3;0C3?0i492M4V4j4Y4n4x0T3#4I4Q1D3*4T4?4W4X4 0#4!0P4%4)2M4+393U0~0D4E3m3*4H4P4m4-043Z3Z5i3(5k5s4w464/3@5v4R0*0z404*4_5o3V3X3Z2u5A504G5M320*0s0A0i5T5P3~3+5W4L5y4N5W4e5E5c5G2*4.4:4=3x565X0z0z4h103z0i2i2J5{3g1h3i2l2o2j0d1y5~0r3h0,680P0R0T04.

def concatene(liste1, liste2):
if est_vide(liste1):
return ...
else:
return cons(..., ...)
# Tests
assert concatene(cons(3, nil), cons(7, nil)) == (3, (7, None))
assert concatene(cons(2, cons(8, nil)), cons(1, cons(9, cons(7, nil)))) == (2, (8, (1, (9, (7, None)))))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h4/qpob (d)uvis2mf3y,tc1050y0i0K0d0C0f0D0w0L0f0d0D0D0j010K0C0t010406050D0A0F0F0d0c0I040h0u0f0A0%0u0m050r0.0:0=0@0,0t040517101a0r170,0y0C0B0V0X0Z0#0p0C0l0p0f1o0p0K0*050Q0v0f0i1j0Y0!011n1p1r1p0K1x1z1v0K0c180K0p0V0`0D0t0d0m0#0E011B1l010G0S0i0m0d0F0i1v1U1W1#1D1(1z1+1-0*0a0w0e0c0u0t0u0D0C0}0m0w0O1S0c0c0i0L25101:0m180r1Q2i1N1P1O1w0y1=0#1r0m1*221v1g1i0W1C2s0C2u0m0u2y1v0t2b182g2i2M0-1V262A1$2F0c0;0f0*0M2f2Q0+2P1;2S1D2U2W0*0E2!1W2$2g2r012+0d2X040H2/2h0,2=2)0#2^2`0q2}2;2Q2?330*0o361b2K102y2l0y1P2q31010L2G1.183h193f2O112#053o0O2L383m0g0*0O0G3d301k1D0b0*0w3I3C3K320G0*3o0m0L0d0K1*0i3P2(3R010)040x3$2R3(0m0*1r0D3Z2Z3w2:2%3.2B3)0*0J363O3J3}3:043=3Z2.3_2h3{2?3*0z0n36060w4j423Q3}3E040C3H4a044l3%440*0i3?0k0B0C0O3-4d0*3,4s4c3m45470i3^2O431$4e4g4s4i4k4W4J3(4o2b0K0A0c0 4s4u3|2T3;0C3?0i492M4V4j4Y4n4x0T3#4I4Q1D3*4T4?4W4X4 0#4!0P4%4)2M4+393U0~0D4E3m3*4H4P4m4-043Z3Z5i3(5k5s4w464/3@5v4R0*0z404*4_5o3V3X3Z2u5A504G5M320*0s0A0i5T5P3~3+5W4L5y4N5W4e5E5c5G2*4.4:4=3x565X0z0z4h103z0i2i2J5{3g1h3i2l2o2j0d1y5~0r3h0,680P0R0T04.

concatene = lambda liste1, liste2: ... if est_vide(liste1) else cons(..., ...)
# Tests
assert concatene(cons(3, nil), cons(7, nil)) == (3, (7, None))
assert concatene(cons(2, cons(8, nil)), cons(1, cons(9, cons(7, nil)))) == (2, (8, (1, (9, (7, None)))))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013raPlkSe=_gn:h/qpob (d)uvis2mfy,tc1050v0h0G0c0z0e0A0t0H0e0c0A0A0i010G0z0q010406050A0x0C0C0c0b0E040g0r0e0x0Z0r0l050o0*0,0.0:0(0q0405130|160o130(0v0z0y0R0T0V0X0n0z0k0n0e1k0n0G0$050M0s0e0h1f0U0W011j1l1n1l0G1t1v1r0G0b140G0n0R0?0A0q0c0l0X0B011x1h010D0O0h0l0c0C0h1r1Q1S1X1z1!1v1%1)0$0a0t0d0b0r0q0r0A0z0_0l0t0K1O0b0b0h0H210|1,0l140o1M2e1J1L1K1s0v1.0X1n0l1$1~1r1c1e0S1y2o0z2q0l0r2u1r0q27142c2e2I0)1R222w1Y2B0b0-0e0$0I2b2M2e2F0h2e2u2h0v1L2m2O1z0H2C1*142$152G2L1S2J2X052-0K2H2M2n010l0$2-0l0H0c0G1$0h2W2^0t2@2N1g1z0r0$0i3b2d3d2c300f0$0T0C0s0v0c3l043n2 2+0X32041n0A382V0}2`3o3B010#040F3x3z1-3M3D3F380B3x3e303O0m3R3!3U3r0z3G0h3Y3J3c3)3g0X3q040z0D3(3L3?310$0h3G0j0y0z0K3Z3}2x3N0$0u473A3~3V3,3H4d3T3~3O0w3|4e493^0h0P3a3:3m3=493D340A4j3f493O4c4v2~4k4y0$38384C3#4b4O3*3E4h0h3I2K481Y4m3Q4H3S4D2P330`36382q4R4l4Q4H4x4)040p0x0h4`4/4E4;4X4p4@3W4V4}4Z0$0w4#2I4%304g3-3/504J56040w4n4H0(0o2|2!172?0o2;2f2(0|2i5x0c1u5q5t1d0%0|0K0M0O0A04.
Exercice 10 : renverse(liste)

Écrire le code de la fonction renverse qui prend en paramètre une liste liste et qui renvoie une nouvelle liste correspondant aux éléments de liste dans l'ordre inverse.

Vous pouvez utiliser concatene.

Exemples d'utilisation
>>> renverse(cons(5, cons(8, cons(6, nil))))
(6, (8, (5, None)))
>>> renverse(cons(1, cons(2, cons(3, cons(4, cons(5, cons(6, nil)))))))
(6, (5, (4, (3, (2, (1, None))))))

def renverse(liste):
...
# Tests
assert renverse(cons(5, cons(8, cons(6, nil)))) == (6, (8, (5, None)))
assert renverse(cons(1, cons(2, cons(3, cons(4, cons(5, cons(6, nil))))))) == (6, (5, (4, (3, (2, (1, None))))))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h4/qpob (d)uvis2mf3y,tc1050y0i0K0d0C0f0D0w0L0f0d0D0D0j010K0C0t010406050D0A0F0F0d0c0I040h0u0f0A0%0u0m050r0.0:0=0@0,0t040517101a0r170,0y0C0B0V0X0Z0#0p0C0l0p0f1o0p0K0*050Q0v0f0i1j0Y0!011n1p1r1p0K1x1z1v0K0c180K0p0V0`0D0t0d0m0#0E011B1l010G0S0i0m0d0F0i1v1U1W1#1D1(1z1+1-0*0a0w0e0c0u0t0u0D0C0}0m0w0O1S0c0c0i0L25101:0m180r1Q2i1N1P1O1w0y1=0#1r0m1*221v1g1i0W1C2s0C2u0m0u2y1v0t2b182g2i2M0-1V262A1$2F0c0;0f0*0M2f2Q0+2P1;2S1D2U2W0*0E2!1W2$2g2r012+0d2X040H2/2h0,2=2)0#2^2`0q2}2;2Q2?330*0o361b2K102y2l0y1P2q31010L2G1.183h193f2O112#053o0O2L383m0g0*0O0G3d301k1D0b0*0w3I3C3K320G0*2b0m0B0i0c0D0i3P2(3R010)040x3$2R3(0m0*1r0D0K3#3w2:2%3.2B3)0*0z0n36060w443O3J3}3E040C3H3_2h463Q3}3:040i3?0k0B0C0O3-2?3*3,4d3B3%4h3;0C3?3^2O471$3*4042454I4f4w1$492b0K0A0c0 4u4K3|2T0*0m0S4H453{2?490i0T4B3x4D1D3*414u434J444$3D3U0P4Q4S2M4U390*3o0m0L0d3@2u4q3m4s583/4`3W3Y3!5b3}5a4u4^5c040s0A0i5p5h4E0*4t4C4g4W043=3@5s4.3 0z0J364 3m4i520D5C0#5j5w4L2*0*3@5B5k4-5O5u5N2@4y4A5!4F5G4T5l4x044Y0f5(5E42103z0i2i2J5_3g1h3i2l2o2j0d1y5|0r3h0,660P0R0T04.

def renverse(liste):
if ...:
...
else:
...
# Tests
assert renverse(cons(5, cons(8, cons(6, nil)))) == (6, (8, (5, None)))
assert renverse(cons(1, cons(2, cons(3, cons(4, cons(5, cons(6, nil))))))) == (6, (5, (4, (3, (2, (1, None))))))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h4/qpob (d)uvis2mf3y,tc1050y0i0K0d0C0f0D0w0L0f0d0D0D0j010K0C0t010406050D0A0F0F0d0c0I040h0u0f0A0%0u0m050r0.0:0=0@0,0t040517101a0r170,0y0C0B0V0X0Z0#0p0C0l0p0f1o0p0K0*050Q0v0f0i1j0Y0!011n1p1r1p0K1x1z1v0K0c180K0p0V0`0D0t0d0m0#0E011B1l010G0S0i0m0d0F0i1v1U1W1#1D1(1z1+1-0*0a0w0e0c0u0t0u0D0C0}0m0w0O1S0c0c0i0L25101:0m180r1Q2i1N1P1O1w0y1=0#1r0m1*221v1g1i0W1C2s0C2u0m0u2y1v0t2b182g2i2M0-1V262A1$2F0c0;0f0*0M2f2Q0+2P1;2S1D2U2W0*0E2!1W2$2g2r012+0d2X040H2/2h0,2=2)0#2^2`0q2}2;2Q2?330*0o361b2K102y2l0y1P2q31010L2G1.183h193f2O112#053o0O2L383m0g0*0O0G3d301k1D0b0*0w3I3C3K320G0*2b0m0B0i0c0D0i3P2(3R010)040x3$2R3(0m0*1r0D0K3#3w2:2%3.2B3)0*0z0n36060w443O3J3}3E040C3H3_2h463Q3}3:040i3?0k0B0C0O3-2?3*3,4d3B3%4h3;0C3?3^2O471$3*4042454I4f4w1$492b0K0A0c0 4u4K3|2T0*0m0S4H453{2?490i0T4B3x4D1D3*414u434J444$3D3U0P4Q4S2M4U390*3o0m0L0d3@2u4q3m4s583/4`3W3Y3!5b3}5a4u4^5c040s0A0i5p5h4E0*4t4C4g4W043=3@5s4.3 0z0J364 3m4i520D5C0#5j5w4L2*0*3@5B5k4-5O5u5N2@4y4A5!4F5G4T5l4x044Y0f5(5E42103z0i2i2J5_3g1h3i2l2o2j0d1y5|0r3h0,660P0R0T04.

renverse = lambda liste: ... if ... else ...
# Tests
assert renverse(cons(5, cons(8, cons(6, nil)))) == (6, (8, (5, None)))
assert renverse(cons(1, cons(2, cons(3, cons(4, cons(5, cons(6, nil))))))) == (6, (5, (4, (3, (2, (1, None))))))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013raPlkSe=_gn:h/qpob (d)uvis2mfy,tc1050v0h0G0c0z0e0A0t0H0e0c0A0A0i010G0z0q010406050A0x0C0C0c0b0E040g0r0e0x0Z0r0l050o0*0,0.0:0(0q0405130|160o130(0v0z0y0R0T0V0X0n0z0k0n0e1k0n0G0$050M0s0e0h1f0U0W011j1l1n1l0G1t1v1r0G0b140G0n0R0?0A0q0c0l0X0B011x1h010D0O0h0l0c0C0h1r1Q1S1X1z1!1v1%1)0$0a0t0d0b0r0q0r0A0z0_0l0t0K1O0b0b0h0H210|1,0l140o1M2e1J1L1K1s0v1.0X1n0l1$1~1r1c1e0S1y2o0z2q0l0r2u1r0q27142c2e2I0)1R222w1Y2B0b0-0e0$0I2b2M2e2F0h2e2u2h0v1L2m2O1z0H2C1*142$152G2L1S2J2X052-0K2H2M2n010l0$270l0y0h0b0A0h2W2^0t2@2N1g1z0r0$0i3b2d3d2c300f0$0T0C0s0v0c3l043n2 2+0X32041n0A0G3a0}2`3o3B010#040m3x3z1-3M3D0l0O3R3e3p0$0z0D3Y3L3g3C0$0h3G0j0y0z0K3x3Z3M3O0u3?3)2x313r0z3G3I2K3|1Y3O0w3(3A3*013q040h0P422X3S3f3}3D2-0l0H0c3H2q3{493}3_4s3T4a3D3436384g2^3@4a4v3J4E441z3D0p0x0h4O4w4j450$3`4I2d4F4k3 414R30460w0F484x4Z044m0A4$3^4U4;4y0$3H3H4@4u4?4W2~4,2P4!4{4 4Y4T044)4+4S4L0$3W0e4|570w474 0(0o2|2!172?0o2;2f2(0|2i5v0c1u5o5r1d0%0|0K0M0O0A04.