Aller au contenu

Exercices sur les Listes⚓︎

Exercice 1 : QCM⚓︎

Parcours sur les indices ou sur les valeurs ?

On considère un tableau non vide contenant des valeurs quelconques. Indiquer dans chaque cas le bon type de parcours à effectuer.

  • On souhaite déterminer l'indice de la valeur maximale.

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ✅ Parcours sur les indices
    • ❌ Parcours sur les valeurs
  • On souhaite calculer la somme des valeurs.

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ❌ Parcours sur les indices
    • ✅ Parcours sur les valeurs
  • On souhaite créer un nouveau tableau ne contenant que les valeurs de la première moitié de tableau.

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ✅ Parcours sur les indices
    • ❌ Parcours sur les valeurs
  • On souhaite déterminer les deux extrema (minimum et maximum).

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ❌ Parcours sur les indices
    • ✅ Parcours sur les valeurs
  • On souhaite élever au carré toutes les valeurs du tableau en écrivant les nouvelles valeurs dans le même tableau. Par exemple [2, 3, 4] deviendrait [4, 9, 16].

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ✅ Parcours sur les indices
    • ✅ Parcours sur les valeurs avec une liste en compréhension : tableau = [x * x for x in tableau]

Exercice 2 : Les notes d'Alice - Saison 1⚓︎

bulletin

1. Alice veut créer la liste des notes qu’elle a obtenues ce trimestre en NSI.
Ces notes ne sont pas forcément des nombres entiers.
Ecrire une fonction qui demande de saisir les notes une par une, et qui renvoie liste_notes, la liste des notes qu’elle a obtenues.

Astuce 1

Vous pouvez prendre en paramètre de la fonction le nombre de notes à saisir.

Astuce 2

vous pouvez initialiser liste_notes = [], puis ajouter dans la liste les notes une par une avec une boucle.

Compléter le code

###(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
Python
def creation_liste(n):
    """
    n est un entier donnant la taille de la liste à saisir
    La fonction renvoie la liste saisie
    """
    liste_notes = []
    for i in range(n):
        note = float(input("saisir votre note : "))
        liste_notes.append(note)
    return liste_notes

2. Créer une fonction moyenne qui prend en paramètre une liste lst et renvoie la moyenne des éléments de cette liste.

Compléter le code

Compléter le script pour qu’il affiche la moyenne des notes saisies par Alice.

###(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
Python
def moyenne(lst):
    """
    Cette fonction renvoie la moyenne de la liste lst
    """
    somme = 0  #initialisation de la somme des notes
    for note in lst:  # calcul de la somme des notes avec une boucle
        somme = somme + note
    moyenne = somme/len(lst)  # len(liste) est le nombre de notes
    return moyenne

n = int(input("nombre de notes à saisir : "))
notes = creation_liste(n)
print(notes)  
moyenne_notes = moyenne(notes)
print(moyenne_notes)

Exercices du site "CodEx"⚓︎

Remarque

Ne faire que les exercices dont les liens sont donnés ici, car certains se trouvant sur le menu de gauche nécessitent des connaissances que nous n'avons pas encore vues.

Exercice 3 : Recherche d'indice - non guidé

Il s'agit de déterminer l'indice de la plus petite valeur dans un tableau non-vide.

Indice du minimum d'un tableau

Exercice 4 : Recherche de valeur - non guidé

La recherche de la valeur maximale dans un tableau. Classique.

Maximum

Exercice 5 : Lecture dans un tableau - non guidé

On donne les altitudes des différentes étapes d'une course en montagne. On demande quel est le dénivelé positif total.

Dénivelé positif

Exercice 6 : Comparaison d'éléments consécutifs - non guidé

Le tableau fourni est-il trié ?

Est trié ?

Exercice 7 : Modification d'un tableau⚓︎

Cet exercice est à réaliser pour introduire la notion "Affectations et listes" de la section suivante.

