Aller au contenu

Python - Bon départ

I. Parcours de listes et de chaînes de caractères⚓︎

Ce paragraphe a principalement été rédigé par Romain Janvier

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.

🐍 Script Python
def parcours_par_valeur(donnees):
    for val in donnees:
        print(val)  # Quelque chose avec val
🐍 Console Python
>>> parcours_par_valeur([3, -2, 4])
3
-2
4
>>> parcours_par_valeur("AVION")
A
V
I
O
N
🐍 Script Python
def parcours_par_indice(donnees):
    for i in range(len(donnees)):
        print(i, donnees[i])  # Quelque chose avec donnees[i] et/ou i
🐍 Console Python
>>> 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)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Lors d'un parcours par valeur, on n'a pas accès à l'indice mais 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 un 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ètre un 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.

🐍 Console Python
>>> 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)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013f:6S0d=4yr/oxpg2mcb1w3ve l,+P5)tiknua(sh050g0y0G0L0H0A0N0z0s0A0L0N0N0h010G0H0o010406050N0K0r0r0L0k0j040e0m0A0K0)0m0J050l0:0=0@0_0.0o040519121c0l190.0g0H0x0X0Z0#0%0O0H0p0O0A1q0O0G0,050S0t0A0y1l0!0$011p1r1t1r0G1z1B1x0G0k1a0G0O0X0|0N0o0L0J0%0q011D1n010b0U0y0J0L0r0y1x1W1Y1%1F1*1B1-1/0,0a0z0D0k0m0o0m0N0H0 0J0z0Q1U0k0k0y0s27121=0J1a0l1S2k1P1R1Q1y0g1@0%1t0J1,241x1i1k0Y1E2u0H2w0J0m2A1x0o2d1a2i2k2O0/1X282C1(2H0k0?0A0,0u2h2S0-2R1?2U1F2W2Y0,0q2$1Y2(2i2t012-0L2Z040w2;2j0.2@2+0%2`2|0i2 2?2S2^350,0E38313a332_0m2X2{0,0d381d2M122A2n0g1R2s3i0s2I1:1a3t1b3r2Q132%053z0Q2N3h1m1F0I0,0Q0b3p323O0%0v0,0z3U3N2D2_0b0,3z0r0o0G0y0k3#2*3W010+040M3;2T3?0J0,0N0j0r0t0|0y3{2^3^0B383!3V3%3~043.0n3.463i3^0F0c3f0z4p4b3$2V3*4a2)3|3%0m0,0h4v4c1(0r0H0,0f4o4q4w2^3Q040b3k4C4s2,3 4R3=4y3Y042F4V4x4t4f0y4h453H2=4L4k0,4n4,304q4@4r4W1(4N0H3T4=044_4$4T040N4#2^4z040h4B4 513b3 41431B4j3?3^4;2O064^5p5d3i4e0s563i585b2O5r3}4u5c4.3?580C5v3?4F2!4J4p5E3%4N2d0G0K0k115D4D535u4 0.0l3K0y2k2L5(3s1j3u2n2q2l0L1A5+0l3t5#0Q0S0U0N04.

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

.128013f:6S0d=4yr/oxpg2mcb1w3ve l,+P5)tiknua(sh050g0y0G0L0H0A0N0z0s0A0L0N0N0h010G0H0o010406050N0K0r0r0L0k0j040e0m0A0K0)0m0J050l0:0=0@0_0.0o040519121c0l190.0g0H0x0X0Z0#0%0O0H0p0O0A1q0O0G0,050S0t0A0y1l0!0$011p1r1t1r0G1z1B1x0G0k1a0G0O0X0|0N0o0L0J0%0q011D1n010b0U0y0J0L0r0y1x1W1Y1%1F1*1B1-1/0,0a0z0D0k0m0o0m0N0H0 0J0z0Q1U0k0k0y0s27121=0J1a0l1S2k1P1R1Q1y0g1@0%1t0J1,241x1i1k0Y1E2u0H2w0J0m2A1x0o2d1a2i2k2O0/1X282C1(2H0k0?0A0,0u2h2S0-2R1?2U1F2W2Y0,0q2$1Y2(2i2t012-0L2Z040w2;2j0.2@2+0%2`2|0i2 2?2S2^350,0E38313a332_0m2X2{0,0d381d2M122A2n0g1R2s3i0s2I1:1a3t1b3r2Q132%053z0Q2N3h1m1F0I0,0Q0b3p323O0%0v0,0z3U3N2D2_0b0,3z0r0o0G0y0k3#2*3W010+040M3;2T3?0J0,0N0j0r0t0|0y3{2^3^0B383!3V3%3~043.0n3.463i3^0F0c3f0z4p4b3$2V3*4a2)3|3%0m0,0h4v4c1(0r0H0,0f4o4q4w2^3Q040b3k4C4s2,3 4R3=4y3Y042F4V4x4t4f0y4h453H2=4L4k0,4n4,304q4@4r4W1(4N0H3T4=044_4$4T040N4#2^4z040h4B4 513b3 41431B4j3?3^4;2O064^5p5d3i4e0s563i585b2O5r3}4u5c4.3?580C5v3?4F2!4J4p5E3%4N2d0G0K0k115D4D535u4 0.0l3K0y2k2L5(3s1j3u2n2q2l0L1A5+0l3t5#0Q0S0U0N04.
Exercice 2 : position(val, nombres)

Compléter le code de la fonction position qui prend en paramètre 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 None sinon.

🐍 Console Python
>>> 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])
None

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

