Parcours de listes et de textes

Rappels sur les parcours de listes et de textes

En Python, il y a principalement 2 méthodes pour parcourir les listes Python (et donc les tableaux) et les textes.

def parcours_par_valeur(donnees):
    for val in donnees:
        print(val)  # Quelque chose avec val
Exemples
>>> parcours_par_valeur([3, -2, 4])
3
-2
4
>>> parcours_par_valeur("AVION")
A
V
I
O
N
def parcours_par_indice(donnees):
    for i in range(len(donnees)):
        print(i, donnees[i])  # Quelque chose avec donnees[i] et/ou i
Exemples
>>> parcours_par_indice([3, -2, 4])
0 3
1 -2
2 4
>>> parcours_par_indice("AVION")
0 A
1 V
2 I
3 O
4 N
Vous pouvez tester les deux fonctions ici

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : /∞

Lors d'un parcours par valeur, on n'a pas accès à l'indice et uniquement à la valeur. Pour choisir entre les deux, il faut donc se poser la question suivante : Est-ce que j'ai besoin de connaître l'indice de la valeur que je regarde ?

  • Si la réponse est oui, il faut faire un parcours par indice.
  • Si la réponse est non, vous pouvez utiliser une parcours par valeur. Mais un parcours par indice fonctionnerait aussi.
Exercice 1 : compter(symbole, texte)

Compléter le code de la fonction compter qui prend en paramètres une texte d'un seul caractère symbole ainsi qu'un texte texte et qui renvoie le nombre de fois où symbole apparaît dans texte.

