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.
Vous pouvez tester les deux fonctions ici
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
Version sans code à trous Version avec code à trous
.1280130ldy1,4k/weibmc:35aPr+ =ofgt26sSh)(punxv050d0l0C0t0m0c0F0x0p0c0t0F0F0y010C0m0K010406050F0L0o0o0t0v0e040G0z0c0L0)0z0M050j0:0=0@0_0.0K040519121c0j190.0d0m0O0X0Z0#0%0H0m0B0H0c1q0H0C0,050S0n0c0l1l0!0$011p1r1t1r0C1z1B1x0C0v1a0C0H0X0|0F0K0t0M0%0D011D1n010A0U0l0M0t0o0l1x1W1Y1%1F1*1B1-1/0,0a0x0u0v0z0K0z0F0m0 0M0x0Q1U0v0v0l0p27121=0M1a0j1S2k1P1R1Q1y0d1@0%1t0M1,241x1i1k0Y1E2u0m2w0M0z2A1x0K2d1a2i2k2O0/1X282C1(2H0v0?0c0,0f2h2S0-2R1?2U1F2W2Y0,0D2$1Y2(2i2t012-0t2Z040r2;2j0.2@2+0%2`2|0h2 2?2S2^350,0s38313a332_0z2X2{0,0E381d2M122A2n0d1R2s3i0p2I1:1a3t1b3r2Q132%053z0Q2N3h1m1F0i0,0Q0A380x2)2T3O340A0,3z0o0K0C0l0v3p323Y010+040J3,3N2D2_0,0F0e0o0n0|0l3?2*3.3:0g3U3W3b0,3)0N3)413X3^3:0I0q3f0x4k3V3-3^0M3#464n1(0z0,0y4r3@1(0o0m0,0b4j4l473i3Q040A3k4x424o3`4M4e4t0k0,2F4Q48044a4c3H2=4G430,4i4#304l4-4m4y3P4U3T4+044/4N2V4P4@4_4R1F4u040y4w4}4%4O043{3}3 4d2^3:4*2O064.5i4~4X0p4W3i51542O5k3i4p045m554s500,0w5n3.4A2!4E4k561(4I2d0C0L0v115x4:344q4@0.0j3K0l2k2L5Y3s1j3u2n2q2l0t1A5#0j3t5V0Q0S0U0F04.
.1280130ldy1,4k/weibmc:35aPr+ =ofgt26sSh)(punxv050d0l0C0t0m0c0F0x0p0c0t0F0F0y010C0m0K010406050F0L0o0o0t0v0e040G0z0c0L0)0z0M050j0:0=0@0_0.0K040519121c0j190.0d0m0O0X0Z0#0%0H0m0B0H0c1q0H0C0,050S0n0c0l1l0!0$011p1r1t1r0C1z1B1x0C0v1a0C0H0X0|0F0K0t0M0%0D011D1n010A0U0l0M0t0o0l1x1W1Y1%1F1*1B1-1/0,0a0x0u0v0z0K0z0F0m0 0M0x0Q1U0v0v0l0p27121=0M1a0j1S2k1P1R1Q1y0d1@0%1t0M1,241x1i1k0Y1E2u0m2w0M0z2A1x0K2d1a2i2k2O0/1X282C1(2H0v0?0c0,0f2h2S0-2R1?2U1F2W2Y0,0D2$1Y2(2i2t012-0t2Z040r2;2j0.2@2+0%2`2|0h2 2?2S2^350,0s38313a332_0z2X2{0,0E381d2M122A2n0d1R2s3i0p2I1:1a3t1b3r2Q132%053z0Q2N3h1m1F0i0,0Q0A380x2)2T3O340A0,3z0o0K0C0l0v3p323Y010+040J3,3N2D2_0,0F0e0o0n0|0l3?2*3.3:0g3U3W3b0,3)0N3)413X3^3:0I0q3f0x4k3V3-3^0M3#464n1(0z0,0y4r3@1(0o0m0,0b4j4l473i3Q040A3k4x424o3`4M4e4t0k0,2F4Q48044a4c3H2=4G430,4i4#304l4-4m4y3P4U3T4+044/4N2V4P4@4_4R1F4u040y4w4}4%4O043{3}3 4d2^3:4*2O064.5i4~4X0p4W3i51542O5k3i4p045m554s500,0w5n3.4A2!4E4k561(4I2d0C0L0v115x4:344q4@0.0j3K0l2k2L5Y3s1j3u2n2q2l0t1A5#0j3t5V0Q0S0U0F04.
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
Version sans code à trous Version avec code à trous
.128013ldy1,4]k/weibmc:35aPr =o[fgt2sSh)(pNunv050c0l0C0t0m0b0E0w0p0b0t0E0E0x010C0m0J010406050E0L0o0o0t0v0d040F0y0b0L0(0y0M050j0/0;0?0^0-0J040518111b0j180-0c0m0N0W0Y0!0$0G0m0B0G0b1p0G0C0+050R0n0b0l1k0Z0#011o1q1s1q0C1y1A1w0C0v190C0G0W0{0E0J0t0M0$0D011C1m010A0T0l0M0t0o0l1w1V1X1$1E1)1A1,1.0+0a0w0u0v0y0J0y0E0m0~0M0w0P1T0v0v0l0p26111;0M190j1R2j1O1Q1P1x0c1?0$1s0M1+231w1h1j0X1D2t0m2v0M0y2z1w0J2c192h2j2N0.1W272B1%2G0v0=0b0+0e2g2R0,2Q1=2T1E2V2X0+0D2#1X2%2h2s012,0t2Y040r2:2i0-2?2*0$2_2{0g2~2=2R2@340+0s371c2L112z2m0c1Q2r32010p2H1/193i1a3g2P122$053p0P2M393n0i0+0P0A370w2(2S1l2+0A0+22242f3x2;3L2@0*040I3e313N330+0N2`3#3D3%013Y0f3J3W3n0M0+2G0o0n2c0E3,2)3.3Y0H0q37060w473K3$2C013F040A0y0v3=4a2U0+0m4i3-4b0y0k4l103U2i494o2U0n0+0v1X0B0l3 3M4b3Y3!4u3C404b0M4z041_4F3X0+4J2P4j2+3_0y3{3}4S3n424345484,4w4M1%4d0m3I4K4.4G4k043`3|0l3~4K3?410+0z4%3.3^044m504X0$3Y0h4n4/1E0y0+0x0x5f4_4Y043*0b554H0+444K464-5y514b4d2c0C0L0v4t2N4^3a4l4+485A4:4A0Q5F5H2$5J3E0p0+0K0 4E5w113A0l2j2K5)3h1i3j2m2p2k0t1z5,0j3i0-5_0Q0S0U04.
.128013ldy1,4]k/weibmc:35aPr =o[fgt2sSh)(pNunv050c0l0C0t0m0b0E0w0p0b0t0E0E0x010C0m0J010406050E0L0o0o0t0v0d040F0y0b0L0(0y0M050j0/0;0?0^0-0J040518111b0j180-0c0m0N0W0Y0!0$0G0m0B0G0b1p0G0C0+050R0n0b0l1k0Z0#011o1q1s1q0C1y1A1w0C0v190C0G0W0{0E0J0t0M0$0D011C1m010A0T0l0M0t0o0l1w1V1X1$1E1)1A1,1.0+0a0w0u0v0y0J0y0E0m0~0M0w0P1T0v0v0l0p26111;0M190j1R2j1O1Q1P1x0c1?0$1s0M1+231w1h1j0X1D2t0m2v0M0y2z1w0J2c192h2j2N0.1W272B1%2G0v0=0b0+0e2g2R0,2Q1=2T1E2V2X0+0D2#1X2%2h2s012,0t2Y040r2:2i0-2?2*0$2_2{0g2~2=2R2@340+0s371c2L112z2m0c1Q2r32010p2H1/193i1a3g2P122$053p0P2M393n0i0+0P0A370w2(2S1l2+0A0+22242f3x2;3L2@0*040I3e313N330+0N2`3#3D3%013Y0f3J3W3n0M0+2G0o0n2c0E3,2)3.3Y0H0q37060w473K3$2C013F040A0y0v3=4a2U0+0m4i3-4b0y0k4l103U2i494o2U0n0+0v1X0B0l3 3M4b3Y3!4u3C404b0M4z041_4F3X0+4J2P4j2+3_0y3{3}4S3n424345484,4w4M1%4d0m3I4K4.4G4k043`3|0l3~4K3?410+0z4%3.3^044m504X0$3Y0h4n4/1E0y0+0x0x5f4_4Y043*0b554H0+444K464-5y514b4d2c0C0L0v4t2N4^3a4l4+485A4:4A0Q5F5H2$5J3E0p0+0K0 4E5w113A0l2j2K5)3h1i3j2m2p2k0t1z5,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.
Avec range
Avec une formule
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
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
Version vide Code à trous et parcours inverse Code à trous et parcours normal
.128013ldy1,4-]k/weibmc_:35aPr =o[fgt2sSh)(pNunv050c0m0E0v0n0b0G0y0q0b0v0G0G0z010E0n0L010406050G0N0p0p0v0x0d040H0A0b0N0*0A0O050k0;0?0^0`0/0L04051a131d0k1a0/0c0n0P0Y0!0$0(0I0n0D0I0b1r0I0E0-050T0o0b0m1m0#0%011q1s1u1s0E1A1C1y0E0x1b0E0I0Y0}0G0L0v0O0(0F011E1o010C0V0m0O0v0p0m1y1X1Z1(1G1+1C1.1:0-0a0y0w0x0A0L0A0G0n100O0y0R1V0x0x0m0q28131?0O1b0k1T2l1Q1S1R1z0c1^0(1u0O1-251y1j1l0Z1F2v0n2x0O0A2B1y0L2e1b2j2l2P0:1Y292D1)2I0x0@0b0-0e2i2T0.2S1@2V1G2X2Z0-0F2%1Z2)2j2u012.0v2!040t2=2k0/2^2,0(2{2}0g302@2T2_360-0u391e2N132B2o0c1S2t34010q2J1;1b3k1c3i2R142(053r0R2O3b3p0j0-0R0C390y2*2U1n2-0C3I0m0x0O0n3T0m0r24262h3z2?3N2_0,040K3g333P350-0P2|3.3F3:013+0f3L3)3p0O0-2I0p0o2e0G3^2+3`3+0J0s39060y4g3M3/2E013H040C0A0x3~4j2W0-0n4r3_4k0A0l4u123%2k4i4x2W0o0-0x1Z0D0m483O4k3+3-4D3E494k0O4I041{4O3*0-4S2R4s2-420A44464#3p4b4:3`0A0-0h4?4k0p0n2#4{1)3|4w4V1)4^044`4T3 3`4}4 594*0(524T4F541G56584)4G1G5c042$5e5p5g0-4c4e4h5A5j4P1)4m0n3K5i5a4W4,4.0m475u5k5w040B504+044v5P5D1G3+0i535Z0(560z0z5%3c3=3@5Y4$044d4T4f5B5`5J5E4J0S0N3U5-404u5z4h5|1G4m2e0E604C2P5C2_0j0q0-0M114N5^133C0m2l2M6q3j1k3l2o2r2m0v1B6t0k3k0/6D0S0U0W04.
.128013ldy1,4-]k/weibmc_:35aPr =o[fgt2sSh)(pNunv050c0m0E0v0n0b0G0y0q0b0v0G0G0z010E0n0L010406050G0N0p0p0v0x0d040H0A0b0N0*0A0O050k0;0?0^0`0/0L04051a131d0k1a0/0c0n0P0Y0!0$0(0I0n0D0I0b1r0I0E0-050T0o0b0m1m0#0%011q1s1u1s0E1A1C1y0E0x1b0E0I0Y0}0G0L0v0O0(0F011E1o010C0V0m0O0v0p0m1y1X1Z1(1G1+1C1.1:0-0a0y0w0x0A0L0A0G0n100O0y0R1V0x0x0m0q28131?0O1b0k1T2l1Q1S1R1z0c1^0(1u0O1-251y1j1l0Z1F2v0n2x0O0A2B1y0L2e1b2j2l2P0:1Y292D1)2I0x0@0b0-0e2i2T0.2S1@2V1G2X2Z0-0F2%1Z2)2j2u012.0v2!040t2=2k0/2^2,0(2{2}0g302@2T2_360-0u391e2N132B2o0c1S2t34010q2J1;1b3k1c3i2R142(053r0R2O3b3p0j0-0R0C390y2*2U1n2-0C3I0m0x0O0n3T0m0r24262h3z2?3N2_0,040K3g333P350-0P2|3.3F3:013+0f3L3)3p0O0-2I0p0o2e0G3^2+3`3+0J0s39060y4g3M3/2E013H040C0A0x3~4j2W0-0n4r3_4k0A0l4u123%2k4i4x2W0o0-0x1Z0D0m483O4k3+3-4D3E494k0O4I041{4O3*0-4S2R4s2-420A44464#3p4b4:3`0A0-0h4?4k0p0n2#4{1)3|4w4V1)4^044`4T3 3`4}4 594*0(524T4F541G56584)4G1G5c042$5e5p5g0-4c4e4h5A5j4P1)4m0n3K5i5a4W4,4.0m475u5k5w040B504+044v5P5D1G3+0i535Z0(560z0z5%3c3=3@5Y4$044d4T4f5B5`5J5E4J0S0N3U5-404u5z4h5|1G4m2e0E604C2P5C2_0j0q0-0M114N5^133C0m2l2M6q3j1k3l2o2r2m0v1B6t0k3k0/6D0S0U0W04.
.128013ldy1,4]k/weibmc_:35aPr =o[fgt26sSh)(pNunv050c0l0D0u0m0b0G0x0p0b0u0G0G0y010D0m0L010406050G0N0o0o0u0w0d040H0z0b0N0*0z0O050j0;0?0^0`0/0L04051a131d0j1a0/0c0m0P0Y0!0$0(0I0m0C0I0b1r0I0D0-050T0n0b0l1m0#0%011q1s1u1s0D1A1C1y0D0w1b0D0I0Y0}0G0L0u0O0(0E011E1o010B0V0l0O0u0o0l1y1X1Z1(1G1+1C1.1:0-0a0x0v0w0z0L0z0G0m100O0x0R1V0w0w0l0p28131?0O1b0j1T2l1Q1S1R1z0c1^0(1u0O1-251y1j1l0Z1F2v0m2x0O0z2B1y0L2e1b2j2l2P0:1Y292D1)2I0w0@0b0-0e2i2T0.2S1@2V1G2X2Z0-0E2%1Z2)2j2u012.0u2!040s2=2k0/2^2,0(2{2}0g302@2T2_360-0t39323b342`0z2Y2|0-0F391e2N132B2o0c1S2t3j0p2J1;1b3u1c3s2R142(053A0R2O3i1n1G0i0-0R0B390x2*2U3P350B3S0l0w0O0m3%0l0q24262h3I2?3X2_0,040K3q333Z2`0-0P2|3{3O2E013^0f3V3?3j0O0-2I0o0n2e0G422+3}3^0J0r3g0x4p3W3|444b042e240O0G0l484s1)0z0-0y4B431)0i0p0-0M114A3;314q4r4I3Q0-0B3l4H4j4t0-0m4Z3Y440z0k4$124Q044T4!2W0n0-0w1Z0C4P2R4C1G3^3`4/493}0O4@041{4i4)1)50593c4c0z4e4g5d3j4l4m4o4S4q53443R040m3U4/4;5a2-5f5h0l4h524~0(3^0A5j544$5J443^0h4(2_4E040y4G5w5q2W3 415E4U5G0-4n4/065o5,5x5e4v0l4x4z5Q3j5S5V2P5.4a5L5*4S5X4V5:0D0N3(5@5K5:5=4|2(0/0j3L0l2l2M6g3t1k3v2o2r2m0u1B6j0j3u6d0R0T0V0G04.
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
Version sans code à trous Version avec code à trous
.128013ldTy14]k/weibmc_:35aPr F=o[fgt2sSh)(punv050c0l0E0u0m0b0G0x0p0b0u0G0G0z010E0m0L010406050G0M0o0o0u0w0e040H0A0b0M0)0A0N050j0:0=0@0_0.0L040519121c0j190.0c0m0O0X0Z0#0%0I0m0D0I0b1q0I0E0,050S0n0b0l1l0!0$011p1r1t1r0E1z1B1x0E0w1a0E0I0X0|0G0L0u0N0%0F011D1n010C0U0l0N0u0o0l1x1W1Y1%1F1*1B1-1/0,0a0x0v0w0A0L0A0G0m0 0N0x0Q1U0w0w0l0p27121=0N1a0j1S2k1P1R1Q1y0c1@0%1t0N1,241x1i1k0Y1E2u0m2w0N0A2A1x0L2d1a2i2k2O0/1X282C1(2H0w0?0b0,0f2h2S0-2R1?2U1F2W2Y0,0F2$1Y2(2i2t012-0u2Z040s2;2j0.2@2+0%2`2|0g2 2?2S2^350,0t381d2M122A2n0c1R2s33010p2I1:1a3j1b3h2Q132%053q0Q2N3a3o0i0,0Q0C380x2)2T1m2,0C0,2F1i0p0l0q0l0D2{0q0O2{0l0M0w3f323O0%0+040K3*3E3,2_0,2H0o0n2d0G3;2*3?3.0J0r38060x463L3+2D013G040C0A3)3y2=483=4a0N3R3K3M2^0A0k3R114h2j4j3 4l0n0,0w1Y0D0l3~3N4a3.3:4v3D4y2V4A041`4G2^4J4S3o4m043_3{0l3}4L4p3o414244474-4x4H1(4c0m3J4L4/3b3^0A3`3|4V400,0B4 4l4n4%491(3.0h4o571F0A0,0z0z5b4k2V552Q5c3-0,434L454.5t4(3?4c2d0E3(4u2O4_3F0p0,0d0w0M4F5r4-5v4a5x0R5A5i4N1F0i5F040y2{0G5K2O0.0j3B0l2k2L5*3i1j3k2n2q2l0u1A5-0j3j5%0Q0S0U0G04.
.128013ldTy14]k/weibmc_:35aPr F=o[fgt2sSh)(punv050c0l0E0u0m0b0G0x0p0b0u0G0G0z010E0m0L010406050G0M0o0o0u0w0e040H0A0b0M0)0A0N050j0:0=0@0_0.0L040519121c0j190.0c0m0O0X0Z0#0%0I0m0D0I0b1q0I0E0,050S0n0b0l1l0!0$011p1r1t1r0E1z1B1x0E0w1a0E0I0X0|0G0L0u0N0%0F011D1n010C0U0l0N0u0o0l1x1W1Y1%1F1*1B1-1/0,0a0x0v0w0A0L0A0G0m0 0N0x0Q1U0w0w0l0p27121=0N1a0j1S2k1P1R1Q1y0c1@0%1t0N1,241x1i1k0Y1E2u0m2w0N0A2A1x0L2d1a2i2k2O0/1X282C1(2H0w0?0b0,0f2h2S0-2R1?2U1F2W2Y0,0F2$1Y2(2i2t012-0u2Z040s2;2j0.2@2+0%2`2|0g2 2?2S2^350,0t381d2M122A2n0c1R2s33010p2I1:1a3j1b3h2Q132%053q0Q2N3a3o0i0,0Q0C380x2)2T1m2,0C0,2F1i0p0l0q0l0D2{0q0O2{0l0M0w3f323O0%0+040K3*3E3,2_0,2H0o0n2d0G3;2*3?3.0J0r38060x463L3+2D013G040C0A3)3y2=483=4a0N3R3K3M2^0A0k3R114h2j4j3 4l0n0,0w1Y0D0l3~3N4a3.3:4v3D4y2V4A041`4G2^4J4S3o4m043_3{0l3}4L4p3o414244474-4x4H1(4c0m3J4L4/3b3^0A3`3|4V400,0B4 4l4n4%491(3.0h4o571F0A0,0z0z5b4k2V552Q5c3-0,434L454.5t4(3?4c2d0E3(4u2O4_3F0p0,0d0w0M4F5r4-5v4a5x0R5A5i4N1F0i5F040y2{0G5K2O0.0j3B0l2k2L5*3i1j3k2n2q2l0u1A5-0j3j5%0Q0S0U0G04.
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
Version sans code à trous Version avec code à trous
.1280130ldy1,4-k/weibmc:_35aPr+ 7=9ofgt28;6sSh)(punv050d0m0G0v0n0c0L0z0q0c0v0L0L0B010G0n0Q010406050L0R0p0p0v0x0e040M0D0c0R0.0D0S050k0^0`0|0~0?0Q04051e171h0k1e0?0d0n0T0$0(0*0,0N0n0F0N0c1v0N0G0;050X0o0c0m1q0)0+011u1w1y1w0G1E1G1C0G0x1f0G0N0$110L0Q0v0S0,0H011I1s010E0Z0m0S0v0p0m1C1#1%1,1K1/1G1=1@0;0a0z0w0x0D0Q0D0L0n140S0z0V1Z0x0x0m0q2c171`0S1f0k1X2p1U1W1V1D0d1|0,1y0S1;291C1n1p0%1J2z0n2B0S0D2F1C0Q2i1f2n2p2T0@1$2d2H1-2M0x0{0c0;0z0f2m2X0=2W1{2Z1K2#2%2)0H2,1%2.2n2y012?0v2(040z0t2`2o0?2}2;0,30320z0h362|2X2~3c2)0u3g383i3a2 0D2$312)0K3n2/2Y1r2=3s2@330A3x393A3b3C3u330I3G3p3I3r3t3d0C3O2:3Q3k040f0b3g1i2R172F2s0d1W2x3q0q2N1^1f3*1g3(2V182-053:0V2S3P2I010j0;0V0E3g0z3y3j0E0;2K1n0L0q0m0x1=1F0m0L3$3H420:040P4o412!0;2M0p0o2i2+3{2{4a3q4r0g484F3X4x0D4z2i2_4D2o4K4q0;0O0r3n0z4Z494p1-44042i0G0R4j4J4$2=0o0;0v0o4n4R403W4U4s4u4{4w044y4A0m4C2T4#4v1K0D0;0i4.583b4M4O0m4Q2V4/0,4r0O5d4 590;020c0G0J5p3z420p4c3Z0m0i0f3m4_063o5q0,4(465x4b0;0p0D0e1;2B4~5y1-4r4t4_4T500T310m4,4^5k5e015n4X5H4!575K2 0;0L4N1@5O3q5a040B5~3Q0p0n0;3#5=4!5$2=4x0o0s2M0G4m634260624_5@5X1K65674Y6a5l430;0E3s6j506g0m6A590l4d166n6b5f045(1G5+5W2~4r5;2T065?5?6K5_045{0`6D6J6v6l6E6L6#5}6(5.600y6+6Z6C6t6W6o3j6d6f0D6h5,2-6{5 0;6m566Y0S6}6C712{733Q6;6?6r3Z6_7e424(4*4,6I776v796!5|6%7r6:0;0k6?7t0S6e7b3x0k3~0m2p2Q7J3)1o3+2s2v2q4?1G2p3*0?0k0V0X0Z0L04.
.1280130ldy1,4-k/weibmc:_35aPr+ 7=9ofgt28;6sSh)(punv050d0m0G0v0n0c0L0z0q0c0v0L0L0B010G0n0Q010406050L0R0p0p0v0x0e040M0D0c0R0.0D0S050k0^0`0|0~0?0Q04051e171h0k1e0?0d0n0T0$0(0*0,0N0n0F0N0c1v0N0G0;050X0o0c0m1q0)0+011u1w1y1w0G1E1G1C0G0x1f0G0N0$110L0Q0v0S0,0H011I1s010E0Z0m0S0v0p0m1C1#1%1,1K1/1G1=1@0;0a0z0w0x0D0Q0D0L0n140S0z0V1Z0x0x0m0q2c171`0S1f0k1X2p1U1W1V1D0d1|0,1y0S1;291C1n1p0%1J2z0n2B0S0D2F1C0Q2i1f2n2p2T0@1$2d2H1-2M0x0{0c0;0z0f2m2X0=2W1{2Z1K2#2%2)0H2,1%2.2n2y012?0v2(040z0t2`2o0?2}2;0,30320z0h362|2X2~3c2)0u3g383i3a2 0D2$312)0K3n2/2Y1r2=3s2@330A3x393A3b3C3u330I3G3p3I3r3t3d0C3O2:3Q3k040f0b3g1i2R172F2s0d1W2x3q0q2N1^1f3*1g3(2V182-053:0V2S3P2I010j0;0V0E3g0z3y3j0E0;2K1n0L0q0m0x1=1F0m0L3$3H420:040P4o412!0;2M0p0o2i2+3{2{4a3q4r0g484F3X4x0D4z2i2_4D2o4K4q0;0O0r3n0z4Z494p1-44042i0G0R4j4J4$2=0o0;0v0o4n4R403W4U4s4u4{4w044y4A0m4C2T4#4v1K0D0;0i4.583b4M4O0m4Q2V4/0,4r0O5d4 590;020c0G0J5p3z420p4c3Z0m0i0f3m4_063o5q0,4(465x4b0;0p0D0e1;2B4~5y1-4r4t4_4T500T310m4,4^5k5e015n4X5H4!575K2 0;0L4N1@5O3q5a040B5~3Q0p0n0;3#5=4!5$2=4x0o0s2M0G4m634260624_5@5X1K65674Y6a5l430;0E3s6j506g0m6A590l4d166n6b5f045(1G5+5W2~4r5;2T065?5?6K5_045{0`6D6J6v6l6E6L6#5}6(5.600y6+6Z6C6t6W6o3j6d6f0D6h5,2-6{5 0;6m566Y0S6}6C712{733Q6;6?6r3Z6_7e424(4*4,6I776v796!5|6%7r6:0;0k6?7t0S6e7b3x0k3~0m2p2Q7J3)1o3+2s2v2q4?1G2p3*0?0k0V0X0Z0L04.
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 )
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
Version sans code à trous Version avec code à trous
.1280130ldy1,4*-k/weibmc:_35aPr+ 7=9ofgt28;6sSh)(punv050d0n0H0w0o0c0M0A0r0c0w0M0M0C010H0o0R010406050M0S0q0q0w0y0e040N0E0c0S0/0E0T050l0_0{0}0 0@0R04051f181i0l1f0@0d0o0U0%0)0+0-0O0o0G0O0c1w0O0H0=050Y0p0c0n1r0*0,011v1x1z1x0H1F1H1D0H0y1g0H0O0%120M0R0w0T0-0I011J1t010F0!0n0T0w0q0n1D1$1(1-1L1:1H1?1^0=0a0A0x0y0E0R0E0M0o150T0A0W1!0y0y0n0r2d181{0T1g0l1Y2q1V1X1W1E0d1}0-1z0T1=2a1D1o1q0(1K2A0o2C0T0E2G1D0R2j1g2o2q2U0^1%2e2I1.2N0y0|0c0=0A0f2n2Y0?2X1|2!1L2$2(2*0I2-1(2/2o2z012@0w2)040A0u2{2p0@2~2=0-31330A0h372}2Y2 3d2*0v3h393j3b300E2%322*0L3o2:2Z1s2?3t2^340B3y3a3B3c3D3v340J3H3q3J3s3u3e0D3P2;3R3l040f0b3h1j2S182G2t0d1X2y3r0r2O1_1g3+1h3)2W192.053;0W2T3Q2J010k0=0W0F3h0A3z3k0F0=2L1o0M0r0n0y1?1G0n0M3%3I430;040Q4p422#0=2N0q0p2j2,3|2|4b3r4s0g494G3Y4y0E4A2j2`4E2p4L4r0=0P0s3o0A4!4a4q1.45042j0H0S4k4K4%2?0p0=0w0p4o4S413X4V4t4v4|4x044z4B0n4D2U4$4w1L0E0=0j4/593c4N4P0n4R2W4:0-4s0P5e505a0=020c0H0K5q3A430q4d3!0n0j0f3n4`063p5r0-4)475y4c0=0q0E0e1=2C0t290T0W2j0n4 5z1.4s4u4`4U512j0_5v0w0H4_5l5f015o4Y5I4#585L300=0M4O1^0t2N0H4n5P3r5b040C6a3R0q0o0=3$5}4#5-2?62640n0t3;0n0F0F5@2.5 5(5s6d6f5A6i046k2U065~6n5M0=0F3t6D51675$5,5m5`0=4J4`6z3k0=6t6v6Q5a0m4e176Z6L614*4n0S5;5?5%2 4s5|6I5~6K6V0T6p0{6r6S6x2|6!6b0=6e6.707265756)0-6c0z7h6:6S6_79040i7o4M046%486l6~787t63736s0E6u6w7l6c7b576/71047B657v762p7z437j7l7M7v4Z6m6V4)4+4-6-7K7d7N6q660E687R346/6c0l7W7e6r7Q3y0l3 0n2q2R803*1p3,2t2w2r4@1H2q3+0@0l0W0Y0!0M04.
.1280130ldy1,4*-k/weibmc:_35aPr+ 7=9ofgt28;6sSh)(punv050d0n0H0w0o0c0M0A0r0c0w0M0M0C010H0o0R010406050M0S0q0q0w0y0e040N0E0c0S0/0E0T050l0_0{0}0 0@0R04051f181i0l1f0@0d0o0U0%0)0+0-0O0o0G0O0c1w0O0H0=050Y0p0c0n1r0*0,011v1x1z1x0H1F1H1D0H0y1g0H0O0%120M0R0w0T0-0I011J1t010F0!0n0T0w0q0n1D1$1(1-1L1:1H1?1^0=0a0A0x0y0E0R0E0M0o150T0A0W1!0y0y0n0r2d181{0T1g0l1Y2q1V1X1W1E0d1}0-1z0T1=2a1D1o1q0(1K2A0o2C0T0E2G1D0R2j1g2o2q2U0^1%2e2I1.2N0y0|0c0=0A0f2n2Y0?2X1|2!1L2$2(2*0I2-1(2/2o2z012@0w2)040A0u2{2p0@2~2=0-31330A0h372}2Y2 3d2*0v3h393j3b300E2%322*0L3o2:2Z1s2?3t2^340B3y3a3B3c3D3v340J3H3q3J3s3u3e0D3P2;3R3l040f0b3h1j2S182G2t0d1X2y3r0r2O1_1g3+1h3)2W192.053;0W2T3Q2J010k0=0W0F3h0A3z3k0F0=2L1o0M0r0n0y1?1G0n0M3%3I430;040Q4p422#0=2N0q0p2j2,3|2|4b3r4s0g494G3Y4y0E4A2j2`4E2p4L4r0=0P0s3o0A4!4a4q1.45042j0H0S4k4K4%2?0p0=0w0p4o4S413X4V4t4v4|4x044z4B0n4D2U4$4w1L0E0=0j4/593c4N4P0n4R2W4:0-4s0P5e505a0=020c0H0K5q3A430q4d3!0n0j0f3n4`063p5r0-4)475y4c0=0q0E0e1=2C0t290T0W2j0n4 5z1.4s4u4`4U512j0_5v0w0H4_5l5f015o4Y5I4#585L300=0M4O1^0t2N0H4n5P3r5b040C6a3R0q0o0=3$5}4#5-2?62640n0t3;0n0F0F5@2.5 5(5s6d6f5A6i046k2U065~6n5M0=0F3t6D51675$5,5m5`0=4J4`6z3k0=6t6v6Q5a0m4e176Z6L614*4n0S5;5?5%2 4s5|6I5~6K6V0T6p0{6r6S6x2|6!6b0=6e6.707265756)0-6c0z7h6:6S6_79040i7o4M046%486l6~787t63736s0E6u6w7l6c7b576/71047B657v762p7z437j7l7M7v4Z6m6V4)4+4-6-7K7d7N6q660E687R346/6c0l7W7e6r7Q3y0l3 0n2q2R803*1p3,2t2w2r4@1H2q3+0@0l0W0Y0!0M04.
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}
Version sans code à trous Version avec un peu d'aide Version avec beaucoup d'aide
.128013ldy14]k/weibmc:_35aPr+ 7=o[fgt286sSh)(punv050c0k0E0t0l0b0I0x0o0b0t0I0I0z010E0l0N010406050I0O0n0n0t0v0d040J0A0b0O0+0A0P050i0=0@0_0{0:0N04051b141e0i1b0:0c0l0Q0Z0#0%0)0K0l0D0K0b1s0K0E0.050U0m0b0k1n0$0(011r1t1v1t0E1B1D1z0E0v1c0E0K0Z0~0I0N0t0P0)0F011F1p010C0W0k0P0t0n0k1z1Y1!1)1H1,1D1/1;0.0a0x0u0v0A0N0A0I0l110P0x0S1W0v0v0k0o29141@0P1c0i1U2m1R1T1S1A0c1_0)1v0P1.261z1k1m0!1G2w0l2y0P0A2C1z0N2f1c2k2m2Q0;1Z2a2E1*2J0v0^0b0.0e2j2U0/2T1^2W1H2Y2!0.0F2(1!2*2k2v012/0t2#040r2?2l0:2_2-0)2|2~0f312^2U2`370.0s3a333c352{0A2Z2}0.0H3h2+2V1o2.3m2:040y3r343u363w3o040G3a1f2O142C2p0c1T2u3k0o2K1=1c3M1d3K2S152)053S0S2P3j3C010h0.0S0C3a0x3s3d0C0.0k0C0C2g0+0C0I3I3B2F010-040M413*430P3.122y0k403!2@3?3k450L0p3h0x4p3=422X3.0l3S0q3`3|2h3;4j3+0A0.0z4B4s2.0m4u4A4h2l4C43450M0L4o4q4P1*3-040C3m4H494t040Q4$2,4D0j0.2H4+3t4a4c0P4e4g2S4I0)454n4N0/4q524r4%1H4Y0l3:50544,4?4)4;2`0A4.044:5a4W2.4L0A4x3{3}485c1*4~4U53535m365o5q4z0E5t4=5v0.0B5G3d0.4*505A440.0g5f3k4E044G5l4|2{5C4y5s5P5!455K5)555B5e5-5u1H455T5Z5.015W0w5U3+0n0l2$5x5z5!4Y0k0X0k5L4k0.4 2Q065y5y5Q4b041k4w5%4M4{5`5+6a3+6j5O6p5=4}5S5~435W5Y2Q5b5H1H6062506f4V650.2f0E0O0v135_6x5#6k4v5p6n5F6K143%0k2m2N6)3L1l3N2p2s2n0t1C6,0i3M0:6_0T0V0X04.
.128013ldy14]k/weibmc:_35aPr+ 7=o[fgt286sSh)(punv050c0k0E0t0l0b0I0x0o0b0t0I0I0z010E0l0N010406050I0O0n0n0t0v0d040J0A0b0O0+0A0P050i0=0@0_0{0:0N04051b141e0i1b0:0c0l0Q0Z0#0%0)0K0l0D0K0b1s0K0E0.050U0m0b0k1n0$0(011r1t1v1t0E1B1D1z0E0v1c0E0K0Z0~0I0N0t0P0)0F011F1p010C0W0k0P0t0n0k1z1Y1!1)1H1,1D1/1;0.0a0x0u0v0A0N0A0I0l110P0x0S1W0v0v0k0o29141@0P1c0i1U2m1R1T1S1A0c1_0)1v0P1.261z1k1m0!1G2w0l2y0P0A2C1z0N2f1c2k2m2Q0;1Z2a2E1*2J0v0^0b0.0e2j2U0/2T1^2W1H2Y2!0.0F2(1!2*2k2v012/0t2#040r2?2l0:2_2-0)2|2~0f312^2U2`370.0s3a333c352{0A2Z2}0.0H3h2+2V1o2.3m2:040y3r343u363w3o040G3a1f2O142C2p0c1T2u3k0o2K1=1c3M1d3K2S152)053S0S2P3j3C010h0.0S0C3a0x3s3d0C0.0k0C0C2g0+0C0I3I3B2F010-040M413*430P3.122y0k403!2@3?3k450L0p3h0x4p3=422X3.0l3S0q3`3|2h3;4j3+0A0.0z4B4s2.0m4u4A4h2l4C43450M0L4o4q4P1*3-040C3m4H494t040Q4$2,4D0j0.2H4+3t4a4c0P4e4g2S4I0)454n4N0/4q524r4%1H4Y0l3:50544,4?4)4;2`0A4.044:5a4W2.4L0A4x3{3}485c1*4~4U53535m365o5q4z0E5t4=5v0.0B5G3d0.4*505A440.0g5f3k4E044G5l4|2{5C4y5s5P5!455K5)555B5e5-5u1H455T5Z5.015W0w5U3+0n0l2$5x5z5!4Y0k0X0k5L4k0.4 2Q065y5y5Q4b041k4w5%4M4{5`5+6a3+6j5O6p5=4}5S5~435W5Y2Q5b5H1H6062506f4V650.2f0E0O0v135_6x5#6k4v5p6n5F6K143%0k2m2N6)3L1l3N2p2s2n0t1C6,0i3M0:6_0T0V0X04.
.128013ldy14{]ké/weibmc:_35aPr}+ 7=o[fgt286sSOh)(punv050c0m0H0v0n0b0L0A0q0b0v0L0L0C010H0n0R010406050L0S0p0p0v0x0d040M0D0b0S0/0D0T050k0_0{0}0 0@0R04051f181i0k1f0@0c0n0U0%0)0+0-0O0n0G0O0b1w0O0H0=050Y0o0b0m1r0*0,011v1x1z1x0H1F1H1D0H0x1g0H0O0%120L0R0v0T0-0I011J1t010F0!0m0T0v0p0m1D1$1(1-1L1:1H1?1^0=0a0A0w0x0D0R0D0L0n150T0A0W1!0x0x0m0q2d181{0T1g0k1Y2q1V1X1W1E0c1}0-1z0T1=2a1D1o1q0(1K2A0n2C0T0D2G1D0R2j1g2o2q2U0^1%2e2I1.2N0x0|0b0=0e2n2Y0?2X1|2!1L2$2(0=0I2,1(2.2o2z012?0v2)040t2`2p0@2}2;0-30320f352|2Y2~3b0=0u3e373g392 0D2%310=0K3l2/2Z1s2=3q2@040B3v383y3a3A3s040J3e1j2S182G2t0c1X2y3o0q2O1_1g3Q1h3O2W192-053W0W2T3n3G010i0=0W0F3e0A3w3h0F0=0m0F0F2k0/0F0L3M3F2J010;040Q453.470T3=162C0m443(2{3`3o490P0r3l0A4t3_462#3=0n3W0s3~402l3^4n3/0D0=0C4F4w2=0o4y4E4l2p4G47490Q0P3^4v4d1.0q0e0=030A0N2e0R0m140A0v0S0+0n0A0j0q0x0n2j2f4z0D4B3 410A0C0A0g0y4s4u4T1.3;040F3q4L4!2=0=0U5h2:4H0l0=2L5m3x4e4g0T4i4k2W4M0-494r4R0?4u5G4Z5n475d0n3@5E5I5t4x045l5O5b1L0D5p045r5U5A2 4P504C414c5J1.5C595H5H5V3a5(514D0H5,5Q1L490E5|3h5k614o0=0h5s2~4I044K5#5i5@041o4A5*4Q5z6e480=605E5?5%5S643/49676d5-5W0=0z683o0p0n2*5:5=5$5d0m0#0m6u4U0=5D2U065;5;6r4f6g4 5_5+6q5$5 6P5R5T6l6z5B666D4H4J6;476F6H5E6U5a6K0=2j0H0S0x176y5}6f6h5)526k2-0@0k3+0m2q2R7g3P1p3R2t2w2r0v1G7j0k3Q7d0W0Y0!0L04.
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
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 ...
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
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
.128013ldy14]k/weibmc_:35aPr =o[f.gt26sSh)(punv050c0k0D0t0l0b0G0w0o0b0t0G0G0x010D0l0L010406050G0M0n0n0t0v0d040H0y0b0M0)0y0N050i0:0=0@0_0.0L040519121c0i190.0c0l0O0X0Z0#0%0I0l0C0I0b1q0I0D0,050S0m0b0k1l0!0$011p1r1t1r0D1z1B1x0D0v1a0D0I0X0|0G0L0t0N0%0E011D1n010A0U0k0N0t0n0k1x1W1Y1%1F1*1B1-1/0,0a0w0u0v0y0L0y0G0l0 0N0w0Q1U0v0v0k0o27121=0N1a0i1S2k1P1R1Q1y0c1@0%1t0N1,241x1i1k0Y1E2u0l2w0N0y2A1x0L2d1a2i2k2O0/1X282C1(2H0v0?0b0,0e2h2S0-2R1?2U1F2W2Y0,0E2$1Y2(2i2t012-0t2Z040r2;2j0.2@2+0%2`2|0f2 2?2S2^350,0s38313a332_0y2X2{0,0F381d2M122A2n0c1R2s3i0o2I1:1a3t1b3r2Q132%053z0Q2N3h1m1F0h0,0Q0A380w2)2T3O340A0,0G1Y0G0p0c0y0M1A103p323Y010+040K3/3N2D2_0,1M0k0t0M3_2*3;3?0J0q3f0w493V3:3{0N0,2H0M0O3 413H2=4b3`1(0y0,0x3U3W2^3?0z0g484a4u3i3Q040A3k4t4c2V4f0y0n0m2d4H4o1F0y0j0,2F4P434d3}0t1A4j423X3{3?474l304a4.4n4X1(4D0l3T4,044:4(4J042H4M4O4_4{2^4S4K0D4W4|4R4T044V524B3;4e4~3+4i404%4v0,4+2O064/5s533i5h4g5k4k2Q4I4R0,0B5m5v0,0t0L0L1,0c5F440,3^4_5f4Y5i500k5N4)0,0J4z495S4=0,2d0D0M0v115e5B344K4h4$4_0.0i3K0k2k2L5|3s1j3u2n2q2l4!1B2k3t5_0Q0S0U0G04.
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
.1280130ldy14k/weibmc_:35aPr%+ =ofgt26sSh)(punv050d0k0D0t0l0c0G0y0o0c0t0G0G0z010D0l0L010406050G0M0n0n0t0v0e040H0A0c0M0)0A0N050i0:0=0@0_0.0L040519121c0i190.0d0l0O0X0Z0#0%0I0l0C0I0c1q0I0D0,050S0m0c0k1l0!0$011p1r1t1r0D1z1B1x0D0v1a0D0I0X0|0G0L0t0N0%0E011D1n010B0U0k0N0t0n0k1x1W1Y1%1F1*1B1-1/0,0a0y0u0v0A0L0A0G0l0 0N0y0Q1U0v0v0k0o27121=0N1a0i1S2k1P1R1Q1y0d1@0%1t0N1,241x1i1k0Y1E2u0l2w0N0A2A1x0L2d1a2i2k2O0/1X282C1(2H0v0?0c0,0f2h2S0-2R1?2U1F2W2Y0,0E2$1Y2(2i2t012-0t2Z040r2;2j0.2@2+0%2`2|0g2 2?2S2^350,0s38313a332_0A2X2{0,0F381d2M122A2n0d1R2s3i0o2I1:1a3t1b3r2Q132%053z0Q2N3h1m1F0h0,0Q0B380y2)2T3O340B0,3z0n0L0D0k0v0p1P0*1B0G3p323Y010+040K3;3N2D2_0,1,0)3*3:3H2=3W2^3^0J0q3f0y4c3V3=3}0N3#3(3U463i0A0,0z4k4f1(0n0l0,0b4b4d4l3?3Q040B3k4q3|2V0,2H0n0m2d4F2*3?0A0j0,2F4N3X4g3 0N410v432Q4r1F3^4a44304d4-4e4G3P4S3T4+044/4O4W044J4L0k4U2^4n040w503i4t0,2~4@4_4V1(520z4p5a4z3}57044w4@5i1(4)4x4.4.5o2,4i0D554P4o5y4{0o4j5h4%0%520x5B4s4u042#4@064-5u0%4B2d0D0M0v115F4:345w3f123K0k2k2L5+3s1j3u2n2q2l0t1A5.0i3t0.5{0R0T0V04.
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.
.1280130ldTy1,4-]k/weibmc_:35qaPr+% 7F=9o[fgt28;6sSh)(Epunxv050d0o0M0y0p0c0R0D0s0c0y0R0R0G010M0p0X010406050R0Y0r0r0y0A0f040S0I0c0Y0_0I0Z050m101214160~0X04051m1f1p0m1m0~0d0p0#0.0:0=0@0T0p0L0T0c1D0T0M0|050)0q0c0o1y0;0?011C1E1G1E0M1M1O1K0M0A1n0M0T0.190R0X0y0Z0@0N011Q1A010K0+0o0Z0y0r0o1K1-1/1@1S1`1O1}1 0|0a0D0z0A0I0X0I0R0p1c0Z0D0%1+0A0A0o0s2k1f220Z1n0m1)2x1$1(1%1L0d240@1G0Z1|2h1K1v1x0/1R2H0p2J0Z0I2N1K0X2q1n2v2x2#0 1.2l2P1^2U0A130c0|0D0g2u2)0}2(232+1S2-2/2;0N2@1/2_2v2G012~0y2:040D0v322w0~352|0@383a0D0i3e342)363k2;0w3o3g3q3i370I2.392;0Q3v2`2*1z2}3A2 3b0E3F3h3I3j3K3C3b0O3O3x3Q3z3B3l0H3W2{3Y3s040g0b3%3H2Q3Z3L0g2?1g2^3w3(3:3*0g313^333`3/2,3S3a0g3d403f3G3r450|0g3n493p3{443!4e3u4h424c4l3+3E4o4b3y3}3N4u3P3|4d3+3V4z3X4B4r0g3$4F4j3J4r0N3-4L434N3L0N3@2#4p4w4C0N3 4X4v3)4!484%4A4k4U4g4,4G4.3T0N4n4;4M3R4O4t4`4S4|4U4y4 4q4U4E544Z4O4K584)4r0v4Q5c4H3L0v4W3_4(5i3T0v4$5m4-4T5p4+2^1q2Z1f2N2A0d1(2F3y0s2V201n5B1o5z2%4h055H0%2!4=1S0l0|0%0K3o0D5n2,0K5X0o0Y0!0t0s1C0K0K0o0R0t0p0%0Z0M3o5$1S0{040V5|5t3j0|0Z0q2q625U0@5 0u694{370q0|2S5{5P63015 0U6e50010I0|0j020L0M0P5!5}3j6h040q0I196q366c3.360n2;0D6P6I3y0R0d0|020x0Y0I6y6W6Y6!6X6Z6z4R366T6O6P2q0Z0#0I0p1P0e0A0Y1P2i0D662q0D0y2m5*0!0.5/0K2q0-5^1|0_6X5=0h0D0F390R6|2S1d6L6S6U3b6P0D0W0!0o0r0X1O0-6d6+7p6.0D6w6!6x0P7G0P735+5-775=5@5_0M0V3~0g6p7C3Y6-7r6P6_6{7o7Z7q7s7F7I7K7K7M5,5.0p5:7Q7b5`7U0N0v7X5h1^7!7,7i0,0o3v064Y7*7E6#6)8c6%6$6*4X7,6B370|0r6Z6A6m6t040G8p6a6g0|0R1$6R3Y5 616l8v0Z6567868E6f6o3v8j6m5W047@8u8L0|8D2%6m8G048n6k8X8v5 0J8A3:0r0p0|5g5x6m5 0k8T6r8r0G8t4h5#8Y8m8o8K6r8)8+1^8-4e955~0|8@8}8k0I6N043A8^3r908$8;8(0|8*9236973+996b9b9j3y8`8|2#8~8F9l9v6n9p9G9t5r338k8?7 2^9D6f9f0|9i8}9R6r8Z8#9G949r3y9t8:9M8=9x9d8q0|8{9y3)9F9%8B9I9^8,8.049L2w9N9b7B8i7,7s8k8Q2q0M0Y0A1e9.8v0l0s0|7%8Ja46Q8P0|0o859#0|a33_a5a6an04a9abad9Ca7ah04847k87a75)5Zae6f0Z5(040R0I120o7O7@785=ar609G8Z6 ak9n8U04at9+8F6D6jaZ9Pa-9S6u7Ka#a/5`aZa,4a6m9g8j9{817q8e7J6(8f6)7)3:827s6:6=6@0D0:0DaRaT730-7?7^0-2na%bbb47E7u7w7y1Pa~4i6rbd6P7/7.7IbkaS1 aV5:797|7~bu1SbE0D4~3_89bc7+7sb6b#b88hauaw9E8!91aC9/8s9=3|6D8y0AaZ8Wa)9Y8H68b39a04a=3f8Ob+bl1 b;1^8`c81S9)8Nb*6f8Q0K9Vb.b+0s14cb0@9T8RaB9Q8k9Zb-b{6Jasceavcu8xbKa(339X36caaMb|aQcEco6s0|0BcO666ia|b 9wa!cW8l04cmb^cZ8M4oc4cg0|azaccScDaTaI8 042g0=0p1NaYcKcI9:cO9$8%aN6icOchcjctc@0pcOcq2ScS6D0A1/0LcFa09,cYd36r9t3,9*dl9o040hcO9t5fds5Ta*c23baJ8RaLckd48Rdc0|0Cdx9}9 dEb/9;cZcdc(9-802}0|1G8ydkdR8vcJdI939`do9k04btc~3yd7c%d+d/d;d_9z9gded=9?c^2h2ic|0Rd66idHd9dub`a?cL0%7Nbp5;5?7`9medcydncx4wb}d%a1c1dL8s9BeacgaEajdc9g1/0dc:cMaTbMaXe6dWeoemeqd:8Ia;evdTd|3Y9t53ep9_c19c4%0m5R0o2x2Ye*5A1w5C2A2D2y0yc|2x5B0~0m0%0)0+0R04.
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']
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 )
# Tests
(insensible à la casse)(Ctrl+I)
(Ctrl+Clic pour inverser les colonnes)