.128013f:Sd=4yr/Nopg2mcb1w3ve[ l,P5)ti]knua(sh050e0w0E0K0F0z0M0y0q0z0K0M0M0f010E0F0m010406050M0J0p0p0K0i0h040d0l0z0J0(0l0I050j0/0;0?0^0-0m040518111b0j180-0e0F0v0W0Y0!0$0N0F0n0N0z1p0N0E0+050R0r0z0w1k0Z0#011o1q1s1q0E1y1A1w0E0i190E0N0W0{0M0m0K0I0$0o011C1m010b0T0w0I0K0p0w1w1V1X1$1E1)1A1,1.0+0a0y0B0i0l0m0l0M0F0~0I0y0P1T0i0i0w0q26111;0I190j1R2j1O1Q1P1x0e1?0$1s0I1+231w1h1j0X1D2t0F2v0I0l2z1w0m2c192h2j2N0.1W272B1%2G0i0=0z0+0s2g2R0,2Q1=2T1E2V2X0+0o2#1X2%2h2s012,0K2Y040u2:2i0-2?2*0$2_2{0g2~2=2R2@340+0C371c2L112z2m0e1Q2r32010q2H1/193i1a3g2P122$053p0P2M393n0H0+0P0b3e311l1E0t0+0y3J3D3L330b0+22242f3x2;2(2S3S010*040L3Q2)3%0I0+0v2`3,3$2C3(0+0A373P3K3^3/042G0p0r2c0M3?2@3)0D0c37060y4e3}3R3^3F040b0l0i3|3#3a0+0F4o3~1%0l3N042E4t4h2U0r0+0i1X0n0w473n3)3+3Z2i4p3n0I4D041_4J3%4L4V3 0+42440w464N3C3-3^494a4c4f4:4g4+1%4j0F3I4)4=3@2U4!0l43454Y1%3)0x532+4r570$3)0G4A4?1E0l0+0f0f5e4}58043;0z5a3_044b4)4d4;5x4P3%4j2c0E0J0i104{5z4Z4y4/4f5I4@4E0Q5E5G2N4|2@0H0q0+0k0 4I5v113A0w2j2K5)3h1i3j2m2p2k0K1z5,0j3i0-5_0Q0S0U04.

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

.128013f:Sd=4yr/Nopg2mcb1w3ve[ l,P5)ti]knua(sh050e0w0E0K0F0z0M0y0q0z0K0M0M0f010E0F0m010406050M0J0p0p0K0i0h040d0l0z0J0(0l0I050j0/0;0?0^0-0m040518111b0j180-0e0F0v0W0Y0!0$0N0F0n0N0z1p0N0E0+050R0r0z0w1k0Z0#011o1q1s1q0E1y1A1w0E0i190E0N0W0{0M0m0K0I0$0o011C1m010b0T0w0I0K0p0w1w1V1X1$1E1)1A1,1.0+0a0y0B0i0l0m0l0M0F0~0I0y0P1T0i0i0w0q26111;0I190j1R2j1O1Q1P1x0e1?0$1s0I1+231w1h1j0X1D2t0F2v0I0l2z1w0m2c192h2j2N0.1W272B1%2G0i0=0z0+0s2g2R0,2Q1=2T1E2V2X0+0o2#1X2%2h2s012,0K2Y040u2:2i0-2?2*0$2_2{0g2~2=2R2@340+0C371c2L112z2m0e1Q2r32010q2H1/193i1a3g2P122$053p0P2M393n0H0+0P0b3e311l1E0t0+0y3J3D3L330b0+22242f3x2;2(2S3S010*040L3Q2)3%0I0+0v2`3,3$2C3(0+0A373P3K3^3/042G0p0r2c0M3?2@3)0D0c37060y4e3}3R3^3F040b0l0i3|3#3a0+0F4o3~1%0l3N042E4t4h2U0r0+0i1X0n0w473n3)3+3Z2i4p3n0I4D041_4J3%4L4V3 0+42440w464N3C3-3^494a4c4f4:4g4+1%4j0F3I4)4=3@2U4!0l43454Y1%3)0x532+4r570$3)0G4A4?1E0l0+0f0f5e4}58043;0z5a3_044b4)4d4;5x4P3%4j2c0E0J0i104{5z4Z4y4/4f5I4@4E0Q5E5G2N4|2@0H0q0+0k0 4I5v113A0w2j2K5)3h1i3j2m2p2k0K1z5,0j3i0-5_0Q0S0U04.
Sortie anticipée

Dans cet exercice nous avons un return dans la boucle. il y a donc sortie anticipée de la boucle s'il n'est pas nécessaire de la terminer.

Ce procédé est souvent utilisé et permet de gagner en efficacité.

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.

🐍 Script Python
def parcours_inverse1(donnees):
    for i in range(len(donnees)-1, -1, -1): # on part du dernier indice 
        print(i, donnees[i])
🐍 Console Python
>>> 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.

🐍 Script Python
def parcours_inverse2(donnees):
    n = len(donnees)
    for i in range(n):
        indice = n - 1 - i
        print(indice, donnees[indice])
🐍 Console Python
>>> 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)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

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ètre 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 None sinon.

🐍 Console Python
>>> 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])
None

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