Exemples
>>> compter('b', 'bulle')
1
>>> compter('l', 'bulle')
2
>>> compter('v', 'bulle')
0

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.128013wxovP +n(eubr,= ."l:gha0k75ytm4i631d2sS)/pcf010C0c0v0p0y0l0E080J0l0p0E0E0h0k0v0y0I0k000i010E0d0w0w0p0f0u000F050l0d0#050a010H0*0,0.0:0(0C0y06080-0f0r0C05030a0Z0B0k080E0v0u0l0c0Z180n0y0a0m0B0j0s0c0w080B1x1h0'0L150T0V0X0Z0o0y0n0o0l1L0o0v0&010O0e1m1G0W0Y0k1K1M1O1M0v1U1m1S0v0f001T0o0T0?0E0I0p1e0k0D1h0U1Y0Z0K0Q0c0a0p0w0c1S1=1@1X1I0k201m23250&0208070f050I050E0y0_0a080M1:0f0f0c0J2r0|280a1-0H0v0o2E1+1-2J1T0C2a1Z1O0a222o1S14161|2b2Q2S2V1S0I2x1-2C2E2(0)1?2s2X1Z0a050f0-0l0&0B2B2,1D2C2O0Z2:2=0p2@000D2`1@2|2,2~0k312?0&0A372D0(2}2.302;3e000x3h39293l3c3n330&0t3r3j3a3u3d3x000z3r0|2%0c2E2V2I0C2K2N3u0J050M2U151-3K2'2{3I3T0M3!3t1H1Z0r0&0M0K3r082+3(1}3c0K0&3T0w0I0v0c0f3I3k3)0Z0%000b413C433c0&0E0u0w0e0?0c483=2b450g3/3;2-4a0a0&3}043}4j4q3?450G0m3A084E3:423?4s000J4o4H2b050&0h4M493?0w0y0&0q4D4F4p3b3+000K2;4S4k2/4c4)4y4O030&1r4-3b4J4u4w0}3#4N1Z454C4{380i4F554G4T2b4%0y3.522D574*304,5d005f4.1Z4P000h4R5j5l4@4c4e4g1m4x3b504Z56564#3D3_4?3u5o5r2(5t5G4K5I4a5o095Q4U4W002_5j544!4}0Z4%2x0v0d0f0{5s5F4r5H5Z0|3%3L3J2&0|3N0|0v3P5{1,5{0p1V5?0H3N0(653X670M0O0Q0E00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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.2g rytphvd",4a5oSkn(+3:7c=1/0um)liseP xwf6b010d0D090h0B0A0C0F0s0A0h0C0C0t0e090B0a0e0006010C0x0y0y0h0708000k0j0A0x0#0j0m010v0*0,0.0:0(0d0B0c0F0-070l0d0j0H0m0Z0u0e0F0C09080A0D0Z18050B0m0q0u030r0D0y0F0u1x1h0'0L150T0V0X0Z0b0B050b0A1L0b090&010O0K1m1G0W0Y0e1K1M1O1M091U1m1S0907001T0b0T0?0C0a0h1e0e041h0U1Y0Z0I0Q0D0m0h0y0D1S1=1@1X1I0e201m23250&020F0E070j0a0j0C0B0_0m0F0M1:07070D0s2r0|280m1-0v090b2E1+1-2J1T0d2a1Z1O0m222o1S14161|2b2Q2S2V1S0a2x1-2C2E2(0)1?2s2X1Z0m0j070-0A0&0u2B2,1D2C2O0Z2:2=0h2@00042`1@2|2,2~0e312?0&0p372D0(2}2.302;3e000g3h39293l3c3n330&0i3r3j3a3u3d3x000J3r0|2%0D2E2V2I0d2K2N3u0s0j0M2U151-3K2'2{3I3T0M3!3t1H1Z0l0&0M0I3r0F2+3(1}3c0I0&3T0y0a090D073I3k3)0Z0%000n413C433c0&0C080y0K0?0D483=2b450f3/3;2-4a0m0&3}0G3}4j4q3?450z0q3A0F4E3:423?4s000s4o4H2b0j0&0t4M493?0y0B0&0w4D4F4p3b3+000I2;4S4k2/4c4)4y4O0H0&1r4-3b4J4u4w0}3#4N1Z454C4{38064F554G4T2b4%0B3.522D574*304,5d005f4.1Z4P000t4R5j5l4@4c4e4g1m4x3b504Z56564#3D3_4?3u5o5r2(5t5G4K5I4a5o0o5Q4U4W002_5j544!4}0Z4%2x090x070{5s5F4r5H5Z0|3%3L3J2&0|3N0|093P5{1,5{0h1V5?0v3N0(653X670M0O0Q0C00
Exercice 2 : position(val, nombres)

Compléter le code de la fonction position qui prend en paramètres un entier val ainsi qu'une liste d'entiers nombres et renvoie l'indice de la première occurrence de val dans nombres s'il y en a une et -1 sinon.

Exemples
>>> position(7, [5, -1, 7, 4, 6, 4, 2])
2
>>> position(4, [5, -1, 7, 4, 6, 4, 2])
3
>>> position(0, [5, -1, 7, 4, 6, 4, 2])
-1

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.128013wr,.ntds7e2a)/f o]k5"c1(g[-:liu Pbyh4mpv=S301090c080e0w0v0a0i0o0v0e0a0a0H0n080w0F0n000y010a0x0E0E0e040B000I0j0v0x0!0j07010g0)0+0-0/0'090w0G0i0,040l090j03070Y0p0n0i0a080B0v0c0Y170r0w070u0p060b0c0E0i0p1w1g0&0K140S0U0W0Y0C0w0r0C0v1K0C080%010N0A1l1F0V0X0n1J1L1N1L081T1l1R0804001S0C0S0=0a0F0e1d0n0d1g0T1X0Y0h0P0c070e0E0c1R1;1?1W1H0n1~1l22240%020i0z040j0F0j0a0w0^070i0L1/04040c0o2q0{27071,0g080C2D1*1,2I1S09291Y1N07212n1R13151{2a2P2R2U1R0F2w1,2B2D2'0(1=2r2W1Y070j040,0v0%0p2A2+1C2B2N0Y2/2;0e2?000d2_1?2{2+2}0n302=0%0J362C0'2|2-2~2:3d000D3g38283k3b3m320%0m3q0{2$0c2D2U2H092J2M3t0o0j0L2T141,3B2&2`3z3K0L3R3s1G1Y0l0%0L0h3q0i2*3X1|3b0h0%2m2o2z0|3S3j3Y0Y0$000q3z3?3*070%0G323|393t3_053&3(2,3@3b0%2/0E0A2w0a443)2a3_0f0u3q0y0i4s3'3}2a3!000h2:494v2.0%0w4B454c1b4E0`3;374u4H3~0A0%041?0r0c4k4b3*3_3{4M2C4a3a074R002d4X3a4!4,3t40004f4h0c4j4$3W4Y4m0%0f4o4q4t534O4l3Z4E3%4`554|4D4=0j4g4i4/4c3_0s5i3~4E5m4}000k4G560Y0j0%0H0H5t5c2~41434`4&460%4p4`4r545M5G4c4x2w080x044L2'5b4'5o5K535O3*5Q0M5T5V2`5X3t5w000t5p1Y0E0w2@4q0{3U3C3A2%0{3E0{083G611+610e1U5{0g3E0'6a3O6c0L0N0P0a00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.128013ge25vm(3dth][4P, sca-1nblup/y=7i"fo.r:kS)w 010b040c0m0y0r0k0J0l0r0m0k0k0w0z0c0y0t0z000j010k0s08080m0D0v000G0B0r0s0!0B0p010u0)0+0-0/0'0b0y070J0,0D0F0b0B0I0p0Y0o0z0J0k0c0v0r040Y17030y0p0E0o0C0x04080J0o1w1g0&0K140S0U0W0Y0d0y030d0r1K0d0c0%010N0q1l1F0V0X0z1J1L1N1L0c1T1l1R0c0D001S0d0S0=0k0t0m1d0z051g0T1X0Y0A0P040p0m08041R1;1?1W1H0z1~1l22240%020J0h0D0B0t0B0k0y0^0p0J0L1/0D0D040l2q0{270p1,0u0c0d2D1*1,2I1S0b291Y1N0p212n1R13151{2a2P2R2U1R0t2w1,2B2D2'0(1=2r2W1Y0p0B0D0,0r0%0o2A2+1C2B2N0Y2/2;0m2?00052_1?2{2+2}0z302=0%0a362C0'2|2-2~2:3d000g3g38283k3b3m320%063q0{2$042D2U2H0b2J2M3t0l0B0L2T141,3B2&2`3z3K0L3R3s1G1Y0F0%0L0A3q0J2*3X1|3b0A0%2m2o2z0|3S3j3Y0Y0$00093z3?3*0p0%07323|393t3_0i3&3(2,3@3b0%2/080q2w0k443)2a3_0H0E3q0j0J4s3'3}2a3!000A2:494v2.0%0y4B454c1b4E0`3;374u4H3~0q0%0D1?03044k4b3*3_3{4M2C4a3a0p4R002d4X3a4!4,3t40004f4h044j4$3W4Y4m0%0H4o4q4t534O4l3Z4E3%4`554|4D4=0B4g4i4/4c3_0f5i3~4E5m4}000e4G560Y0B0%0w0w5t5c2~41434`4&460%4p4`4r545M5G4c4x2w0c0s0D4L2'5b4'5o5K535O3*5Q0M5T5V2`5X3t5w000n5p1Y080y2@4q0{3U3C3A2%0{3E0{0c3G611+610m1U5{0u3E0'6a3O6c0L0N0P0k00
Parcours en sens inverse

Il est parfois utile de parcourir une liste Python, ou un texte, en partant du dernier élément et en allant vers le premier. On rappelle que l'indice du dernier élément est n-1, où n est la longueur de la liste ou du texte.

On peut parcourir les indices dans l'ordre inverse en utilisant les paramètres supplémentaires de range. Pour rappel, range(de, vers, pas) part de de et va de pas en pas jusqu'à vers, en s'arrêtant juste avant de l'atteindre. En mettant -1 pour le pas, on parcourt les nombres dans l'ordre inverse.

def parcours_inverse1(donnees):
    for i in range(len(donnees)-1, -1, -1): # on part du dernier indice 
        print(i, donnees[i])
Exemples
>>> parcours_inverse1([3, -2, 4])
2 4
1 -2
0 3
>>> parcours_inverse1("AVION")
4 N
3 O
2 I
1 V
0 A

Si on ne veut pas utiliser les paramètres supplémentaires de range, il faut calculer l'indice de l'élément regardé à chaque tour de boucle. Si on note i la variable de boucle, n la longueur de la liste ou du texte, alors à chaque tour de boucle, il faut regarder l'élément d'indice n-1-i.

def parcours_inverse2(donnees):
    n = len(donnees)
    for i in range(n):
        indice = n - 1 - i
        print(indice, donnees[indice])
Exemples
>>> parcours_inverse2([3, -2, 4])
2 4
1 -2
0 3
>>> parcours_inverse2("AVION")
4 N
3 O
2 I
1 V
0 A
Vous pouvez tester les deux fonctions ici

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : /∞

Vous pouvez utiliser ces parcours, ou pas, pour l'exercice suivant.

Exercice 3 : derniere_position(val, nombres)

Compléter le code de la fonction derniere_position qui prend en paramètres un entier val ainsi qu'une liste d'entiers nombres et renvoie l'indice de la dernière occurrence de val dans nombres s'il y en a une et -1 sinon.

Exemples
>>> derniere_position(7, [5, -1, 7, 4, 6, 4, 2])
2
>>> derniere_position(4, [5, -1, 7, 4, 6, 4, 2])
5
>>> derniere_position(0, [5, -1, 7, 4, 6, 4, 2])
-1

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.128013bkf_Pp./2(t=n]yhecmdvS5a[rlg37,)"i4 1:su wo-010m0j0d0q0A0t0F0C0k0t0q0F0F0e0z0d0A080z000H010F0G0l0l0q0s0h000o0J0t0G0#0J0f010a0*0,0.0:0(0m0A0n0C0-0s040m0J0I0f0Z0D0z0C0F0d0h0t0j0Z180u0A0f0E0D090w0j0l0C0D1x1h0'0L150T0V0X0Z0i0A0u0i0t1L0i0d0&010O031m1G0W0Y0z1K1M1O1M0d1U1m1S0d0s001T0i0T0?0F080q1e0z0b1h0U1Y0Z050Q0j0f0q0l0j1S1=1@1X1I0z201m23250&020C070s0J080J0F0A0_0f0C0M1:0s0s0j0k2r0|280f1-0a0d0i2E1+1-2J1T0m2a1Z1O0f222o1S14161|2b2Q2S2V1S082x1-2C2E2(0)1?2s2X1Z0f0J0s0-0t0&0D2B2,1D2C2O0Z2:2=0q2@000b2`1@2|2,2~0z312?0&0v372D0(2}2.302;3e000B3h39293l3c3n330&0p3r0|2%0j2E2V2I0m2K2N3u0k0J0M2U151-3C2'2{3A3L0M3S3t1H1Z040&0M053r0C2+3Y1}3c053$0j0s0f0A3/0j062n2p2A0}3T3k3Z0Z0%000c3A3~3+0f0&0n33453a3u420x3'3)2-403c0&2:0l032x0F4c3*2b420y0E3r0H0C4A3(462b3#00052;4h4D2/0&0A4J4d4k1c4M0{3|384C4P47030&0s1@0u0j4s4j3+42444U2D4i3b0f4Z002e4'3b4*4@3u48004n4p0j4r4,3X4(4u0&0y4`4Q0&0K593+0l0A2^5d56004g534W4t1Z0J5b5i1Z5f5h534.4e0&5l2(5n555p5r5w4K1o5g002_5G4X5j4w4y4B5R5C3b4F0A3&5m5x4k4|4~4q5s410&0r5&4l004N5M5o5'000g4O5/0z5q000e0e5?5D30494b5.5~0z424x534z5S6a5Z3+4F2x0d0G3:5}4/4M5Q4B6c4E4!0N6h4T5B6o5E005c633b5u5K4y0|3V3D3B2&0|3F0|0d3H6L1,6L0q1V6G0a3F0(6U3P6W0M0O0Q0F00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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)p5buo3/nl.]7e:, t[=mays2vr1fgwdc-ki4P(h "S_010y0g0k0o0C0c0q0H0z0c0o0q0q0m0I0k0C040I000j010q070n0n0o0t0p000J080c070#080b010a0*0,0.0:0(0y0C0s0H0-0t0B0y080x0b0Z0u0I0H0q0k0p0c0g0Z180w0C0b0h0u0d0f0g0n0H0u1x1h0'0L150T0V0X0Z0G0C0w0G0c1L0G0k0&010O061m1G0W0Y0I1K1M1O1M0k1U1m1S0k0t001T0G0T0?0q040o1e0I0r1h0U1Y0Z0v0Q0g0b0o0n0g1S1=1@1X1I0I201m23250&020H0E0t0804080q0C0_0b0H0M1:0t0t0g0z2r0|280b1-0a0k0G2E1+1-2J1T0y2a1Z1O0b222o1S14161|2b2Q2S2V1S042x1-2C2E2(0)1?2s2X1Z0b080t0-0c0&0u2B2,1D2C2O0Z2:2=0o2@000r2`1@2|2,2~0I312?0&09372D0(2}2.302;3e000D3h39293l3c3n330&053r0|2%0g2E2V2I0y2K2N3u0z080M2U151-3C2'2{3A3L0M3S3t1H1Z0B0&0M0v3r0H2+3Y1}3c0v3$0g0t0b0C3/0g0K2n2p2A0}3T3k3Z0Z0%000F3A3~3+0b0&0s33453a3u420i3'3)2-403c0&2:0n062x0q4c3*2b42030h3r0j0H4A3(462b3#000v2;4h4D2/0&0C4J4d4k1c4M0{3|384C4P47060&0t1@0w0g4s4j3+42444U2D4i3b0b4Z002e4'3b4*4@3u48004n4p0g4r4,3X4(4u0&034`4Q0&0A593+0n0C2^5d56004g534W4t1Z085b5i1Z5f5h534.4e0&5l2(5n555p5r5w4K1o5g002_5G4X5j4w4y4B5R5C3b4F0C3&5m5x4k4|4~4q5s410&0l5&4l004N5M5o5'000e4O5/0I5q000m0m5?5D30494b5.5~0I424x534z5S6a5Z3+4F2x0k073:5}4/4M5Q4B6c4E4!0N6h4T5B6o5E005c633b5u5K4y0|3V3D3B2&0|3F0|0k3H6L1,6L0o1V6G0a3F0(6U3P6W0M0O0Q0q00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.128013l1r=d3-: h)wm sg,2vP6n]upiaobf_k.4[(eScy75"/t01070D0L0t0s030h0b0F030t0h0h060J0L0s0r0J000g010h0q0f0f0t050G000E0u030q0$0u0o010K0+0-0/0;0)070s0l0b0.050y070u0e0o0!040J0b0h0L0G030D0!190i0s0o0a040z0H0D0f0b041y1i0(0M160U0W0Y0!0c0s0i0c031M0c0L0'010P0v1n1H0X0Z0J1L1N1P1N0L1V1n1T0L05001U0c0U0@0h0r0t1f0J0k1i0V1Z0!0w0R0D0o0t0f0D1T1?1^1Y1J0J211n24260'020b0m050u0r0u0h0s0`0o0b0N1;05050D0F2s0}290o1.0K0L0c2F1,1.2K1U072b1!1P0o232p1T15171}2c2R2T2W1T0r2y1.2D2F2)0*1@2t2Y1!0o0u050.030'042C2-1E2D2P0!2;2?0t2^000k2{1^2}2-300J322@0'08382E0)2~2/312=3f000A3i3a2a3m3d3o340'0I3s3k3b3v3e3y000n3s0}2&0D2F2W2J072L2O3v0F0u0N2V161.3L2(2|3J3U0N3#3u1I1!0y0'0N0w3s0b2,3)1~3d0w3-0D050o0s3{0D0x2o2q2B0~3$3l3*0!0&000C3J483@0o0'0l344e3D490J4b0j3:3=2.4n4h002;0f0v2y0h4l3?2c4b0d0a3B0b4J3;4f2c4v2y2o0o0h0D4r4M1!0u0'064U4m3@4X00094C4t3@0f0s2_4I4K4s3c3,000w2=4!4D2:0'0s4_4)2c1d4|0|46394L4#4N0v0'051^0i4T552E4:3v4b4d5g3(502:5a002f4(3c5k5t3E0'4x4z0D4B5m5i4n4F4G4.4K4/4V0!4=0s3/5m574`315y0u4y4A5w5F0'0B5Y4g4|5$4E0'0p4~3c4%064Z5Q5E5%004j035'1!4b4H5m0g5J605K584{004P0{4S5+3v5-694u5&5}5J5;2c4=2y0L0q3|6c5=664R5f2)0)0K3&3M3K2'0}3O0}0L3Q6C1-6C0t1W6x0K3O6u6M6A0O0Q0S00
Exercice 4 : indice_egal_valeurs(nombres)

Compléter le code de la fonction indice_egal_valeurs qui prend en paramètre une liste d'entiers nombres et renvoie True s'il existe un indice i tel que nombres[i]==i et False sinon.

Exemples
>>> indice_egal_valeur([7, 1, 8])  # nombres[1] = 1
True
>>> indice_egal_valeur([9, -7, 2, 9, 6])  # nombres[2] = 2
True
>>> indice_egal_valeur([1, 2, 3, 4])
False

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.128013k:2]gaFe/"[oip1l smv45(yTh)u=cSn. _t3b7frdwP010I0a0C080f0i0k0j0w0i080k0k0v0c0C0f0g0c000A010k0u0l0l080H0q000x0e0i0u0#0e0y010b0*0,0.0:0(0I0f0m0j0-0H030I0e0J0y0Z0h0c0j0k0C0q0i0a0Z18070f0y040h0z0F0a0l0j0h1x1h0'0L150T0V0X0Z0s0f070s0i1L0s0C0&010O0E1m1G0W0Y0c1K1M1O1M0C1U1m1S0C0H001T0s0T0?0k0g081e0c051h0U1Y0Z0G0Q0a0y080l0a1S1=1@1X1I0c201m23250&020j0K0H0e0g0e0k0f0_0y0j0M1:0H0H0a0w2r0|280y1-0b0C0s2E1+1-2J1T0I2a1Z1O0y222o1S14161|2b2Q2S2V1S0g2x1-2C2E2(0)1?2s2X1Z0y0e0H0-0i0&0h2B2,1D2C2O0Z2:2=082@00052`1@2|2,2~0c312?0&0D372D0(2}2.302;3e000n3h39293l3c3n330&0o3r0|2%0a2E2V2I0I2K2N3u0w0e0M2U151-3C2'2{3A3L0M3S3t1H1Z030&0M0G3r0j2+3Y1}3c0G0&1r140w0a0B0a07330B0m330a0u0H3A3k3Z0Z0%000p413a3u0y0&2:0l0E2x0k483*2b450t043r0A0j4q3(423+3#000G2;3'3)2-433c3.4z4t2b1c3.0{0}2{4s494C0y0E0&0H1@070a4i4B3+45474L384A3b4Q0&2e4X3b4!4+4a4c0e4e4g4.4C4l4m4o4r4|4N4j3!3.3&4$2D4~4Y2b4b004d4f0a4h543X571Z450d4@3+590f5l4k0&064F4O3+0e0&0v0v5t50304E5f4&3u454n5f4p4}5L5F4C4v2x0C3~4K2(563b030w0&0r0H0u4W5J4|5N4u4S0N5S5A5h0Z5X0&09330k5%2(0(0b3V3D3B2&0|3F0|0C3H631,63081V5}0b3F5`6d610N0P0R00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.1280133fn)u1Th[ms.Ptw(ig:p5vdl Sr/yb2a=]o47 _ekcF"010p0G0g0y0j0q0d0r0I0q0y0d0d0z0K0g0j0m0K000E010d070c0c0y0t0v000s0B0q070#0B05010u0*0,0.0:0(0p0j0o0r0-0t0H0p0B0h050Z080K0r0d0g0v0q0G0Z180k0j050l080e0D0G0c0r081x1h0'0L150T0V0X0Z0a0j0k0a0q1L0a0g0&010O0w1m1G0W0Y0K1K1M1O1M0g1U1m1S0g0t001T0a0T0?0d0m0y1e0K0x1h0U1Y0Z040Q0G050y0c0G1S1=1@1X1I0K201m23250&020r0f0t0B0m0B0d0j0_050r0M1:0t0t0G0I2r0|28051-0u0g0a2E1+1-2J1T0p2a1Z1O05222o1S14161|2b2Q2S2V1S0m2x1-2C2E2(0)1?2s2X1Z050B0t0-0q0&082B2,1D2C2O0Z2:2=0y2@000x2`1@2|2,2~0K312?0&03372D0(2}2.302;3e000C3h39293l3c3n330&0n3r0|2%0G2E2V2I0p2K2N3u0I0B0M2U151-3C2'2{3A3L0M3S3t1H1Z0H0&0M043r0r2+3Y1}3c040&1r140I0G0F0G0k330F0o330G070t3A3k3Z0Z0%000i413a3u050&2:0c0w2x0d483*2b45060l3r0E0r4q3(423+3#00042;3'3)2-433c3.4z4t2b1c3.0{0}2{4s494C050w0&0t1@0k0G4i4B3+45474L384A3b4Q0&2e4X3b4!4+4a4c0B4e4g4.4C4l4m4o4r4|4N4j3!3.3&4$2D4~4Y2b4b004d4f0G4h543X571Z450b4@3+590j5l4k0&0A4F4O3+0B0&0z0z5t50304E5f4&3u454n5f4p4}5L5F4C4v2x0g3~4K2(563b0H0I0&090t074W5J4|5N4u4S0N5S5A5h0Z5X0&0J330d5%2(0(0u3V3D3B2&0|3F0|0g3H631,630y1V5}0u3F5`6d610N0P0R00
Exercice 5 : moyenne(valeurs)