On se donne un tableau, une valeur cible et une valeur de remplacement et il faut parcourir le tableau et remplacer la cible par la nouvelle valeur.

Écrire la fonction remplacer prenant en argument :

  • une liste d'entiers valeurs
  • un entier valeur_cible
  • un entier nouvelle_valeur

Cette fonction doit renvoyer une nouvelle liste contenant les mêmes valeurs que valeurs, dans le même ordre, sauf valeur_cible qui a été remplacée par nouvelle_valeur.

⚠️ La liste passée en paramètre ne doit pas être modifiée.

Exemples
Python Console Session
>>> valeurs = [3, 8, 7]
>>> remplacer(valeurs, 3, 0)
[0, 8, 7]
>>> valeurs
[3, 8, 7]
Python Console Session
>>> valeurs = [3, 8, 3, 5]
>>> remplacer(valeurs, 3, 0)
[0, 8, 0, 5]
>>> valeurs
[3, 8, 3, 5]
Compléter

###(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

.128013.127797.128073.8217àog)zrh!6ajv,cUk4p9Rqb1]_tP7(L5w3 [;OA8lS/em=èni:y-2éêuxdT*.Cfs0050,0U0D0n0Z0R0=0L0r0R0n0=0=0W010D0Z0v010406050=0*0V0V0n0j0#040S0f0R0*170f0Y0L020n0V0v0N0L0x0U1h0j0y0*0U0=050T1e1g1i1k1c0v04051P1I1S0T1P1c0,0Z0p0 111315110Y0g0*0n0g0U0$0v0#0D0k1r0L0k0Z0g0k0R1{0k0D1a050`0z0R0U1#1214011`1|1~1|0D2426220D0j1Q1?0 1n0=0v0n0Y150%01281%010;0|0U0Y1v0U222q2s2x2a2A262D0V2F040a0L0E0j0f0v0f0=0Z1q1s0^2o0j0j0U0r2!1I2H0Y1Q0T1?2:2k2m2l230,2J1(0Z0Y2C2X221Y1!10292}2 0Y0f33220v2)1Q2.2:3g1d2r1s352y390j1h0R220n1_2)0;15030C0C0r3a0U1~380f0$0u0$0A1a0A1I0n3h3k1b3j2I3m2a3o3q3s3u0U3w013y3A3C3E303H0$2v040%3N3P2s3R2.2|013W0n3r1Q3t0k3v3x3z3B0^3*393,0K1a0K3;2-3Q1c3^3U153{3}053 413$433)2~3+3I0u1a0u4c1J4e3S3l1$3V0f3p3|3Y403!423(454r473I0I1a0I4x3g4f3k3_4j4H4n3%443D4N3G3I0m1a0m4T4z4g4C4i4E3X3~3Z3#4#4q3F3,0F1a0F4.3?4V3T4;3`4?4G4^4I4`4p4M4}3I0Q1a0Q522/1T3e1I332?0,2m2{4h014$321Z1Q3d0U3f3Q4d3?054$5C2I0Z0,153z2.3,3K4^5K5M4L4%5f3J2w2N0U5T4$464)5X2:3O4A3_0t1a0^0;5E2/0L5,5u0Y0;1a2)1w110r0U0j5=5I4B360119040G635^560Y1a0p3|0U0*0j1H4y5F4:66680q635@6o3n6f6h6j3A0Z250U6b6u2a6q6s6c666e04390*0p3D260C6g266j6D4W5u680h0!631c6m5l3^5S015N3k3,3.4l0L6*5d5V4s3-5Y2E5#4|6^6/0T3O0L726t6W6d5|1G0*0R0`0D6H6E150f1a0W7d756p1a0M0B6#6V5J5L6+0C5O3I495R7s6?5%486`2O6|5e6^7x3;737455665.040;4E7j7M6v043D1B2C7c6%047L652y0f0J1a2~7S7%3V6w6T6k7q7.15686!7!6$3i6)7z7u6-4t3Y6=5U7B820L5Z7F6@4O3H22707#7K736I2y7O0Z5;7!7$4X1a7W2O0Y7Z3g8p5u7g040W7i8o8j7/046S6i0j6z6B7?3_7_7p7!5,847v0$4Q7y8a868U7D5!7t5$4(3,8V7J8h8,8E4i771e7a0n8v5D7e018z0/8M5_1a0n0v0v2C0,8}56686a8Q8_6K6M6O0R6Q8H6U997k2y6Y8P7}4W8S810$4+8W8$6}8c4+886{9u7G9w8e718,8x567O3D0=6C9i7T6F1a7`4U8M9p2s4~837 8%5W4 9y7E9A8b5(4 5*8g9F8i9a8:797b95668{9?7U90920Y949M7@671a989n9N8/7V268t8@6n9j9O040h9m8^9o7 8T5h9t7A8(5g8!8Xao0$al8+728.017O2)0D6j0Y7-8q042)8;9=7{6b0T5H5m5B5o5y1I0D5raS2_2;0n6B2:5p1O643_5}0C0;0n0t0U0C0k7x1A1C1E1G0L9Q5D1V3R333_0n0,0V1r2Z0Z1^0,2s1.0j1a1Oa b1b32!0$170D2i040P2g7Yb5aDa|a$0H3t1Y0;2A0r9;0(0L2$600D0L0U0+610r0Z60bF0=bE1E000|0La+1p0L5A9}2)0L0=0f2~bB272 bV120Lb2bv0Z610L11b;0ZbN272~b46h0/awbraQ0pa}0_0{0}3_0D1Gc70i2w2V2C7f9|bb1d1f1C1k0-c80U0i2-ci1M3R1P0sb)5K0(271E0Z0L0pb/8u0L0eb;001G3d2ZbMbEb=1e1Z2sc7a_1Ta}1Z3_1)1+1-1/1;1?1^2c1}1 21a%5u2L2C2E1a0E1=1@bq3i5A643=5laN7~5T5O0I5)6:849Y3+d33K9#8#an4}d92w5b4Kd747df9+ax7O5:aE5_5{aG1B0v5 610C2D8m9_ada3aha53`7:8I6la4a06G8D9/8G6x8JbJ8L9 8N1a6rdNaca69c6Pa.9g62dU6X1a6Zagab7rd16-d36/3td69v3Gd?aq9%7Bd|4_did`8U6_9+7Kax6Kd(0=0C3:dYdF8z8C8we8dH6jdJ4zdU9T0Ye47Id^9Xe3d349dbarde0$exdh4o858(ew9D9,9G7N1a7Qd)eidO0Zdq567)7+c_3QeK3n0z5|b89LdKdV69dB4ie!042Me+a1e*d*76dP7;ebede(d+aed-aKeoajd=8dameFeA4ueyd~eG8de1eEdjd{f4av8hdn7+8nePdZdGe^dIece:680Me:6KeRe?7l047oeea0egeheXejfq6ydS26ft9Pd.6(aid;9Ud38*etezd88Zf9ddfY4Qfd4{9Bfg8*8f9-e7dOeafsfz9k7mfw7+fNfBeS9@7hf}7Ud#9ed%dQfPa%epe49sd5euf*g9d}f#dk9rdg4!ggfggaf-9.foaz0_aCg08Ff;e{ene(g8d39*gbfXgh9!89faeA9!eDf)9(e4gC8f7|dE1sgAat9WgEfg5hf!f6fYgZgLgle4au8ffIeagu7ff fDe)fvf?2a0V0Z4af{dXfndFg`5ig}g/01h10451g^7^1afC9Rf1fSeqd30wgWgIfYhig!ffe4hmg(g#ghhidm8_7O2961aa5?fI5}dv0n608JdzfmgSe)dDd/a0e9dQemhNe)g~fH8_h64bh9e;hU3?eYg_g{040?f{afg=8y7hfGh$axfue:h6h+hZdMg a0h65jh{dWh4h6h8e|96hbg68Rf2fT3J0?hjg)d9iehnevidgj4Jfeik0Aiehvgq8 13hzh4hPe_h4fFh4h@hZhXh3h.56h iGh}3_i4f{hceXgR5FaM3C2:c{c0cs041A3B0vb/0i0 270=0r0j18bEbJ0$0^130*0~0v0*b@0Lc7b^0i0$268|b 0T0^0`0|0=cV3456b0b20Yb41^2~7Qcg0vbdjdjfeqbibk0b0Ljr0bcUa$0c0L0:3D3tb)0j0(2W9}b*0~0n0*bV2U250X2O0qbF1s3!0;0_i|0fbU9KjHjZ3B1gi*cA0R0d2~bN0j0*2+bp5@5Hgw0L0WcBhQ1I5HbB1rdzbE0^0*0+880f0V0~bv0;0(2)8ujIjK060V0)2O0L0f0z0o0_b}5GiUgwj|iU880dc8jH0L0*b)g226b?b^j21WiX1XcW5ujcbfj;jh8zbckLbejebgjp2PbtbZ1n1pj;3d2V2XcxjR2%2)j:1rjv1R040O3ljD270,1r0rkzb)jJ2k271~b^0Lczj~cL0)l0k}0Lk bYklkn0DjQl59K0j3t60g30Lkc0p0f0#k*2r0jb;3t7Q0Yk.0YkGiYkYb!1o2!jLk(0=k*i,k*kAl1b@cScC2$a@cH1^j$dv0XcSjJbS6jbFbEcG2O1ebY2Cb*0j3B6jcRb;a^eab%j=krj{iT0^04lC6$a#0@kKjbkTjn6;5`kQ1RjlkN1rbh2Zbk0P1pbYlFk#1^2W136AfMb a~5ucY1,1.1:c@c(1 2e202Gfoc/5Zc=mAeW5FiW3i8Qc fR7t5O0md4fWhk47mUdagHg)mZim5chs3Gm%isdFdo3!ixdshDdweOhKe}hMfQdFiydIiKhVfom~fKmre%m_i704h#hBdOkCg47;h,a`539SibeqmUd@6;gcgNnmgfm*9r6_f(m$e5fifImLnbfoegixe-e/i1e=i66Jek7=nIh-hdgznknuesnogXnTnshomUeCgkntn!eIf/n2nMe`iAg;iLe}g@nK2yh_iOn.040.ix1anB3RhemS6-mU4uf5nZfcm#n%fchro7o5nzhweM7RiHnL04fyn:eT7*oln h%e,e#1*n6hSm`f_6Lngi9d0o29UmUfVnVmXm+fZo9o7f%oce3oGn)9FfkolhJh=f:l}n?adn=n7okomo%f@f|oj7(h:n}fJdRn5f{nh2/iRm|gTnSmUgamWnx9xoMoQginwoagn9Ef.osfpksnIo$oxe@o)pgfAiPoXnDn/n1m}n~jX9d9fg5f0nRhfnugCp0oagG9znxgKn$o7gPp9fjoga79Ko@oCmR6,oFgVo6p4gZp3gdmUg%pHpWoSpag-hQf=o!ha04pfo{aFpip;e}plnCefpopmpqo;hRp@n8p:c-phn_pwhKg8mUhugDoJnuhmpYnq0$hqp$pZqip(pbgraB0jorp*e_p,gya{aN1V5nj45ym2qCm4ja66kMkUkOmajjmdqJmfkW1alOkZlGj;0n6Ok|l2cSl.lXjD0k2C2Yk/b 1Pk?lbl=cLjJmqbVjKk#l2b:qSqZ27lu2o1wq%q)j;jVkA5@1B042Vkb8?8Ii|61dz2)1Ir8cTmtm566mwc!mzc%1sc)mDc,axmHc;04c?rr6bmNa{3imQd:oEeq0FmVoIg)rKm!pEntrOm(e2gdrSm-a0m/oWp`hOm=dum@f{m{q4okg.nIna7#qt8I8Kmsp-h!o:nd6Rpvr_6Yo^o0pxrI0$rKnnd_rVnvqg7Bs6rTios96 pKoUaAgto-o#ozd(h48lr!r;oYnfsmg:040lh;r#aFd(r@owsB5u9I0}sFstn+6Lpsd$r}svoneL7PoisS7Uspsw8`op7,sZn3nNr i8q7iSqyiWqBc1qDs;5oc3j704.

Exercice 8 : Les notes d'Alice - Saison 2⚓︎

Les notes d'Alice - Saison 2

⏳ La correction viendra bientôt ..

Exercice 9 : Soleil couchant⚓︎

Recherche de maxima relatifs - non guidé

Combien de bâtiments sont éclairés par le soleil couchant. Le sujet est original mais l'algorithme très classique.

Soleil couchant

Exercice 10 : Recherche d'indices⚓︎

Auteur : Sébastien HOARAU

Ecrire une fonction qui renvoie la liste croissante des indices d'un certain élément dans un tableau.

Il est recommandé d'utiliser une liste en compréhension.

Écrire une fonction indices qui prend en paramètres un entier element et un tableau entiers d'entiers. Cette fonction renvoie la liste croissante des indices de element dans le tableau entiers.

Cette liste sera donc vide [] si element n'apparait pas dans entiers.

On n'utilisera ni la méthode index, ni la méthode max.

Exemples
Python Console Session
>>> indices(3, [3, 2, 1, 3, 2, 1])
[0, 3]
>>> indices(4, [1, 2, 3])
[]
>>> indices(10, [2, 10, 3, 10, 4, 10, 5])
[1, 3, 5]
Compléter 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

.128013(oLg)5wrh36a [;v,clS/ekm=4p9Rniqb1:y-2é]ut_d.PfVs0050S0w0Q0m0F0t0X0n0s0t0m0X0X0z010Q0F0B010406050X0P0y0y0m0i0K040u0c0t0P0?0c0E0n020m0y0B0p0n0D0w100i0G0P0w0X050v0}0 11130{0B04051y1r1B0v1y0{0S0F0q0+0-0/0;0-0E0e0P0m0e0w0L0B0K0Q0j1a0n0j0F0e0j0t1%0j0Q0_050$0H0t0w1K0.0:011$1(1*1(0Q1:1=1.0Q0i1z1Y0+160X0B0m0E0;0M011@1M010V0(0w0E1e0w1.292b2g1_2j1=2m0y2o040a0n0U0i0c0B0c0X0F191b0!270i0i0w0s2J1r2q0E1z0v1Y2V2325241/0S2s1N0F0E2l2G1.1H1J0,1^2)2+0E0c2/1.0B2O1z2T2V2 0|2a1b2;2h2^0i100t1.0m1#2O0V0;030R0R0s2_0w1*2@0c0L0C0L0I0_0I1r0m30330`322r351_37393b3d0w3f013h3j3l3n2,3q0L2e040M3w3y2b2V2|0w2V2/2Y0S252%3D0;3k0!2.1I1z3!2~3z2S3^3.3#3B1b0F0S0;3i2T3R3t1z3c3 413N0!3P2^442f2w0w493{4c3p3r453W3}2(010x0_0!0V3_3Y0n4p3,010E0V0_2*1H0s1p4w2U4z1L1_0^040b4J3@3C4M0;0E0_3m1k2l0Q4R4L2=014O0r4R4y2T4q4W044!0F0w0i1q1s3^4.4A4O0f0J4R0{4`3Y4p480142333R3T054740574a3m2*3Q3r2e0n4g4i3O5i4d5k1.0v3x0n5w4-334q4s042O0Q0P0i0E4,4%2h4O0o4$4|4U4B4E5I5O4(5B0V0c0i5S5z4A4:0F5Z4T4(0c0h4E5H532U5y5)360H0_0i2b1T5N5!5P4O4Q5/4S345P0E5@042v5|5=4N0_60315T364X0E0?4@4_6e5}4(4~0f5(635U4E4v615;6s6g4;6i4?4^696y6b045M615J3E5R6J6f6G0O6r4q0c0_0z0z6R5#4X1=2x6i6E4q4O6Q6152310v3{3Z2}1r3%1r0Q3)6@2#2W0m1;3|0v3%1x624q2O0y0R0V0m0x0w0R0j0k0_1j1l1n1p0n506J1E3A1y0d3c0X16180F1!2|2E2G0N1?0s0F0L0!0/0P0*1p0Q0n0-0n0q6k7v1b2O3k1u0E0S7A0T1C7o040W7P1!0b0y0c2*0*0N0t0N0e2b0Q0w0f0n0X2b0*7T2|0N0j2l2H1!2L1*0X7?7k7Z1G1I4q1O1Q1S1U1W1Y1!1{1)1+1-734A2u2l2n0_0U1X1Z5.313?3}3X4K6/555e582b3s0Y3s3H563i4j5q3p0I8J3t5m2n5o4b8P8I8K3I3K3M8O3o8Z4n5u8o5P5B4u6X644D044F0F4H6l4{6n5K6c6%6Y4;6!4!905~0_4+6w6K4V6h6j6D6N8}6G4 516%8M0R438R3S8L8F5g4k8Z5l5n5f8(3Q9o5l0j3e3g8N5p8)9A5t5v5x9a5Q042F2H2J8{4x9M6T046W996O0;5L6*2 6,8|2r9l9n8J7e460n9l9y4d9o7e8U2x8W5h9H9-2f9C3J9E9s8Y9@9J045x6x5A0_5W5Y9Y9g9b8@8;5*5,8@8x3za95#665_1P0w956o8 9f6a4V6668ax6F9!aw6may9N4=6kau8~040f9i6+9k9r9,0L0A9q9{9t9oaV9_4h9x9G9z8Ja!a08$9F8X9}aUa6a8a89M5B0F6v2 ao649c6C9S4K9Z4)0_6IaGaD9N5%aC6(0_9$an9U6U9Xa|9M4:4Y6#4#bb4}0_7l9%aR49aT0gaWa%a/a)0Lbxa#aXa48JbDa,a29=8QbHa=a?bPbk0_9P2I7Qb18-5*0_7Ybpa~040m0B0B2l0SaL6G6d9)b85$b-aEaN9jbb9+599o0lbya.9|bBb~bEbzc19?8Jc3bJ3Lc0aYc8bO5wa^5^0#5Fam9Tb34:bT9Rb_6-8D1E6;703;520!0$0(0X04.

Exercice 11⚓︎

Exercice 11

image Résolvez le Pydéfi proposé à cette adresse

Vous pouvez vous créer un compte pour valider vos résultats, ce site (géré par l'Académie de Poitiers) est remarquable.

Python
1
2
3
4
5
6
7
8
9
lst = [0, 50, 40, 100, 70, 90, 0]

total = 0
for i in range(len(lst)-1):
    if lst[i] > lst[i+1]:
        nb_pierres = (lst[i]-lst[i+1])//10 + 1
        total += nb_pierres

print(total)

(à faire avec les valeurs de test)

Exercice 12⚓︎

Exercice 12

On donne la liste jours suivante :

Python
jours = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"]

On rappelle que la fonction len permet d'obtenir le nombre de caractères d'une chaine de caractères :

Python
>>> len("test")
4

Q1. Créer en compréhension une liste lst1 contenant uniquement les jours comportant 5 lettres.

Correction
Python
lst1 = [day for day in jours if len(day) == 5]

Q2. Créer en compréhension une liste lst2 contenant uniquement les jours comportant la lettre a dans leur nom.

Correction
Python
lst2 = [day for day in jours if 'a' in day]

Q3a. Créer une fonction compte_e qui prend en paramètre une chaine de caractères et qui renvoie le nombre de e que contient cette chaine de caractères.

Correction
Python
1
2
3
4
5
6
def compte_e(mot):
    compteur = 0
    for lettre in mot:
        if lettre == 'e':
            compteur += 1
    return compteur

Q3b. Créer en compréhension une liste lst4 contenant uniquement les jours comportant deux fois la lettre e dans leur nom.

Correction
Python
lst4 = [day for day in jours if compte_e(day) == 2]

Exercice 13⚓︎

Exercice 13

On donne le tableau m suivant :

Python
m = [[17, 71, 75, 89, 45, 10, 54, 26, 59, 47, 57, 64, 44], \
    [67, 25, 47, 49, 28, 40, 10, 17, 77, 35, 87, 15, 68], \
    [66, 89, 28, 43, 16, 14, 12, 21, 68, 22, 14, 18, 59], \
    [60, 35, 30, 23, 22, 37, 49, 89, 82, 80, 85, 28, 17], \
    [61, 42, 39, 46, 29, 38, 85, 72, 44, 60, 47, 35, 52], \
    [44, 28, 24, 40, 71, 71, 46, 25, 78, 54, 66, 84, 52], \
    [29, 71, 7, 38, 71, 60, 71, 60, 16, 82, 35, 39, 23], \
    [18, 61, 38, 7, 8, 32, 67, 43, 23, 28, 29, 16, 30], \
    [45, 30, 74, 9, 84, 78, 11, 80, 42, 64, 9, 39, 26], \
    [78, 57, 54, 66, 57, 63, 10, 42, 61, 19, 26, 25, 53], \
    [38, 87, 10, 64, 75, 26, 14, 68, 19, 33, 75, 50, 18], \
    [52, 81, 24, 67, 37, 78, 17, 19, 61, 82, 57, 24, 54]]
Afficher successivement chaque ligne du tableau en respectant les règles suivantes :

  • si le nombre est divisible par 7, afficher *, sinon afficher une espace
  • sur une même ligne, on affichera tous les symboles côte à côte, en rajoutant le paramètre end = '' à la fonction print. (exemple : print('*', end = '') )
  • on ira à la ligne à la fin de chaque ligne, par l'instruction print()
Python
m = [[17, 71, 75, 89, 45, 10, 54, 26, 59, 47, 57, 64, 44], \\
    [67, 25, 47, 49, 28, 40, 10, 17, 77, 35, 87, 15, 68], \\
    [66, 89, 28, 43, 16, 14, 12, 21, 68, 22, 14, 18, 59], \\
    [60, 35, 30, 23, 22, 37, 49, 89, 82, 80, 85, 28, 17], \\
    [61, 42, 39, 46, 29, 38, 85, 72, 44, 60, 47, 35, 52], \\
    [44, 28, 24, 40, 71, 71, 46, 25, 78, 54, 66, 84, 52], \\
    [29, 71, 7, 38, 71, 60, 71, 60, 16, 82, 35, 39, 23], \\
    [18, 61, 38, 7, 8, 32, 67, 43, 23, 28, 29, 16, 30], \\
    [45, 30, 74, 9, 84, 78, 11, 80, 42, 64, 9, 39, 26], \\
    [78, 57, 54, 66, 57, 63, 10, 42, 61, 19, 26, 25, 53], \\
    [38, 87, 10, 64, 75, 26, 14, 68, 19, 33, 75, 50, 18], \\
    [52, 81, 24, 67, 37, 78, 17, 19, 61, 82, 57, 24, 54]]

for ligne in m:
    for elt in ligne:
        if elt % 7 == 0:
            print('*', end = '')
        else:
            print(' ', end = '')
    print('')

Exercice 14⚓︎

Exercice 14

Pydéfi Insaisissable matrice (version originale à cette adresse)

On considère la matrice suivante :

Python
-------------------------------
| 17 | 3  | 4  | 14 | 5  | 17 |
-------------------------------
| 8  | 16 | 3  | 17 | 14 | 12 |
-------------------------------
| 13 | 5  | 15 | 4  | 16 | 3  |
-------------------------------
| 14 | 7  | 3  | 16 | 3  | 2  |
-------------------------------
| 6  | 1  | 16 | 10 | 5  | 13 |
-------------------------------
| 11 | 1  | 9  | 11 | 18 | 8  |
-------------------------------
Python
M = [[17, 3, 4, 14, 5, 17], [8, 16, 3, 17, 14, 12], [13, 5, 15, 4, 16, 3], [14, 7, 3, 16, 3, 2], [6, 1, 16, 10, 5, 13], [11, 1, 9, 11, 18, 8]]

Cette matrice va évoluer au cours du temps, et le contenu k d'une case est transformé, à chaque étape en (9*k + 3) % 19.

Rappelons que a % b donne le reste de la division entière de a par b.

À chaque étape de calcul, tous les nombres de la matrice sont simultanément modifiés. L'entrée du problème est le nombre d'étapes à appliquer (ici : 39). Vous devez répondre en donnant la somme des valeurs contenues dans la matrice après application de toutes les étapes.

Python
M = [[17, 3, 4, 14, 5, 17], [8, 16, 3, 17, 14, 12], [13, 5, 15, 4, 16, 3], [14, 7, 3, 16, 3, 2], [6, 1, 16, 10, 5, 13], [11, 1, 9, 11, 18, 8]]

def f(k):
    return (9*k + 3) % 19

def tour():
    for i in range(6):
        for j in range(6):
            M[i][j] = f(M[i][j])

for _ in range(39):
    tour()

somme = 0
for i in range(6):
    for j in range(6):
        somme += M[i][j]

print(somme)

Exercice 15⚓︎

Exercice 15

D'après Advent Of Code 2021, day02

image

Un sous-marin peut se déplacer horizontalement (toujours vers la droite) grâce à l'instruction forward suivie d'un nombre.

Il peut aussi monter ou descendre, grâce aux instructions up ou down, elles aussi suivies d'un nombre.

Un grand nombre d'instructions successives sont données. Le but de l'exercice est de trouver le produit final de l'abscisse du sous-marin et de sa profondeur.

Exemple :

Text Only
forward 5
down 5
forward 8
up 3
down 8
forward 2

Après ces déplacements, le sous-marin se trouve à l'abscisse 15 et à la profondeur 10. La réponse à l'énigme serait donc 150.

  • énoncé orginal

  • Téléchargez le fichier input.txt. Votre fichier .py de travail doit se situer dans le même répertoire que le fichier input.txt.

➡ Parsing des données

Parser des données consiste à les récupérer et les rendre exploitables. C'est quelque chose de souvent pénible (dans les énigmes de code ET dans la vraie vie). Pourtant de la qualité du parsing (et surtout de la structure de stockage choisie) va dépendre la difficulté (ou non) de l'exploitation des données.

Proposition de parsing :

Python
1
2
3
data_raw = open('input.txt').read().splitlines()
lst_raw = [d.split(' ') for d in data_raw]
lst = [[l[0], int(l[1])] for l in lst_raw]

Exécutez ce code et observez ce que contient la liste lst.

➡ Résolution de l'énigme

À la fin de toutes ses manœuvres, quel est le produit de l'abscisse du sous-marin et de sa profondeur ?

Python
data_raw = open('input.txt').read().splitlines()
lst_raw = [d.split(' ') for d in data_raw]
lst = [[l[0], int(l[1])] for l in lst_raw]

x = 0
y = 0

for couple in lst:
    direction = couple[0]
    valeur = couple[1]
    if direction == 'forward':
        x += valeur
    if direction == 'down':
        y += valeur
    if direction == 'up':
        y -= valeur

print(x*y)

La réponse est donc 1746616.

Projet : Combat de héros⚓︎

Suivre le lien