.128013f:Sd=4-yr/Nopg2mcb1w3ve[ l,P5)ti]knua(_sh050e0x0F0L0G0A0O0z0r0A0L0O0O0f010F0G0n010406050O0K0q0q0L0j0i040d0m0A0K0*0m0J050k0;0?0^0`0/0n04051a131d0k1a0/0e0G0w0Y0!0$0(0P0G0o0P0A1r0P0F0-050T0s0A0x1m0#0%011q1s1u1s0F1A1C1y0F0j1b0F0P0Y0}0O0n0L0J0(0p011E1o010b0V0x0J0L0q0x1y1X1Z1(1G1+1C1.1:0-0a0z0C0j0m0n0m0O0G100J0z0R1V0j0j0x0r28131?0J1b0k1T2l1Q1S1R1z0e1^0(1u0J1-251y1j1l0Z1F2v0G2x0J0m2B1y0n2e1b2j2l2P0:1Y292D1)2I0j0@0A0-0t2i2T0.2S1@2V1G2X2Z0-0p2%1Z2)2j2u012.0L2!040v2=2k0/2^2,0(2{2}0g302@2T2_360-0D391e2N132B2o0e1S2t34010r2J1;1b3k1c3i2R142(053r0R2O3b3p0I0-0R0b3g331n1G0u0-0z3L3F3N350b3I0x0j0J0G3Y0x0N24262h3z2?2*2U3U010,040M3S2+3:0J0-0w2|3^3/2E3;0-0B393R3M413{042I0q0s2e0O3 2_3=0E0c39060z4n463T413H040b0m0j453.3c0-0G4x471)0m3P042G4C4q2W0s0-0j1Z0o0x4g3p3=3@3,2k4y3p0J4M041{4S3:4U4(480-4b4d0x4f4W3E3_414i4+4E0-0h4`1G0q0G2#4~0(3=444=4p4@4{044}4=4Y3:50525d4D1G554J591G0m4|53015g042$5i4K5k0-4j4l4o5C58401)4s0G3K575e4,4a0m4c4e5r3=0y5r494B5w5n540-0H5m5F5o0-0f0f5$4z043}0A5R0-4k4=4m5D5_5L5G4N0S0K3Z5,4Z4A5B4o5{1G4s2e0F5 125K5j0(0I0r0-0l114R5@133C0x2l2M6p3j1k3l2o2r2m0L1B6s0k3k0/6C0S0U0W04.

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

.128013f:Sd=4-yr/Nopg2mcb1w3ve[ l,P5)ti]knua(_sh050e0x0F0L0G0A0O0z0r0A0L0O0O0f010F0G0n010406050O0K0q0q0L0j0i040d0m0A0K0*0m0J050k0;0?0^0`0/0n04051a131d0k1a0/0e0G0w0Y0!0$0(0P0G0o0P0A1r0P0F0-050T0s0A0x1m0#0%011q1s1u1s0F1A1C1y0F0j1b0F0P0Y0}0O0n0L0J0(0p011E1o010b0V0x0J0L0q0x1y1X1Z1(1G1+1C1.1:0-0a0z0C0j0m0n0m0O0G100J0z0R1V0j0j0x0r28131?0J1b0k1T2l1Q1S1R1z0e1^0(1u0J1-251y1j1l0Z1F2v0G2x0J0m2B1y0n2e1b2j2l2P0:1Y292D1)2I0j0@0A0-0t2i2T0.2S1@2V1G2X2Z0-0p2%1Z2)2j2u012.0L2!040v2=2k0/2^2,0(2{2}0g302@2T2_360-0D391e2N132B2o0e1S2t34010r2J1;1b3k1c3i2R142(053r0R2O3b3p0I0-0R0b3g331n1G0u0-0z3L3F3N350b3I0x0j0J0G3Y0x0N24262h3z2?2*2U3U010,040M3S2+3:0J0-0w2|3^3/2E3;0-0B393R3M413{042I0q0s2e0O3 2_3=0E0c39060z4n463T413H040b0m0j453.3c0-0G4x471)0m3P042G4C4q2W0s0-0j1Z0o0x4g3p3=3@3,2k4y3p0J4M041{4S3:4U4(480-4b4d0x4f4W3E3_414i4+4E0-0h4`1G0q0G2#4~0(3=444=4p4@4{044}4=4Y3:50525d4D1G554J591G0m4|53015g042$5i4K5k0-4j4l4o5C58401)4s0G3K575e4,4a0m4c4e5r3=0y5r494B5w5n540-0H5m5F5o0-0f0f5$4z043}0A5R0-4k4=4m5D5_5L5G4N0S0K3Z5,4Z4A5B4o5{1G4s2e0F5 125K5j0(0I0r0-0l114R5@133C0x2l2M6p3j1k3l2o2r2m0L1B6s0k3k0/6C0S0U0W04.

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

.128013f:6Sd=4yr/Nopg2mcb1w3ve[ l,P5)ti]knua(_sh050f0x0F0L0G0A0O0z0r0A0L0O0O0g010F0G0n010406050O0K0q0q0L0j0i040e0m0A0K0*0m0J050k0;0?0^0`0/0n04051a131d0k1a0/0f0G0w0Y0!0$0(0P0G0o0P0A1r0P0F0-050T0s0A0x1m0#0%011q1s1u1s0F1A1C1y0F0j1b0F0P0Y0}0O0n0L0J0(0p011E1o010b0V0x0J0L0q0x1y1X1Z1(1G1+1C1.1:0-0a0z0C0j0m0n0m0O0G100J0z0R1V0j0j0x0r28131?0J1b0k1T2l1Q1S1R1z0f1^0(1u0J1-251y1j1l0Z1F2v0G2x0J0m2B1y0n2e1b2j2l2P0:1Y292D1)2I0j0@0A0-0t2i2T0.2S1@2V1G2X2Z0-0p2%1Z2)2j2u012.0L2!040v2=2k0/2^2,0(2{2}0h302@2T2_360-0D39323b342`0m2Y2|0-0d391e2N132B2o0f1S2t3j0r2J1;1b3u1c3s2R142(053A0R2O3i1n1G0I0-0R0b3q333P0(0u0-0z3V3O2E2`0b3S0x0j0J0G3,0x0N24262h3I2?2*2U3X010,040M3$2+3}0J0-0w2|423|3(3 0B393#3W3(45042I0q0s2e0O492_3 0E0c3g0z4v4f3%2W0-2e240J0O0x4e3{2_0m0-0g4G4g1)0I0r0-0l114F3_314w4x433(3R040b3l4M4y2-0-0G4)4Z1)0m3Z042G4.4a2W0s4A1Z0o4U2R4N1G3 414V3N4/2-4{041{4p3j535c440-4k4m0x4o554H5d0-0E4s4u4X4w5n3}4#0G3U554Y4_4+4j0m4l4n5f4b0-0y5I4z4?5M520-0H4^4I4K4L5A5v4h46485m510(3 4t55065t5-5B3c4A0x4C4E5T3j4J045W2P5/3j4i4-5+4X5Y4O5;0F0K3-5^5g044B115@5+133L0x2l2M6j3t1k3v2o2r2m0L1B6m0k3u0/6w0S0U0W04.
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.

🐍 Console Python
>>> 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)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013f:FSd=4yr/oTpg2mcb1w3ve[ lP5)ti]knua(_sh050f0x0E0K0F0A0N0z0r0A0K0N0N0g010E0F0n010406050N0J0q0q0K0j0i040e0l0A0J0)0l0I050k0:0=0@0_0.0n040519121c0k190.0f0F0w0X0Z0#0%0O0F0o0O0A1q0O0E0,050S0s0A0x1l0!0$011p1r1t1r0E1z1B1x0E0j1a0E0O0X0|0N0n0K0I0%0p011D1n010b0U0x0I0K0q0x1x1W1Y1%1F1*1B1-1/0,0a0z0B0j0l0n0l0N0F0 0I0z0Q1U0j0j0x0r27121=0I1a0k1S2k1P1R1Q1y0f1@0%1t0I1,241x1i1k0Y1E2u0F2w0I0l2A1x0n2d1a2i2k2O0/1X282C1(2H0j0?0A0,0t2h2S0-2R1?2U1F2W2Y0,0p2$1Y2(2i2t012-0K2Z040v2;2j0.2@2+0%2`2|0h2 2?2S2^350,0C381d2M122A2n0f1R2s33010r2I1:1a3j1b3h2Q132%053q0Q2N3a3o0H0,0Q0b3f321m1F0u0,0z3K3E3M340b0,2F1i0r0x0M0x0o2{0M0w2{0x0J0j3R2*3T010+040L3/2T3;0I0,2H0q0s2d0N3_2^3?0D0c38060z4a3Q3L2D013G040b0l3.3y2=4c3S4e3|040F384n3:4e0l3O4r114l2j4u3`4p0s0,0j1Y0o0x433o3?3^4B3D4v2V4G041`4M3;4O4X4p3}0l3 414!1(4546484b4/4D2^4g0F3J4Q4;3o4q3~400x424Q2)4E4+0,0y4*2,3W570%3?0G4t522^0l0,0g0g5e4d2V59515m1F3?474Q494:5w5f3F4H0R3-4A2O4`3;0H0r0,0m0j0J4L5u4/5y5G5A0E5C5l4o1(5H0,0d2{0N5N2O0.0k3B0x2k2L5,3i1j3k2n2q2l0K1A5/0k3j5)0Q0S0U0N04.

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

.128013f:FSd=4yr/oTpg2mcb1w3ve[ lP5)ti]knua(_sh050f0x0E0K0F0A0N0z0r0A0K0N0N0g010E0F0n010406050N0J0q0q0K0j0i040e0l0A0J0)0l0I050k0:0=0@0_0.0n040519121c0k190.0f0F0w0X0Z0#0%0O0F0o0O0A1q0O0E0,050S0s0A0x1l0!0$011p1r1t1r0E1z1B1x0E0j1a0E0O0X0|0N0n0K0I0%0p011D1n010b0U0x0I0K0q0x1x1W1Y1%1F1*1B1-1/0,0a0z0B0j0l0n0l0N0F0 0I0z0Q1U0j0j0x0r27121=0I1a0k1S2k1P1R1Q1y0f1@0%1t0I1,241x1i1k0Y1E2u0F2w0I0l2A1x0n2d1a2i2k2O0/1X282C1(2H0j0?0A0,0t2h2S0-2R1?2U1F2W2Y0,0p2$1Y2(2i2t012-0K2Z040v2;2j0.2@2+0%2`2|0h2 2?2S2^350,0C381d2M122A2n0f1R2s33010r2I1:1a3j1b3h2Q132%053q0Q2N3a3o0H0,0Q0b3f321m1F0u0,0z3K3E3M340b0,2F1i0r0x0M0x0o2{0M0w2{0x0J0j3R2*3T010+040L3/2T3;0I0,2H0q0s2d0N3_2^3?0D0c38060z4a3Q3L2D013G040b0l3.3y2=4c3S4e3|040F384n3:4e0l3O4r114l2j4u3`4p0s0,0j1Y0o0x433o3?3^4B3D4v2V4G041`4M3;4O4X4p3}0l3 414!1(4546484b4/4D2^4g0F3J4Q4;3o4q3~400x424Q2)4E4+0,0y4*2,3W570%3?0G4t522^0l0,0g0g5e4d2V59515m1F3?474Q494:5w5f3F4H0R3-4A2O4`3;0H0r0,0m0j0J4L5u4/5y5G5A0E5C5l4o1(5H0,0d2{0N5N2O0.0k3B0x2k2L5,3i1j3k2n2q2l0K1A5/0k3j5)0Q0S0U0N04.
Exercice 5 : moyenne(valeurs)

Compléter le code de la fonction moyenne qui prend en paramètre 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 distance entre ces deux nombres (mathématiquement la valeur absolue de leur différence) est inférieure à \(10^{-15}\).

🐍 Console Python
>>> 0.1 * 3 == 0.3  # Erreur de virgule flottante classique
False
>>> indiscernables(0.1*3, 0.3)
True
🐍 Console Python
>>> 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)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013f06S:d=4-yr/opg2mcb1w937ve l,8+P5)tikn;ua(_sh050g0A0J0P0K0C0S0B0s0C0P0S0S0h010J0K0o010406050S0O0r0r0P0l0k040e0n0C0O0.0n0M050m0^0`0|0~0?0o04051e171h0m1e0?0g0K0z0$0(0*0,0T0K0p0T0C1v0T0J0;050X0t0C0A1q0)0+011u1w1y1w0J1E1G1C0J0l1f0J0T0$110S0o0P0M0,0q011I1s010b0Z0A0M0P0r0A1C1#1%1,1K1/1G1=1@0;0a0B0G0l0n0o0n0S0K140M0B0V1Z0l0l0A0s2c171`0M1f0m1X2p1U1W1V1D0g1|0,1y0M1;291C1n1p0%1J2z0K2B0M0n2F1C0o2i1f2n2p2T0@1$2d2H1-2M0l0{0C0;0B0u2m2X0=2W1{2Z1K2#2%2)0q2,1%2.2n2y012?0P2(040B0x2`2o0?2}2;0,30320B0i362|2X2~3c2)0H3g383i3a2 0n2$312)0d3n2/2Y1r2=3s2@330y3x393A3b3C3u330E3G3p3I3r3t3d0w3O2:3Q3k040u0c3g1i2R172F2s0g1W2x3q0s2N1^1f3*1g3(2V182-053:0V2S3P2I010L0;0V0b3$3H420v2)48412!0b0;2K1n0S0s0A0l1=1F0A0S4d3W420:040Q4s3z420M0;2M0r0t2i2+3{2{3y2~4v0D3g0B4K3q4B044D4F0A2_4I2o4Q3Q4v0I0f3n0B4*4P491-44042i0J0O4n4O4!4A0t0;0P0t4r4Y404t1-4v4x504_2!4C0n4E4G4^4-1K0n0;0j5d4e2=595b4W4y4L0;0I5j525f0;020C0J0N5t4z1-0r4g3Z0A0j0u3m50063o5u0,4/465p3q4b335S3X5F0r0n0k1;2B5W4u0;552V5e3b0;0z310A4?4 5,5k0,4$4(5L4+4,5_2 0;0S5a1@5B2~5g040h663q0r0K0;3#5}4+575l4T0t0R2M0J4q6b3Q686a505 5O016d6f4)6i5-430;0b3s6r4A596p6I1-0n5U2K6M6k5:1G5?5(530;5|2T065~5~6j5.04630`0A6R0,6t6.616*646-6v6(01680F6;4S6o6^6!6$6C606 6m705@2-6w5C5v696~4C770n6p792{7b670;6}6_6D6z3Z6B4*6`4/4;4?167q75626@6;680m7f6l6n7i6q5L173~0A2p2Q7Q3)1o3+2s2v2q4}1G2p3*0?0m0V0X0Z0S04.

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

.128013f06S:d=4-yr/opg2mcb1w937ve l,8+P5)tikn;ua(_sh050g0A0J0P0K0C0S0B0s0C0P0S0S0h010J0K0o010406050S0O0r0r0P0l0k040e0n0C0O0.0n0M050m0^0`0|0~0?0o04051e171h0m1e0?0g0K0z0$0(0*0,0T0K0p0T0C1v0T0J0;050X0t0C0A1q0)0+011u1w1y1w0J1E1G1C0J0l1f0J0T0$110S0o0P0M0,0q011I1s010b0Z0A0M0P0r0A1C1#1%1,1K1/1G1=1@0;0a0B0G0l0n0o0n0S0K140M0B0V1Z0l0l0A0s2c171`0M1f0m1X2p1U1W1V1D0g1|0,1y0M1;291C1n1p0%1J2z0K2B0M0n2F1C0o2i1f2n2p2T0@1$2d2H1-2M0l0{0C0;0B0u2m2X0=2W1{2Z1K2#2%2)0q2,1%2.2n2y012?0P2(040B0x2`2o0?2}2;0,30320B0i362|2X2~3c2)0H3g383i3a2 0n2$312)0d3n2/2Y1r2=3s2@330y3x393A3b3C3u330E3G3p3I3r3t3d0w3O2:3Q3k040u0c3g1i2R172F2s0g1W2x3q0s2N1^1f3*1g3(2V182-053:0V2S3P2I010L0;0V0b3$3H420v2)48412!0b0;2K1n0S0s0A0l1=1F0A0S4d3W420:040Q4s3z420M0;2M0r0t2i2+3{2{3y2~4v0D3g0B4K3q4B044D4F0A2_4I2o4Q3Q4v0I0f3n0B4*4P491-44042i0J0O4n4O4!4A0t0;0P0t4r4Y404t1-4v4x504_2!4C0n4E4G4^4-1K0n0;0j5d4e2=595b4W4y4L0;0I5j525f0;020C0J0N5t4z1-0r4g3Z0A0j0u3m50063o5u0,4/465p3q4b335S3X5F0r0n0k1;2B5W4u0;552V5e3b0;0z310A4?4 5,5k0,4$4(5L4+4,5_2 0;0S5a1@5B2~5g040h663q0r0K0;3#5}4+575l4T0t0R2M0J4q6b3Q686a505 5O016d6f4)6i5-430;0b3s6r4A596p6I1-0n5U2K6M6k5:1G5?5(530;5|2T065~5~6j5.04630`0A6R0,6t6.616*646-6v6(01680F6;4S6o6^6!6$6C606 6m705@2-6w5C5v696~4C770n6p792{7b670;6}6_6D6z3Z6B4*6`4/4;4?167q75626@6;680m7f6l6n7i6q5L173~0A2p2Q7Q3)1o3+2s2v2q4}1G2p3*0?0m0V0X0Z0S04.
Exercice 6 : moyenne_ponderee(valeurs)

Compléter le code de la fonction moyenne_ponderee qui prend en paramètre 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 :

🐍 Script Python
def parcours_liste_couples(couples):
    for a, b in couples: # (1)
        print(a, b)
  1. On peut aussi écrire for (a, b) in couples . Les parenthèses sont facultatives pour les tuples.
🐍 Console Python
>>> parcours_liste_couples([("voiture", 3), ("vélo", 5), ("moto", 1)])
voiture 3
vélo 5
moto 1
🐍 Console Python
>>> 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)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013f06S:d=4-yr/opg2mcb1w937ve l,8*+P5)tikn;ua(_sh050g0A0K0Q0L0C0T0B0s0C0Q0T0T0h010K0L0o010406050T0P0r0r0Q0l0k040e0n0C0P0/0n0N050m0_0{0}0 0@0o04051f181i0m1f0@0g0L0z0%0)0+0-0U0L0p0U0C1w0U0K0=050Y0t0C0A1r0*0,011v1x1z1x0K1F1H1D0K0l1g0K0U0%120T0o0Q0N0-0q011J1t010b0!0A0N0Q0r0A1D1$1(1-1L1:1H1?1^0=0a0B0H0l0n0o0n0T0L150N0B0W1!0l0l0A0s2d181{0N1g0m1Y2q1V1X1W1E0g1}0-1z0N1=2a1D1o1q0(1K2A0L2C0N0n2G1D0o2j1g2o2q2U0^1%2e2I1.2N0l0|0C0=0B0u2n2Y0?2X1|2!1L2$2(2*0q2-1(2/2o2z012@0Q2)040B0x2{2p0@2~2=0-31330B0i372}2Y2 3d2*0I3h393j3b300n2%322*0d3o2:2Z1s2?3t2^340y3y3a3B3c3D3v340E3H3q3J3s3u3e0w3P2;3R3l040u0c3h1j2S182G2t0g1X2y3r0s2O1_1g3+1h3)2W192.053;0W2T3Q2J010M0=0W0b3%3I430v2*49422#0b0=2L1o0T0s0A0l1?1G0A0T4e3X430;040R4t3A430N0=2N0r0t2j2,3|2|3z2 4w0D3h0B4L3r4C044E4G0A2`4J2p4R3R4w0J0f3o0B4+4Q4a1.45042j0K0P4o4P4#4B0t0=0Q0t4s4Z414u1.4w4y514`2#4D0n4F4H4_4.1L0n0=0j5e4f2?5a5c4X4z4M0=0J5k535g0=020C0K0O5u4A1.0r4h3!0A0j0u3n51063p5v0-4:475q3r4c345T3Y5G0r0n0k1=2C0S290N0W2j0A5X4v0=562W5f3c0=2j0_5z0Q0K505?5l0-4%4)5M4,4-61300=0T5b1^0S2N0K4r5C2 5h040h6i3r0r0L0=3$654,585m046b0{0A0S3;0A0b0b5 2.675P016k6m516I5D1L6p6r4*6u5@440=0b3t6n3Y5a6g5/540=4O6N6v5^046C6E6!430n5V2L6=594;4r0P5|5~6(1L4w642U0666666-696x6c6A6f6h6,6V6L6`6w6y6d7e6G2|6O6j0=0G7j6.7e710-6k0F7x7a6:486t777q4S6a7c6B0n6D6F7u6K0=6M2U7H6#7b6z7L7N7o2p7U6?7s7P4T7D6T4+794:4=4@177g684T7l7d0n6g7!5W7h0=0m7)7J7X7D7}0@0m3 0A2q2R8a3*1p3,2t2w2r4~1H2q3+870W0Y0!0T04.

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

.128013f06S:d=4-yr/opg2mcb1w937ve l,8*+P5)tikn;ua(_sh050g0A0K0Q0L0C0T0B0s0C0Q0T0T0h010K0L0o010406050T0P0r0r0Q0l0k040e0n0C0P0/0n0N050m0_0{0}0 0@0o04051f181i0m1f0@0g0L0z0%0)0+0-0U0L0p0U0C1w0U0K0=050Y0t0C0A1r0*0,011v1x1z1x0K1F1H1D0K0l1g0K0U0%120T0o0Q0N0-0q011J1t010b0!0A0N0Q0r0A1D1$1(1-1L1:1H1?1^0=0a0B0H0l0n0o0n0T0L150N0B0W1!0l0l0A0s2d181{0N1g0m1Y2q1V1X1W1E0g1}0-1z0N1=2a1D1o1q0(1K2A0L2C0N0n2G1D0o2j1g2o2q2U0^1%2e2I1.2N0l0|0C0=0B0u2n2Y0?2X1|2!1L2$2(2*0q2-1(2/2o2z012@0Q2)040B0x2{2p0@2~2=0-31330B0i372}2Y2 3d2*0I3h393j3b300n2%322*0d3o2:2Z1s2?3t2^340y3y3a3B3c3D3v340E3H3q3J3s3u3e0w3P2;3R3l040u0c3h1j2S182G2t0g1X2y3r0s2O1_1g3+1h3)2W192.053;0W2T3Q2J010M0=0W0b3%3I430v2*49422#0b0=2L1o0T0s0A0l1?1G0A0T4e3X430;040R4t3A430N0=2N0r0t2j2,3|2|3z2 4w0D3h0B4L3r4C044E4G0A2`4J2p4R3R4w0J0f3o0B4+4Q4a1.45042j0K0P4o4P4#4B0t0=0Q0t4s4Z414u1.4w4y514`2#4D0n4F4H4_4.1L0n0=0j5e4f2?5a5c4X4z4M0=0J5k535g0=020C0K0O5u4A1.0r4h3!0A0j0u3n51063p5v0-4:475q3r4c345T3Y5G0r0n0k1=2C0S290N0W2j0A5X4v0=562W5f3c0=2j0_5z0Q0K505?5l0-4%4)5M4,4-61300=0T5b1^0S2N0K4r5C2 5h040h6i3r0r0L0=3$654,585m046b0{0A0S3;0A0b0b5 2.675P016k6m516I5D1L6p6r4*6u5@440=0b3t6n3Y5a6g5/540=4O6N6v5^046C6E6!430n5V2L6=594;4r0P5|5~6(1L4w642U0666666-696x6c6A6f6h6,6V6L6`6w6y6d7e6G2|6O6j0=0G7j6.7e710-6k0F7x7a6:486t777q4S6a7c6B0n6D6F7u6K0=6M2U7H6#7b6z7L7N7o2p7U6?7s7P4T7D6T4+794:4=4@177g684T7l7d0n6g7!5W7h0=0m7)7J7X7D7}0@0m3 0A2q2R8a3*1p3,2t2w2r4~1H2q3+870W0Y0!0T04.
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 (c'est à dire le nombre d'occurences de valeur dans donnees).

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, 6: 1, 2: 3} sont égaux.

🐍 Console Python
>>> 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)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013f:6Sd=4yr/opg2mcb1w37ve[ l8+P5)ti]knua(_sh050f0x0G0M0H0A0P0z0q0A0M0P0P0g010G0H0m010406050P0L0p0p0M0j0i040e0l0A0L0+0l0K050k0=0@0_0{0:0m04051b141e0k1b0:0f0H0w0Z0#0%0)0Q0H0n0Q0A1s0Q0G0.050U0r0A0x1n0$0(011r1t1v1t0G1B1D1z0G0j1c0G0Q0Z0~0P0m0M0K0)0o011F1p010b0W0x0K0M0p0x1z1Y1!1)1H1,1D1/1;0.0a0z0D0j0l0m0l0P0H110K0z0S1W0j0j0x0q29141@0K1c0k1U2m1R1T1S1A0f1_0)1v0K1.261z1k1m0!1G2w0H2y0K0l2C1z0m2f1c2k2m2Q0;1Z2a2E1*2J0j0^0A0.0s2j2U0/2T1^2W1H2Y2!0.0o2(1!2*2k2v012/0M2#040u2?2l0:2_2-0)2|2~0h312^2U2`370.0E3a333c352{0l2Z2}0.0d3h2+2V1o2.3m2:040v3r343u363w3o040B3a1f2O142C2p0f1T2u3k0q2K1=1c3M1d3K2S152)053S0S2P3j3C010J0.0S0b3I3B2F010t0.0z3;3*3?0K0b0.0x0b0b2g0+0b0P3{2,3+0-040N483t3}3.122y0x473!2@3s2`4b0F0c3h0z4u3`3=2X3.0H3S0O41432h3a4w3|1*0l0.0g4G4o3k0K0r4z4F4m2l4O4a0.0N0F4t4v4W3?3-040b3m4N4x2.0.0w4-4I1H0l3^042H4=494g040f4i0x4k4e4p0.4s4U0/4v5a4H4}1*4)0H3:585c4f4y044;5i4%4J4_4{5o4.364S0l4C4244543k4b572Q065b5H5j3d5w5y4E0G5B4X040y5P4~5n2S5u014b0I4|5k4@4L5#5K4 4A5x4D5A585p1H4b5S5:5X0K4:5T1*5Z5)3k4K040C5 3+0p0H2$4#5H5;0)4)0x0X0x5|5=56695I4u6b2{5L5.4T5W4?0)5?6h5v5m6w5Y0.5!5t6t01614M6D5d1H6668585G4$5X4)2f0G0L0j136I5$6x1k4B6q5O6N143%0x2m2N6+3L1l3N2p2s2n0M1C6.0k3M0:6{0T0V0X04.

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

.128013f:6Sd=4yr/opg2mcb1w37ve[ l8+P5)ti]knua(_sh050f0x0G0M0H0A0P0z0q0A0M0P0P0g010G0H0m010406050P0L0p0p0M0j0i040e0l0A0L0+0l0K050k0=0@0_0{0:0m04051b141e0k1b0:0f0H0w0Z0#0%0)0Q0H0n0Q0A1s0Q0G0.050U0r0A0x1n0$0(011r1t1v1t0G1B1D1z0G0j1c0G0Q0Z0~0P0m0M0K0)0o011F1p010b0W0x0K0M0p0x1z1Y1!1)1H1,1D1/1;0.0a0z0D0j0l0m0l0P0H110K0z0S1W0j0j0x0q29141@0K1c0k1U2m1R1T1S1A0f1_0)1v0K1.261z1k1m0!1G2w0H2y0K0l2C1z0m2f1c2k2m2Q0;1Z2a2E1*2J0j0^0A0.0s2j2U0/2T1^2W1H2Y2!0.0o2(1!2*2k2v012/0M2#040u2?2l0:2_2-0)2|2~0h312^2U2`370.0E3a333c352{0l2Z2}0.0d3h2+2V1o2.3m2:040v3r343u363w3o040B3a1f2O142C2p0f1T2u3k0q2K1=1c3M1d3K2S152)053S0S2P3j3C010J0.0S0b3I3B2F010t0.0z3;3*3?0K0b0.0x0b0b2g0+0b0P3{2,3+0-040N483t3}3.122y0x473!2@3s2`4b0F0c3h0z4u3`3=2X3.0H3S0O41432h3a4w3|1*0l0.0g4G4o3k0K0r4z4F4m2l4O4a0.0N0F4t4v4W3?3-040b3m4N4x2.0.0w4-4I1H0l3^042H4=494g040f4i0x4k4e4p0.4s4U0/4v5a4H4}1*4)0H3:585c4f4y044;5i4%4J4_4{5o4.364S0l4C4244543k4b572Q065b5H5j3d5w5y4E0G5B4X040y5P4~5n2S5u014b0I4|5k4@4L5#5K4 4A5x4D5A585p1H4b5S5:5X0K4:5T1*5Z5)3k4K040C5 3+0p0H2$4#5H5;0)4)0x0X0x5|5=56695I4u6b2{5L5.4T5W4?0)5?6h5v5m6w5Y0.5!5t6t01614M6D5d1H6668585G4$5X4)2f0G0L0j136I5$6x1k4B6q5O6N143%0x2m2N6+3L1l3N2p2s2n0M1C6.0k3M0:6{0T0V0X04.

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

.128013f:6Sd=4yr/opg2mcb1w37v{e[ l8O+P5)ti]knéua(}_sh050f0y0I0P0J0B0T0A0q0B0P0T0T0g010I0J0m010406050T0O0p0p0P0j0i040e0l0B0O0/0l0M050k0_0{0}0 0@0m04051f181i0k1f0@0f0J0w0%0)0+0-0U0J0n0U0B1w0U0I0=050Y0r0B0y1r0*0,011v1x1z1x0I1F1H1D0I0j1g0I0U0%120T0m0P0M0-0o011J1t010b0!0y0M0P0p0y1D1$1(1-1L1:1H1?1^0=0a0A0F0j0l0m0l0T0J150M0A0W1!0j0j0y0q2d181{0M1g0k1Y2q1V1X1W1E0f1}0-1z0M1=2a1D1o1q0(1K2A0J2C0M0l2G1D0m2j1g2o2q2U0^1%2e2I1.2N0j0|0B0=0s2n2Y0?2X1|2!1L2$2(0=0o2,1(2.2o2z012?0P2)040u2`2p0@2}2;0-30320h352|2Y2~3b0=0G3e373g392 0l2%310=0d3l2/2Z1s2=3q2@040v3v383y3a3A3s040C3e1j2S182G2t0f1X2y3o0q2O1_1g3Q1h3O2W192-053W0W2T3n3G010L0=0W0b3M3F2J010t0=0A3^3.3`0M0b0=0y0b0b2k0/0b0T3 2:3/0;040Q4c3x413=162C0y4b3(2{3w2~4f0H0c3l0A4y3~3_2#3=0J3W0S45472l3e4A401.0l0=0g4K4s3o0M0r4D4J4q2p4S4e0=0Q0H4K4L4d3`0q0s0=030A0D2e0m0y140A0P0O0+0J0A0N0q0j0J2j2f4E0l4G46480A0g0A0x0R4x4z4!3`3;040b3q4R4B2=0=0w5o4M1L0l3|042L5t4+4C040f4m0y4o4i4t0=4w4Y0?4z5O4*4j1.5k0J3@5M5Q3h5r5A5R5v5x5z5W5i5C1o4F4H485I3o4f5L2U065P5_5X4T4W575.4X2W5p0-4f0z5:3/0M5Z5M5*1L4f0K5!2~4O044Q5)622 5}584I0I663`646r5C5s6a6l6d6f3o6h0E6A3/0p0J2*5g5_6b0-5k0y0#0y6u6c5K6J5`4y6L6m5D566o5/6x5u630=656%5B5q046w616(016z6k6=6h6j2U5{6F6H042+5M5^5h6l5k2j0I0O0j176^6-3a6n5 6q72183+0y2q2R7l3P1p3R2t2w2r0P1G7o0k3Q0@7y0X0Z0#04.

II. Les listes⚓︎

Exercice 1⚓︎

Vous devez générer une liste contenant les entiers de 1 à 49 dans l'ordre croissant. Ensuite, votre code doit tirer, sans remise, 6 numéros qu'on stocke dans une liste, puis, toujours sans remise, un dernier numéro (le numéro complémentaire).

Exemple

Votre code affichera la liste des 6 numéros puis le complémentaire comme ceci :

🐍 Console Python
[31, 3, 12, 45, 13, 27]
18

Attention

Vous pourrez importer le module random. Vous ne devez pas utiliser la fonction choice du module random.

A vous de jouer

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

Astuce

🌵 Envisagez différentes façons de coder ce problème, utilisant pop, del ou remove ...

Solution avec la méthode pop

C'est la solution préférable.

🐍 Script Python
from random import randint
liste = [i for i in range(1, 50)]
reponse = []
for i in range(6):
    numero = liste.pop(randint(0, len(liste) - 1))
    reponse.append(numero)
print(reponse)
complementaire = liste.pop(randint(0, len(liste) - 1))
print(complementaire)
Solution avec del
🐍 Script Python
from random import randint
liste = [i for i in range(1, 50)]
reponse = []
for i in range(6):
    i = randint(0, len(liste) - 1)
    reponse.append(liste[i])
    del liste[i]
print(reponse)
i = randint(0, len(liste) - 1)
print(liste[i])
Solution avec la méthode remove
🐍 Script Python
from random import randint
liste = [i for i in range(1,50)]
reponse = []
for i in range(6):
    i = randint(0, len(liste) - 1)
    reponse.append(liste[i])
    liste.remove(liste[i])
print(reponse)
i = randint(0, len(liste) - 1)

print(liste[i])

Exercice 2⚓︎

1. On considère le programme suivant :

🐍 Script Python
liste1 = [0]*100
liste2 = [0 for k in range(100)]
liste3 = []
for k in range(100):
    liste3.append(0)

Quel est le contenu de chacune des listes ?

Solution

😀 Utiliser l'éditeur Python pour vérifier les réponses ...

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

2. Ecrire un programme python permettant de créer les listes suivantes :

a. Une liste contenant 12 fois le chiffre 7.
b. La liste des nombres entiers de 1 à 100.
c. Une liste contenant 50 nombres tirés au sort entre 1 et 6.

A vous de jouer

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

Solution
🐍 Script Python
from random import randint
liste_a = [7 for _ in range(12)]
liste_b = [i for i in range(1, 101)]
liste_c = [randint(1, 6) for _ in range(50)]
print(liste_a)
print(liste_b)
print(liste_c)

Exercice 3⚓︎

Écrire une fonction sans_doublon qui prend en paramètre une liste de nombres pouvant contenir des nombres répétés plusieurs fois et renvoie la liste ne contenant qu'une fois chaque nombre.

Exemple

🐍 Script Python
>>> sans_doublon([1, 2, 4, 6, 6])
[1, 2, 4, 6]
>>> sans_doublon([2, 5, 7, 7, 7, 9])
[2, 5, 7, 9]
>>> sans_doublon([5, 1, 1, 2, 5, 6, 3, 4, 4, 4, 2])
[5, 1, 2, 6, 3, 4]

Attention

Il est interdit d'utiliser count

Compléter le code ci-dessous

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

.128013f:6Sd=4yr./opg2mcb1w3ve[ lP5)ti]knua(_sh050f0x0E0K0F0A0N0z0r0A0K0N0N0g010E0F0n010406050N0J0q0q0K0j0i040e0m0A0J0)0m0I050l0:0=0@0_0.0n040519121c0l190.0f0F0w0X0Z0#0%0O0F0o0O0A1q0O0E0,050S0s0A0x1l0!0$011p1r1t1r0E1z1B1x0E0j1a0E0O0X0|0N0n0K0I0%0p011D1n010b0U0x0I0K0q0x1x1W1Y1%1F1*1B1-1/0,0a0z0B0j0m0n0m0N0F0 0I0z0Q1U0j0j0x0r27121=0I1a0l1S2k1P1R1Q1y0f1@0%1t0I1,241x1i1k0Y1E2u0F2w0I0m2A1x0n2d1a2i2k2O0/1X282C1(2H0j0?0A0,0t2h2S0-2R1?2U1F2W2Y0,0p2$1Y2(2i2t012-0K2Z040v2;2j0.2@2+0%2`2|0h2 2?2S2^350,0C38313a332_0m2X2{0,0d381d2M122A2n0f1R2s3i0r2I1:1a3t1b3r2Q132%053z0Q2N3h1m1F0H0,0Q0b3p323O0%0u0,0z3U3N2D2_0b0,0N1Y0N0M0f0m0J1A103#2*3W010+040L3@2T3_0I0,1M0x0K0J3~2^3{0D0c3f0z4d3!3V3%41042H0J0w44463H2=4f3$1(0m0,0g384r3^3%3{0y0G4c4e2)3 3%3Q040b3k4x4G3b0,2H0q0s2d4N4g4t3Y042F4V4s2,420K1A4n473i3{4b4p304e4=4y4H1(4J0F3T4:044@4P4j0m4S4U4}4 3i0m4Y2H0E4#4z4X0,4!554O3i4i4k4m454,3_4.4E4?4?5i404Q3:5m4o2Q4W1F4u040k5o4h0,0K0n0n1,0f5G1(3{3}4}5u5H51530x5O1F495r563_4J2d0E0J0j115h5B345w4l4+4}0.0l3K0x2k2L5{3s1j3u2n2q2l4)1B2k3t5^0Q0S0U0N04.

Exercice 4 : Savoir compter⚓︎

Écrire une fonction compter_triples qui prend en paramètre une liste entiers de nombres entiers et renvoie le nombre de multiples de 3 de cette liste

Attention

Il est interdit d'utiliser count

Compléter le code ci-dessous

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

.128013f:6S0d=4yr/opg2mcb1w3ve l+P5)tiknua(_sh%050g0x0E0J0F0z0M0y0r0z0J0M0M0h010E0F0n010406050M0I0q0q0J0k0j040e0m0z0I0)0m0H050l0:0=0@0_0.0n040519121c0l190.0g0F0w0X0Z0#0%0N0F0o0N0z1q0N0E0,050S0s0z0x1l0!0$011p1r1t1r0E1z1B1x0E0k1a0E0N0X0|0M0n0J0H0%0p011D1n010b0U0x0H0J0q0x1x1W1Y1%1F1*1B1-1/0,0a0y0B0k0m0n0m0M0F0 0H0y0Q1U0k0k0x0r27121=0H1a0l1S2k1P1R1Q1y0g1@0%1t0H1,241x1i1k0Y1E2u0F2w0H0m2A1x0n2d1a2i2k2O0/1X282C1(2H0k0?0z0,0t2h2S0-2R1?2U1F2W2Y0,0p2$1Y2(2i2t012-0J2Z040v2;2j0.2@2+0%2`2|0i2 2?2S2^350,0C38313a332_0m2X2{0,0d381d2M122A2n0g1R2s3i0r2I1:1a3t1b3r2Q132%053z0Q2N3h1m1F0G0,0Q0b3p323O0%0u0,0y3U3N2D2_0b0,3z0q0n0E0x0k0L1P0*1B0M3#2*3W010+040K3_2T3{0H0,1,0)3/3^3H2=2)413%3}0D0c3f0y4i3!3V3%43040r3-384k3$1(0m0,0h4r4b2^0q0F0,0f4h4j4z3i3Q040b3k4y4l2V0,2H0q0s2d4N4t1F0m3Y042F4V3`4m440H460k482Q4O1F3}4g49304j4^4s4%1(4J0F3T4?044`4c4P044R4T0x4$534X0,0O594A4C2}5e3i4v040h4x50525f4D402^4;4F4_4_4H423*4q5o5y3%5k5n2O5p3i4n4p0E5i3{5k0A5N3%4B2!5v5I3{4J2d0E0I0k115C4/345A5M500.0l3K0x2k2L5;3s1j3u2n2q2l0J1A5@0l3t5.0Q0S0U0M04.

Exercice 5 :⚓︎

Indice du minimum

Exercice 6 :⚓︎

Maximum

Exercice 7 :⚓︎

Distribution de costumes

Exercice 8 :⚓︎

Aplatir un tableau

Exercice 9 : Le nombre mystère⚓︎

Trouvez le nombre mystère qui répond aux conditions suivantes :

  • Il est composé de 3 chiffres.
  • Il est strictement inférieur à 300.
  • Il est pair.
  • Deux de ses chiffres sont identiques.
  • La somme de ses chiffres est égale à 7.

On vous propose d'employer une méthode dite de « force brute », c'est-à-dire de tester tous les nombres possibles répondants aux trois premières conditions.

Question

Compléter le script suivant

  • possibles est la liste des nombres répondant aux trois premiers critères.
  • liste est la liste des nombres répondant au problème.

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

.128013f06S:d=F4%-yrE/oTxpg2mcb1w937ve[ l,8+P5)ti]kn;ua(_shq050g0F0P0W0Q0I0Z0H0x0I0W0Z0Z0h010P0Q0t010406050Z0V0w0w0W0n0m040e0q0I0V0_0q0T050p101214160~0t04051m1f1p0p1m0~0g0Q0E0.0:0=0@0!0Q0u0!0I1D0!0P0|050)0y0I0F1y0;0?011C1E1G1E0P1M1O1K0P0n1n0P0!0.190Z0t0W0T0@0v011Q1A010b0+0F0T0W0w0F1K1-1/1@1S1`1O1}1 0|0a0H0M0n0q0t0q0Z0Q1c0T0H0%1+0n0n0F0x2k1f220T1n0p1)2x1$1(1%1L0g240@1G0T1|2h1K1v1x0/1R2H0Q2J0T0q2N1K0t2q1n2v2x2#0 1.2l2P1^2U0n130I0|0H0z2u2)0}2(232+1S2-2/2;0v2@1/2_2v2G012~0W2:040H0C322w0~352|0@383a0H0j3e342)363k2;0N3o3g3q3i370q2.392;0d3v2`2*1z2}3A2 3b0D3F3h3I3j3K3C3b0K3O3x3Q3z3B3l0B3W2{3Y3s040z0c3%3H2Q3Z3L0z2?1g2^3w3(3:3*0z313^333`3/2,3S3a0z3d403f3G3r450|0z3n493p3{443!4e3u4h424c4l3+3E4o4b3y3}3N4u3P3|4d3+3V4z3X4B4r0z3$4F4j3J4r0v3-4L434N3L0v3@2#4p4w4C0v3 4X4v3)4!484%4A4k4U4g4,4G4.3T0v4n4;4M3R4O4t4`4S4|4U4y4 4q4U4E544Z4O4K584)4r0C4Q5c4H3L0C4W3_4(5i3T0C4$5m4-4T5p4+2^1q2Z1f2N2A0g1(2F3y0x2V201n5B1o5z2%4h055H0%2!4=1S0S0|0%0b3o5n1^0A2;5!5t3j0b5X0F0V0s0Y0x1C0b0b0F0Z0Y0Q0%0T0P5)5U0@0{040X604{370|0T0y2q665001630f6d3r0y0|2S5 5P5*6f0|0O6i3y0q0|0l020u0P0U3o0H5#2}6k040y0q196t3Y6g3.365%3b0H6S6L3:0Z0g0|020#0V0q6A6Z6#6%6!6$6B4R366W2;6S0H2q0T0E0q0Q1P0r0n0V1P2i0H6a2q0H0W2m5.0s0.5?0b2q0-5|1|0_6!5_0J0H0i390Z702S1d6O3y6:6R6S0o0s0F0w0t1O0-6h6.7t6X7v0H6y6%6z0U7K0U775/5;7b5_5{5}0P0X3~0z6s7F3Y7u6=0H6}6 7s7%7H7)7O7;7M7Q5:5=0Q5@7U7f5~7Y0v0C7#5h1^7(6=7m0,0F3v064Y7.6;6S6(6,8g6*6)6-4X7)6E3j0|0w6$6C8o016v040h8t6p6a0|0Z1$6U1^63656o61680473898J6763823_8n6p5W047`8z8K8H8F2}8q8s8P6e630G8$0@0w0Q0|5g5x6p630R8Z678w0h8y4h6D8A8(6n2%8^0|8-8*368:4e8.6q048`908u0q6Q3A8{6e0T939d8,9d9b3+9q0|9g2#918K8}8 9y8u9o048r948@8!979s8;045r338u8_8S339z8|9k0n6C9V9n9p993y9r9%3Y9t8?9Q969f9m369B9;4w9$959K04989`679t9P2w9R9w7E8m7)6=8u8W2q0P0V0n1e9h8V0x0|7+8Oa66T8V0|0F889v04a58Ta7an8Kaa0(adaf9Dah0|877o8aa95-5Z9*3:6Q6DaM2,5,040Z0q120F7S7`7c5_as8I9~9#8M6bal9J8Q0|au9.8K8B8X5~as9Ta26p8w6x7M9da?6masa:4a6paOa8aQ1S7u8i7N6+8j6,7-6V7/6=6@6_6{0H0:0HaUaW770-7_7{0-2n8Nbh84bj7w7y7A1O0Hb44i6e858f7M7=6AbqaV1 aY5@7d7 81bAbabC0H4~3_8cbi8e7Jbebd8kbc3v8Ua=9_2^9!9=0|9Cb@9E6G8D9Yb9620|a%a-a)bzc19ea`0}b;679Fbr1 9@3Y8}ch3:9,b:a8ao040b9lagb=040x14ck1^9j6laCb|929G8)a(366N4oawaxcd8CbRa,9U9ib`cy8%aTcPcU0@8w0LcY376Gb2c88#c89Fcwc0cH9(6rcncM6eazacaec$cecX4ob(2,0|2g0=0Q1Na#ct8|cTd88+9Lc,6lc$8Wcrc/cDcu0Qc$cAa@c|6G0n1/0ucQa{9{c4a;9 9N3,9-dwa.040Jc$9t5fdD5TdFcab^3y8W8Ydb3rdfdT6u0|0kdI9Na13bcS8xb{dz6ecmc*9wbY8p041G8Ddvd%a|daaD9{9}c5dUa*6cdW3Ydhcsd|cNe1d^dPci6Q2Sc|d22h2id60Zdg6laLe7dc64b05-7Rbv5^5`7}9Id+cIc3ere9a_dnb`d*2web3:0Sai04akdn6Q1/0gefcWaWbTa!ekd.eqdeeDeZdOd(8~d!0|53d c;040O9x5m0p5R0F2x2Ye_5A1w5C2A2D2y0Wd62x5B0~0p0%0)0+0Z04.

III. Les chaines de caractères⚓︎

Renverser une chaîne

IV. Les dictionnaires⚓︎

Question

Compléter le script suivant pour qu'il affiche la liste pokemons_rapides des noms des pokémons dont la vitesse est supérieure à 60.
On doit obtenir l'affichage : ['Salameche', 'Reptencil'] ou ['Reptencil', 'Salameche']

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

Solution 1

Correction possible utilisant la méthode items:

🐍 Script Python
pokemon1 = {'Nom' : 'Carapuce', 'HP' : 44, 'Attaque' : 48, 'Defense' : 65, 'Vitesse' : 43, 'Type' : ['Eau']}
pokemon2 = {'Nom' : 'Evoli', 'HP' : 55, 'Attaque' : 55, 'Defense' : 50, 'Vitesse' : 55, 'Type' : ['Normal']}
pokemon3 = {'Nom' : 'Salameche', 'HP' : 39, 'Attaque' : 52, 'Defense' : 43, 'Vitesse' : 65, 'Type' : ['Feu']}
pokemon4 = {'Nom' : 'Reptencil', 'HP' : 58, 'Attaque' : 64, 'Defense' : 58, 'Vitesse' : 80, 'Type' : ['Eau']}
liste_pokemon = [pokemon1, pokemon2, pokemon3, pokemon4]
pokemons_rapides = []
for pokemon in liste_pokemon:
    for cle, valeur in pokemon.items():
        if cle == 'Vitesse':
            if valeur > 60 :
                pokemons_rapides.append(pokemon['Nom'])
print(pokemons_rapides)
Solution 2

Correction possible sans utiliser la méthode items:

🐍 Script Python
pokemon1 = {'Nom' : 'Carapuce', 'HP' : 44, 'Attaque' : 48, 'Defense' : 65, 'Vitesse' : 43, 'Type' : ['Eau']}
pokemon2 = {'Nom' : 'Evoli', 'HP' : 55, 'Attaque' : 55, 'Defense' : 50, 'Vitesse' : 55, 'Type' : ['Normal']}
pokemon3 = {'Nom' : 'Salameche', 'HP' : 39, 'Attaque' : 52, 'Defense' : 43, 'Vitesse' : 65, 'Type' : ['Feu']}
pokemon4 = {'Nom' : 'Reptencil', 'HP' : 58, 'Attaque' : 64, 'Defense' : 58, 'Vitesse' : 80, 'Type' : ['Eau']}
liste_pokemon = [pokemon1, pokemon2, pokemon3, pokemon4]
pokemons_rapides = []
for pokemon in liste_pokemon:
    if pokemon['Vitesse'] > 60:
        pokemons_rapides.append(pokemon['Nom'])
print(pokemons_rapides)
Solution 3

😀 : Solution beaucoup plus élégante avec une liste en compréhension :

🐍 Script Python
pokemon1 = {'Nom' : 'Carapuce', 'HP' : 44, 'Attaque' : 48, 'Defense' : 65, 'Vitesse' : 43, 'Type' : ['Eau']}
pokemon2 = {'Nom' : 'Evoli', 'HP' : 55, 'Attaque' : 55, 'Defense' : 50, 'Vitesse' : 55, 'Type' : ['Normal']}
pokemon3 = {'Nom' : 'Salameche', 'HP' : 39, 'Attaque' : 52, 'Defense' : 43, 'Vitesse' : 65, 'Type' : ['Feu']}
pokemon4  ={'Nom' : 'Reptencil', 'HP' : 58, 'Attaque' : 64, 'Defense' : 58, 'Vitesse' : 80, 'Type' : ['Eau']}
liste_pokemon = [pokemon1, pokemon2, pokemon3, pokemon4]
pokemons_rapides = [pokemon["Nom"] for pokemon in liste_pokemon if pokemon["Vitesse"] > 60]
print(pokemons_rapides)