Compléter le code de la fonction moyenne qui prend en paramètres une liste non vide de nombres valeurs et renvoie la moyenne de ces nombres. On n'utilisera pas la fonction len.

Comparaison de nombres réels

On rappelle que la représentation des nombres réels en Python est basée sur le principe de la virgule flottante et qu'à cause de cela, deux expressions mathématiquement égales ne donnent pas forcément le même résultat en Python.

Pour vérifier le résultat de la fonction moyenne avec le résultat attendu, nous utiiserons la fonction indiscernables qui prend deux nombres et renvoie un booléen indiquant si la valeur absolue de leur différence est inférieure à \(10^{-15}\).

En mathématiques, on appelle cette différence la distance entre les deux nombres. On vérifie donc que leur distance est infinitésimale.

Exemples
>>> 0.1 * 3 == 0.3  # Erreur de virgule flottante classique
False
>>> indiscernables(0.1*3, 0.3)
True
Exemples
>>> moyenne([5])
5.0
>>> moyenne([5, 15, 8])
9.333333333333334
>>> moyenne([5, 15, 10])
10.0

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.128013lg3")26vyei =hp_:rbn4-Skot51/.;P,f7a&c0(u89+ wdms010N0c0s0C0d030P0e0E030C0P0P0f060s0d0h06000L010P0H0O0O0C0k0b000p0r030H0(0r0m010v0/0;0?0^0-0N0d0a0e0=0k0q0N0r0M0m0&0u060e0P0s0b030c0&1d040d0m0j0u0w0B0c0O0e0u1C1m0,0Q1a0Y0!0$0&0g0d040g031Q0g0s0+010T0l1r1L0#0%061P1R1T1R0s1Z1r1X0s0k001Y0g0Y0{0P0h0C1j06081m0Z1%0&0A0V0c0m0C0O0c1X1`1|1$1N06251r282a0+020e0y0k0r0h0r0P0d0~0m0e0R1^0k0k0c0E2w122d0m1=0v0s0g2J1:1=2O1Y0N2f1&1T0m272t1X191b222g2V2X2!1X0h2C1=2H2J2-0.1{2x2$1&0m0r0k0=030+1E2G2;1I2H2T0&2^2`0C2|000e08301|322;3406362{2}053d2I0-332?352_3k3a0n3n3f2e3r3i3t382}0t3x3p3g3A3j3D3a093G2:3z1M2@3C390e0B3O3q3R3s373U0I3X3I3Z3B3#2}0J3&3Q233)3u0u0F3x122*0c2J2!2N0N2P2S3A0E0r0R2Z1a1=3_2,313@430R4a3.2g0q0+0R0A3x0e3P2=3(0m0A0+1w190P0E0c0k281!0c0P3@3Y3/0*000G4E3'3/0m0+2^0O0l2C0u4K4g1&4H0z4m4o3h4N004P4R0c3c134b4F2g4H070j3G0e4=4n4,1&4i002C0s0H4z4Z4^350l0+0C0l4D4*3e4!3A4H4J592I5b4q4O0r4Q4S514L2g0r0+0o5n4V355j5l4(4U4p4G0+075t5A5p0+0D030s0x5E3h0O4s001F0o0u3F5f0,3H5u064`4k5M3J5P0O0r0b272W5z3h5d5,3J0+0a380c4~582/52064.4:5V0L4?4@5o2@0+0P5k2a5$3(5q000f6a3/0O0d0+3?60625h4M4O0l0i2^0s4C6f5G6d6v1&6h6j4;4?6n4h0+0A2_6y5v4%0r6t6J061h4t115V635Y4$5=1r5^5/3(4H5~2-61626D5{4$670;0c6O6c6e6T6E65006,696=5{6c0K6O4$6s6.6l6(4=6?6K0m6q725_316U5F1&6:706p6r6M6u6{640&6}6O6A5Q6C765{4`4|4~6S2-7e4#6668737B776P0+0v7i4%7a7l7c3e0-0v4d3`3^2+123|120s3~7!1;7!561r3{477S3|7,0S0U0W00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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_br4dm=.a21h+/yuv;S(k5:n6 &l-g0P8weoc,7pf"9st3)i 01070B0L0b0O0u0K0P0D0u0b0K0K090I0L0O0G0I000s010K0i08080b050h000l0C0u0i0(0C0q010g0/0;0?0^0-070O0j0P0=050n070C0A0q0&0d0I0P0K0L0h0u0B0&1d0w0O0q0p0d0a0F0B080P0d1C1m0,0Q1a0Y0!0$0&0e0O0w0e0u1Q0e0L0+010T041r1L0#0%0I1P1R1T1R0L1Z1r1X0L05001Y0e0Y0{0K0G0b1j0I0c1m0Z1%0&0H0V0B0q0b080B1X1`1|1$1N0I251r282a0+020P0y050C0G0C0K0O0~0q0P0R1^05050B0D2w122d0q1=0g0L0e2J1:1=2O1Y072f1&1T0q272t1X191b222g2V2X2!1X0G2C1=2H2J2-0.1{2x2$1&0q0C050=0u0+1E2G2;1I2H2T0&2^2`0b2|000P0c301|322;340I362{2}0M3d2I0-332?352_3k3a063n3f2e3r3i3t382}0o3x3p3g3A3j3D3a0r3G2:3z1M2@3C390P0F3O3q3R3s373U0z3X3I3Z3B3#2}0J3&3Q233)3u0d0x3x122*0B2J2!2N072P2S3A0D0C0R2Z1a1=3_2,313@430R4a3.2g0n0+0R0H3x0P3P2=3(0q0H0+1w190K0D0B05281!0B0K3@3Y3/0*000m4E3'3/0q0+2^08042C0d4K4g1&4H0E4m4o3h4N004P4R0B3c134b4F2g4H0N0p3G0P4=4n4,1&4i002C0L0i4z4Z4^35040+0b044D4*3e4!3A4H4J592I5b4q4O0C4Q4S514L2g0C0+0v5n4V355j5l4(4U4p4G0+0N5t5A5p0+0t0u0L0k5E3h084s001F0v0d3F5f0,3H5u0I4`4k5M3J5P080C0h272W5z3h5d5,3J0+0j380B4~582/520I4.4:5V0s4?4@5o2@0+0K5k2a5$3(5q00096a3/080O0+3?60625h4M4O04032^0L4C6f5G6d6v1&6h6j4;4?6n4h0+0H2_6y5v4%0C6t6J0I1h4t115V635Y4$5=1r5^5/3(4H5~2-61626D5{4$670;0B6O6c6e6T6E65006,696=5{6c0f6O4$6s6.6l6(4=6?6K0q6q725_316U5F1&6:706p6r6M6u6{640&6}6O6A5Q6C765{4`4|4~6S2-7e4#6668737B776P0+0g7i4%7a7l7c3e0-0g4d3`3^2+123|120L3~7!1;7!561r3{477S3|7,0S0U0W00
Exercice 6 : moyenne_ponderee(valeurs)

Compléter le code de la fonction moyenne_ponderee qui prend en paramètres une liste non vide valeurs de couples de nombres (note, coeff) et renvoie la moyenne pondérée correspondant à ces notes. On suppose que tous les coefficients sont positifs et qu'il y a au moins un coefficient non nul.

Calcul d'une moyenne pondérée

Pour calculer une moyenne pondérée, il faut aditionner le produit de chacune des notes avec le coefficient correspondant et diviser par la somme des coefficients.

Par exemple, avec 5 notes \(n_1\), \(n_2\), ..., \(n_5\) et les coefficients correspondants \(c_1\), \(c_2\), ..., \(c_5\), la moyenne pondérée est :

\(\dfrac{n_1\times c_1 + n_2\times c_2 + n_3\times c_3 + n_4\times c_4 + n_5\times c_5}{c_1+c_2+c_3+c_4+c_5}\)

Parcours d'une liste de couples

On rappelle que lors d'un parcours par valeur d'une liste composée de couples, on peut décomposer chacun des couples de la manière suivante :

def parcours_liste_couples(couples):
    for a, b in couples:
        print(a, b)
Exemples
>>> parcours_liste_couples([("voiture", 3), ("vélo", 5), ("moto", 1)])
voiture 3
vélo 5
moto 1
Exemples
>>> moyenne_ponderee([(5, 1), (15, 1)])
10.0
>>> moyenne_ponderee([(5, 1), (15, 2)]) # 5*1 + 15*2 = 35 -> 35/3
11.666666666666666
>>> moyenne_ponderee([(5, 1), (15, 3)]) # 5*1 + 15*3 = 50 -> 50/4
12.5
>>> moyenne_ponderee([(5, 1), (15, 3), (20, 0)]) # le coeff 0 ne compte pas
12.5

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.1280130lf56as,"r y+(;)v7g2S3.et_nPk9& 1bi4po=uhcw*/8-md:010P0q0r080B04090d0I040809090F0b0r0B0D0b000y01090G0O0O080c0e000n0E040G0)0E0t010L0:0=0@0_0.0P0B0j0d0?0c0v0P0E0J0t0'0z0b0d090r0e040q0'1e0l0B0t0Q0z0p0k0q0O0d0z1D1n0-0R1b0Z0#0%0'0H0B0l0H041R0H0r0,010U0A1s1M0$0&0b1Q1S1U1S0r1!1s1Y0r0c001Z0H0Z0|090D081k0b0m1n0!1&0'050W0q0t080O0q1Y1{1}1%1O0b261s292b0,020d0u0c0E0D0E090B100t0d0S1_0c0c0q0I2x132e0t1?0L0r0H2K1;1?2P1Z0P2g1'1U0t282u1Y1a1c232h2W2Y2#1Y0D2D1?2I2K2.0/1|2y2%1'0t0E0c0?040,1F2H2=1J2I2U0'2_2{082}000d0m311}332=350b372|2~0o3e2J0.342@362`3l3b0C3o3g2f3s3j3u392~063y3q3h3B3k3E3b073H2;3A1N2^3D3a0d0k3P3r3S3t383V0M3Y3J3!3C3$2~0w3'3R243*3v0z033y132+0q2K2#2O0P2Q2T3B0I0E0S2!1b1?3`2-323^440S4b3/2h0v0,0S053y0d3Q2?3)0t050,1x1a090I0q0c291#0q093^3Z3:0+000g4F3(3:0t0,2_0O0A2D0z4L4h1'4I0a4n4p3i4O004Q4S0q3d144c4G2h4I0i0Q3H0d4?4o4-1'4j002D0r0G4A4!4_360A0,080A4E4+3f4#3B4I4K5a2J5c4r4P0E4R4T524M2h0E0,0N5o4W365k5m4)4V4q4H0,0i5u5B5q0,0x040r0h5F3i0O4t001G0N0z3G5g0-3I5v0b4{4l5N3K5Q0O0E0e282X0s2t0t0S2D0q5A3i5e5?3K0,2D0:5K080r592:530b4/4;5W0y4@4^5p2^0,095l2b0s2_0r4D5%3)5r000F6m3:0O0B0,3@686a5i4N6e6g0q0s440q050562326b5Z6o6q5W6L5G1'6t6v4=4@6z4i0,052`6r2h4%6j5=5W6X4X0,4Z6P6*5w006F6H6$1'1i4u126.644%5|0G5~615_3)4I672.696a6W6}6B0=6D6'6J3f6Q3i6N6@6:6f7e6i0E6k7h2J7j3B6o0f7m3j5k6k743:6o0K7D6%0,6=4m6x7a4?6/7A007o6h7K7t3b7P7l6|6c7n6C6E0E6G6I7z7x7z4%7K6V7O644{4}506{2.7v5j7R7$7g7)0,0L7+7d7T7&6H7V0.0L4e3{3_2,133}130r408g1=8g571s3|48883}8q0T0V0X00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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(4etanr=*2Pw -i,&pbg1 dhl"u7y8/fo039c5sS6)_;v+k.:m010p0506070h0r0F0o0D0r070F0F0a0s060h0k0s000f010F0t0Q0Q07090v000G0z0r0t0)0z08010x0:0=0@0_0.0p0h0L0o0?090N0p0z0e080'0n0s0o0F060v0r050'1e0m0h080P0n0O0u050Q0o0n1D1n0-0R1b0Z0#0%0'0q0h0m0q0r1R0q060,010U0l1s1M0$0&0s1Q1S1U1S061!1s1Y0609001Z0q0Z0|0F0k071k0s0c1n0!1&0'0y0W0508070Q051Y1{1}1%1O0s261s292b0,020o0d090z0k0z0F0h10080o0S1_0909050D2x132e081?0x060q2K1;1?2P1Z0p2g1'1U08282u1Y1a1c232h2W2Y2#1Y0k2D1?2I2K2.0/1|2y2%1'080z090?0r0,1F2H2=1J2I2U0'2_2{072}000o0c311}332=350s372|2~0B3e2J0.342@362`3l3b043o3g2f3s3j3u392~0E3y3q3h3B3k3E3b0H3H2;3A1N2^3D3a0o0u3P3r3S3t383V0w3Y3J3!3C3$2~0C3'3R243*3v0n0A3y132+052K2#2O0p2Q2T3B0D0z0S2!1b1?3`2-323^440S4b3/2h0N0,0S0y3y0o3Q2?3)080y0,1x1a0F0D0509291#050F3^3Z3:0+00034F3(3:080,2_0Q0l2D0n4L4h1'4I0i4n4p3i4O004Q4S053d144c4G2h4I0I0P3H0o4?4o4-1'4j002D060t4A4!4_360l0,070l4E4+3f4#3B4I4K5a2J5c4r4P0z4R4T524M2h0z0,0g5o4W365k5m4)4V4q4H0,0I5u5B5q0,0j0r060K5F3i0Q4t001G0g0n3G5g0-3I5v0s4{4l5N3K5Q0Q0z0v282X0J2t080S2D055A3i5e5?3K0,2D0:5K0706592:530s4/4;5W0f4@4^5p2^0,0F5l2b0J2_064D5%3)5r000a6m3:0Q0h0,3@686a5i4N6e6g050J44050y0y62326b5Z6o6q5W6L5G1'6t6v4=4@6z4i0,0y2`6r2h4%6j5=5W6X4X0,4Z6P6*5w006F6H6$1'1i4u126.644%5|0t5~615_3)4I672.696a6W6}6B0=6D6'6J3f6Q3i6N6@6:6f7e6i0z6k7h2J7j3B6o0M7m3j5k6k743:6o0b7D6%0,6=4m6x7a4?6/7A007o6h7K7t3b7P7l6|6c7n6C6E0z6G6I7z7x7z4%7K6V7O644{4}506{2.7v5j7R7$7g7)0,0x7+7d7T7&6H7V0.0x4e3{3_2,133}1306408g1=8g571s3|48883}8q0T0V0X00
Exercice 7 : effectifs(donnees)

Compléter le code de la fonction effectifs qui prend en paramètre une liste donnees contenant des entiers ou des textes et qui renvoie un dictionnaire qui associe à chaque valeur apparaissant dans donnees le nombre de fois où elle y apparaît.

Par exemple dans la liste [4, 1, 2, 4, 2, 2, 6] il y a une fois la valeur 1, trois fois la valeur 2, deux fois la valeur 4 et une fois la valeur 6. Le résultat attendu pour cette liste sera donc le dictionnaire {1: 1, 2: 3, 4: 2, 6:1}.

On rappelle aussi que dans un dictionnaire, l'ordre dans lequel on donne les valeurs n'a pas d'importance. Ainsi, les dictionnaires {1: 1, 2: 3, 4: 2, 6:1} et {4: 2, 1: 1, 2: 3, 6: 1} sont égaux.

Exemples
>>> effectifs([4, 1, 2, 4, 2, 2, 6])
{4: 2, 1: 1, 2: 3, 6: 1}
>>> assert effectifs(["chien", "chat", "chien", "chien", "poisson", "chat"])
{'chien': 3, 'chat': 2, 'poisson': 1}

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.1280136(mu=les:8P2_h4pr.t3n]71+"5[ /k)bcagi yodSwfv010H090l0B0D080a0E0A080B0a0a070s0l0D0i0s000v010a0605050B0j0F000I0G08060$0G0n010w0+0-0/0;0)0H0D0L0E0.0j0x0H0G0J0n0!0q0s0E0a0l0F08090!190C0D0n0b0q0k0p09050E0q1y1i0(0M160U0W0Y0!0g0D0C0g081M0g0l0'010P0z1n1H0X0Z0s1L1N1P1N0l1V1n1T0l0j001U0g0U0@0a0i0B1f0s0e1i0V1Z0!0K0R090n0B05091T1?1^1Y1J0s211n24260'020E0d0j0G0i0G0a0D0`0n0E0N1;0j0j090A2s0}290n1.0w0l0g2F1,1.2K1U0H2b1!1P0n232p1T15171}2c2R2T2W1T0i2y1.2D2F2)0*1@2t2Y1!0n0G0j0.080'0q2C2-1E2D2P0!2;2?0B2^000e2{1^2}2-300s322@0'0m382E0)2~2/312=3f000h3i3a2a3m3d3o340'0t3s3k3b3v3e3y00033B2,3u1I2:3x350p3J3l3M3n33350c3s0}2&092F2W2J0H2L2O3v0A0G0N2V161.3!2(2|3Y3+0N3=3L1~0s0x0'0N0K3s0E3K2.3T3d0K0'090K0K2z0$0K0a3Y3S3|0&00044i3D470n400{2S094h0~3?4j2c4l0y0b3B0E4F444z2:400D3+0f4b4d2A43453c0G0'074R4I310z4K4Q4x394S3v4l040y4E4G4'473~000K2=4X4p3|4r000L4@3{2c1d0'1s4}464_4s0n4u4w2+4Y0s4l4D4%3j4G5i4H4^2c4:0D425g005k4~4J4{544T0J520|5q5s552c4`154M4O4e4o5t0!5e4,5j5j4.56005G0G4N4c5J5q5R4A0'0u5K5D5u4|5Z5c4l0o5w3v4U004W5B5!5u5U5W4P0l5&3c4l5%5*5l5(5}4(0'5-5?5c5:0r5.47050D2_5O5Q5c4:090S0965475N5q0v5P5P5@314#5V5I4$5b635M5$6p5S5)6C5L5d676d3|5:5=2)5C3c6f6h6s5i6w3}0'2y0l060j5A6R6Y5F4L6z5X6B2|0)0w3^3#3Z2'0}3%0}0l3'6{1-6{0B1W6?0w3%6:766_0O0Q0S00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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]h= 1ls)35nig[oc.:d27 +t(f4v/"aky_8PSerbmpw6u010l0E0q0x0e08090o0i080x0909050w0q0e0I0w000601090L0H0H0x0F0z000D0h080L0$0h0d010v0+0-0/0;0)0l0e0u0o0.0F0y0l0h0J0d0!070w0o090q0z080E0!190f0e0d0k070j0n0E0H0o071y1i0(0M160U0W0Y0!040e0f04081M040q0'010P0G1n1H0X0Z0w1L1N1P1N0q1V1n1T0q0F001U040U0@090I0x1f0w0m1i0V1Z0!0s0R0E0d0x0H0E1T1?1^1Y1J0w211n24260'020o0C0F0h0I0h090e0`0d0o0N1;0F0F0E0i2s0}290d1.0v0q042F1,1.2K1U0l2b1!1P0d232p1T15171}2c2R2T2W1T0I2y1.2D2F2)0*1@2t2Y1!0d0h0F0.080'072C2-1E2D2P0!2;2?0x2^000m2{1^2}2-300w322@0'0b382E0)2~2/312=3f000t3i3a2a3m3d3o340'0c3s3k3b3v3e3y000K3B2,3u1I2:3x350n3J3l3M3n33350B3s0}2&0E2F2W2J0l2L2O3v0i0h0N2V161.3!2(2|3Y3+0N3=3L1~0w0y0'0N0s3s0o3K2.3T3d0s0'0E0s0s2z0$0s093Y3S3|0&000r4i3D470d400{2S0E4h0~3?4j2c4l0a0k3B0o4F444z2:400e3+0A4b4d2A43453c0h0'054R4I310G4K4Q4x394S3v4l0r0a4E4G4'473~000s2=4X4p3|4r000u4@3{2c1d0'1s4}464_4s0d4u4w2+4Y0w4l4D4%3j4G5i4H4^2c4:0e425g005k4~4J4{544T0J520|5q5s552c4`154M4O4e4o5t0!5e4,5j5j4.56005G0h4N4c5J5q5R4A0'0g5K5D5u4|5Z5c4l035w3v4U004W5B5!5u5U5W4P0q5&3c4l5%5*5l5(5}4(0'5-5?5c5:0p5.470H0e2_5O5Q5c4:0E0S0E65475N5q065P5P5@314#5V5I4$5b635M5$6p5S5)6C5L5d676d3|5:5=2)5C3c6f6h6s5i6w3}0'2y0q0L0F5A6R6Y5F4L6z5X6B2|0)0v3^3#3Z2'0}3%0}0q3'6{1-6{0x1W6?0v3%6:766_0O0Q0S00

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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

.128013mo:th.r(ufvSn) [+5P3gw"=yb]id2a_l1c8spe/7k46 010v0F060x0u0z0D0h0B0z0x0D0D0q0p060u0E0p000L010D0b03030x090r000e040z0b0$040f010G0+0-0/0;0)0v0u0d0h0.090I0v040o0f0!0A0p0h0D060r0z0F0!190n0u0f050A080H0F030h0A1y1i0(0M160U0W0Y0!070u0n070z1M07060'010P0s1n1H0X0Z0p1L1N1P1N061V1n1T0609001U070U0@0D0E0x1f0p0w1i0V1Z0!0c0R0F0f0x030F1T1?1^1Y1J0p211n24260'020h0l09040E040D0u0`0f0h0N1;09090F0B2s0}290f1.0G06072F1,1.2K1U0v2b1!1P0f232p1T15171}2c2R2T2W1T0E2y1.2D2F2)0*1@2t2Y1!0f04090.0z0'0A2C2-1E2D2P0!2;2?0x2^000w2{1^2}2-300p322@0'0m382E0)2~2/312=3f000J3i3a2a3m3d3o340'0k3s3k3b3v3e3y000K3B2,3u1I2:3x350H3J3l3M3n33350C3s0}2&0F2F2W2J0v2L2O3v0B040N2V161.3!2(2|3Y3+0N3=3L1~0p0I0'0N0c3s0h3K2.3T3d0c0'0F0c0c2z0$0c0D3Y3S3|0&000a4i3D470f400{2S0F4h0~3?4j2c4l0g053B0h4F444z2:400u3+0y4b4d2A43453c040'0q4R4I310s4K4Q4x394S3v4l0a0g4E4G4'473~000c2=4X4p3|4r000d4@3{2c1d0'1s4}464_4s0f4u4w2+4Y0p4l4D4%3j4G5i4H4^2c4:0u425g005k4~4J4{544T0o520|5q5s552c4`154M4O4e4o5t0!5e4,5j5j4.56005G044N4c5J5q5R4A0'0i5K5D5u4|5Z5c4l0t5w3v4U004W5B5!5u5U5W4P065&3c4l5%5*5l5(5}4(0'5-5?5c5:0j5.47030u2_5O5Q5c4:0F0S0F65475N5q0L5P5P5@314#5V5I4$5b635M5$6p5S5)6C5L5d676d3|5:5=2)5C3c6f6h6s5i6w3}0'2y060b095A6R6Y5F4L6z5X6B2|0)0G3^3#3Z2'0}3%0}063'6{1-6{0x1W6?0G3%6:766_0O0Q0S00