Exercices

Gaston ne se souvient plus ...

Gaston veut afficher le nombre de poules qu'il a dans sa ferme.

Solution

Pour vous aider à répondre, lisez "II. Comment accéder à une valeur ?" en suivant ce lien: Opérations

Gaston achĂšte des animaux ...

Gaston achÚte 3 moutons. Il veut compléter le dictionnaire.

Solution

Pour vous aider à répondre, lisez "V. Comment ajouter une paire clé/valeur ?" en suivant ce lien: Opérations

Gaston vend des animaux

ferme_gaston = {"lapin": 5, "vache": 7, "cochon": 1, "cheval": 4}

Gaston a décidé de vendre un animal de chaque espÚce. Evidemment, il possÚde au moins un animal de chaque espÚce. Compléter la fonction suivante, qui diminue chaque valeur de 1 dans le dictionnaire "en place".

👉 Pour mettre au point votre script, vous pouvez passer le assert en commentaire en cliquant sur ### en haut à droite. Cliquer encore une fois reviendra en arriùre.

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

.128013tpwPenu)vglci:rosf3m 0/-=dyh_k[(b1]S2a050A0f0b0M0n0l0r0v0m0l0M0r0r0z010b0n0c010406050r0h0u0u0M0p0B040K0q0l0h0%0q0g050x0.0:0=0@0,0c040517101a0x170,0A0n0j0V0X0Z0#0X0g0k0h0M0k0f0y0c0B0b0C0~0v0C0n0k0C0l1C0C0b0*050Q0H0l0f1j0Y0!011B1D1F1D0b1L1N1J0b0p181x0V0`0r0c0M0g0#0L011P1l010s0S0f0g0M0u0f1J1+1-1=1R1^1N1{1}0*0a0v0e0p0q0c0q0r0n0}0g0v0O1)0p0p0f0m2i10200g180x1x2v1#1%1$1K0A221m0n0g1`2f1J1g1i0W1Q2F2H0g0q2L1J0c2o182t2v2Y0-1,2j2N1?2R0p0;0l1J0M1A2o0s0#030D0D0m2S0f1F2Q0q0y0w0y0I0*0I100M2Z2$0+2#212(1R2*2,2.2:0f2=012@2_2{2}2I300y1:040L36381-3a2t2E013f0M2-182/0C2;2?2^2`0O3p2R3r0t0*0t3w2s391b2W102L2y0A1%2D3d0#3M1~183!193Y2!113W3+2X2$0v0n0A0#2^2t3r333G3`3|013L3o2G3q31330v260f3}3n3N483P4a1J0x373b2%1k1R0E0*0O0s3V3y4o3B0d0*0v4w2u4y3)3C0s0*0j1`0A4D3^3c4q0#0)040G4N4F4Q3C0*0s0f2+0f4V3A4G4S0i0o4N0,3=4x3A3{4f3 313t052/4?454g2|4i2 4_1;4d4f3+3O523s4l370v5d4C4)4X4s040s0q0p4N5f3_4G0g0*0W4%4:2u5o4P2O010q4A042G5n4W5z5r5j4#1}4(5p4X4S4-5v3a5R4y4}3~2$3Q3h5V4 585Y4c1|4e4~57515Y2v5c5e5;5G2)4Z5K5u2!5g5z4S0F5M5y5@045t604p5}0*0J5F5|1?0q0*0z6a5N5H5^4$653B5~6l5q5s1N6o5O686g611R6d040y6v661?0u0n344.4V0x3@3X0f2v3.2w3$102z6R0M1M6M3Z1h5S0O0Q0S0r04.
Gaston vend encore des animaux

ferme_gaston = {"lapin": 5, "vache": 7, "cochon": 1, "cheval": 4}

Gaston a décidé de vendre un animal de chaque espÚce. Evidemment, il possÚde au moins un animal de chaque espÚce.

Compléter la fonction suivante, qui diminue chaque valeur de 1 dans le dictionnaire. On modifiera directement le dictionnaire (on dit que la modification est « en place »).

La solution de l'exercice précedent ne lui convient pas. En effet, un animal qui a un effectif de 0 ne doit pas se trouver dans le dictionnaire.

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

Aide

Python interdit de modifier un dictionnaire lors de son parcours...

👉 Vous pouvez utiliser une liste Python a_supprimer

Solution
🐍 Script Python
def vend_encore(ferme):
    a_supprimer = []
    for cle in ferme:
        ferme[cle] = ferme[cle] - 1
        if ferme[cle] == 0:
            a_supprimer.append(cle)
    for cle in a_supprimer :
        del ferme[cle]
Gaston fait ses courses

Gaston a dĂ©cidĂ© de prĂ©parer sa liste de courses qu'il va commander, avant d'aller la chercher au DRIVE de son supermarchĂ©. Quel va ĂȘtre le montant de sa facture ? Écrire une fonction calcul_prix(produits, catalogue) oĂč :

  • produits est un dictionnaire contenant, comme clĂ©s, les produits souhaitĂ©s par Gaston et comme valeurs associĂ©es, la quantitĂ© dĂ©sirĂ©e de chacun d’entre eux.
  • catalogue est une dictionnaire contenant tous les produits du magasin avec leur prix associĂ©.
  • La fonction renvoie le montant total des achats de Gaston.

Vous pourrez supposer que les arguments passés à la fonction sont du bon type, et que les produits souhaités par Gaston figurent bien dans le catalogue du magasin.

Exemple :
L’appel suivant de la fonction :

🐍 Script Python
calcul_prix({"brocoli":2, "mouchoirs":5, "bouteilles d'eau":6},
            {"brocoli":1.50, "bouteilles d'eau":1,  "biĂšre":2,
            "savon":2.50, "mouchoirs":0.80})

doit renvoyer : 13.0

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

Solution
🐍 Script Python
def calcul_prix(produits, catalogue):
    prix = 0
    for cle in produits: # On aurait aussi pu écrire : for cle in produits.keys()
        prix = prix + produits[cle]*catalogue[cle]
    return prix
Remarque : les flottants

Le résultat qui devrait s'afficher pour calcul_prix(produits, catalogue) est 63,8. Or il s'affiche 63.79999999999999.

C'est un problÚme lié à l'encodage des nombres flottants. Nous étudierons ceci pendant l'année.

L'instruction assert calcul_prix(produits, catalogue) == 63.8 provoquerait un message d'erreur d'assertion. Il ne faut jamais comparer des nombres flottants entre eux ainsi.

Gaston fait des histogrammes

Gaston s'entraßne au jeu de scrabble. Quelles sont les lettres nécessaires pour écrire le mot "brontosaurus" ? Il faut une lettre "b", deux lettres "r", deux lettres "o" etc.
Pour aider Gaston, compléter la fonction qui prend en paramÚtre une chaine de caracÚres et renvoie le dictionnaires dont les clés sont chaque caractÚre, et la valeur associée le nombre de fois qu'il apparaßt dans le mot.

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

Aide

Vous pourrez définir un dictionnaire vide pour commencer.

Solution
🐍 Script Python
def histogramme(caracteres):
    histo = {}
    for caractere in caracteres:
        if caractere in histo:
            histo[caractere] += 1
        else:
            histo[caractere] = 1
    return histo
Le bon enclos

Le bon enclos

Anniversaires

Anniversaires

Valeurs extrĂȘmes

Valeurs extrĂȘmes

Dictionnaire d'occurences

Dictionnaire d'occurences

Top likes

Top likes

Dictionnaire des antécédents

Dictionnaire des antécédents

Dictionnaire de likes

Dictionnaire de likes

Questions

QCM sur les dictionnaires en Python. Une question peut avoir plusieurs bonnes propositions de réponse.

Compétences évaluées :

  • 📝 AccĂ©der aux Ă©lĂ©ments d’un dictionnaire
  • 📝 Ajouter, modifier et supprimer des Ă©lĂ©ments
  • 📝 Parcourir un dictionnaire avec une boucle
  • 📝 VĂ©rifier la prĂ©sence d’une clĂ©
  • 📝 Travailler avec une liste de dictionnaires
  • 📝 Inverser un dictionnaire

  1. On dispose d'un dictionnaire stockant les prix de plusieurs articles en euros :

    prix_articles = {"ordinateur": 1200, "souris": 25, "clavier": 45}
    

    Quelle est la bonne syntaxe pour accéder au prix du clavier ?

    • prix_articles["clavier"]

    • prix_articles(2)

    • prix_articles["2"]

    • prix_articles.get("2")

  2. On considÚre le dictionnaire suivant représentant un carnet de notes :

    notes = {"Paul": 14, "Emma": 16}
    

    Quelle instruction permet d’ajouter LĂ©o avec une note de 12 ?

    • notes["LĂ©o"] = 12

    • notes.add("LĂ©o", 12)

    • notes.insert("LĂ©o", 12)

    • notes.append("LĂ©o", 12)

  3. On a le dictionnaire suivant contenant des stocks de livres en bibliothĂšque :

    stock_livres = {"Python": 5, "JavaScript": 3, "C++": 2}
    

    Quelle expression permet de vérifier si le livre "JavaScript" est disponible dans ce dictionnaire ?

    • "JavaScript" in stock_livres

    • stock_livres.contains("JavaScript")

    • stock_livres.has_key("JavaScript")

    • "JavaScript" in stock_livres.values()

  4. On souhaite retirer Emma du carnet de notes suivant :

    notes = {"Paul": 14, "Emma": 16, "Léo": 12}
    

    Quelle instruction faut-il utiliser ?

    • del notes["Emma"]

    • notes.remove("Emma")

    • notes.popitem("Emma")

    • notes.clear("Emma")

  5. On considĂšre un dictionnaire contenant le nombre de mĂ©dailles d’or remportĂ©es par des pays :

    medailles = {"France": 10, "USA": 25, "Chine": 20}
    

    Quelle boucle permet d'afficher chaque pays et son nombre de médailles au format :

    "Le pays [nom] a obtenu [nombre] mĂ©dailles d’or."

    • for nb, pays in medailles.items():
          print(f"Le pays {pays} a obtenu {nb} mĂ©dailles d’or.")
      

    • for pays, nb in medailles.items():
          print(f"Le pays {pays} a obtenu {nb} mĂ©dailles d’or.")
      

    • for pays in medailles:
          print(f"Le pays {pays} a obtenu {medailles[pays]} mĂ©dailles d’or.")
      

    • for pays in medailles.keys():
          print(f"Le pays {pays} a obtenu {pays} mĂ©dailles d’or.")
      

  6. On dispose du dictionnaire suivant qui donne les transports utilisés par des élÚves pour se rendre au lycée :

    TRANSPORTS = {'Alice': 'bus', 'Bob': 'vélo', 'Chloé': 'voiture', 'Charlie': 'trottinette'}
    

    Donner le code qui permet de tester si un transport fait partie des transports utilisés. Par exemple :

    • existe('bus') doit ĂȘtre Ă©valuĂ© Ă  True
    • existe('avion') doit ĂȘtre Ă©valuĂ© Ă  False

    • TRANSPORTS = {'Alice': 'bus', 'Bob': 'vĂ©lo', 'ChloĂ©': 'voiture', 'Charlie': 'trottinette'}
      
      def existe(transport):
          return  transport in TRANSPORTS
      

    • TRANSPORTS = {'Alice': 'bus', 'Bob': 'vĂ©lo', 'ChloĂ©': 'voiture', 'Charlie': 'trottinette'}
      
      def existe(transport):
          return  transport in TRANSPORTS.keys()
      

    • TRANSPORTS = {'Alice': 'bus', 'Bob': 'vĂ©lo', 'ChloĂ©': 'voiture', 'Charlie': 'trottinette'}
      
      def existe(transport):
          return  transport in TRANSPORTS.values()
      

    • TRANSPORTS = {'Alice': 'bus', 'Bob': 'vĂ©lo', 'ChloĂ©': 'voiture', 'Charlie': 'trottinette'}
      
      def existe(transport):
          return  transport in TRANSPORTS.items()
      

    • TRANSPORTS = {'Alice': 'bus', 'Bob': 'vĂ©lo', 'ChloĂ©': 'voiture', 'Charlie': 'trottinette'}
      
      def existe(transport):
          return  transport in values(TRANSPORTS)
      

  7. On a un tableau de dictionnaires contenant des informations sur des smartphones :

    smartphones = [
        {"modĂšle": "iPhone 14", "prix": 999, "marque": "Apple"},
        {"modĂšle": "Galaxy S23", "prix": 899, "marque": "Samsung"},
        {"modĂšle": "Pixel 7", "prix": 649, "marque": "Google"}
    ]
    

    Quelle instruction permet d’accĂ©der au prix du Galaxy S23 ?

    • smartphones[1]["prix"]

    • smartphones["Galaxy S23"]["prix"]

    • smartphones[1].prix

    • smartphones["prix"][1]

  8. On a le dictionnaire suivant qui associe des étudiants à leurs matiÚres préférées :

    preferences = {
        "Alice": "Maths",
        "Bob": "Physique",
        "Charlie": "Maths",
        "David": "Informatique"
    }
    

    On veut construire un dictionnaire inverse qui associe chaque matiĂšre Ă  la liste des Ă©tudiants qui l’aiment. Quelle boucle permet de le faire ?

    • inverse = {}
      for etudiant, matiere in preferences.items():
          if matiere not in inverse:
              inverse[matiere] = []
          inverse[matiere].append(etudiant)
      

    • inverse = {}
      for matiere, etudiant in preferences.items():
          inverse[matiere].append(etudiant)
      

    • inverse = {}
      for etudiant, matiere in preferences.items():
          inverse[etudiant] = matiere
      

    • inverse = preferences.reverse()
      

source : Frédéric Junier

Les Pokémon

Les Pokémon

😀 Voici une correction Ă  ne pas lire sans avoir travaillĂ© (😅).

Correction : les pokémon

🏰 🐉 Mini-projet 🐉 🏰

Donjon

⌛ Une correction du mini-projet viendra plus tard ...

La ferme de gaston avec GUI

On nomme GUI une Interface Graphique Utilisateur. Jean-Louis Thirot en a préparé une pour aider Gaston à gérer sa ferme. Le code se trouve dans le fichier gestion_ferme.py

🌐 Vous devez tĂ©lĂ©charger ce fichier : gestion_ferme.py : "Clic droit", puis "Enregistrer la cible du lien sous".

gestion_ferme.py

😀 Vous n'avez pas besoin de regarder le code de ce fichier, toutes les fonctions seront importĂ©es dans le fichier que vous devez complĂ©ter, et qui permet Ă  Gaston de bien gĂ©rer sa ferme.

🌐 Vous devez tĂ©lĂ©charger ce second fichier : gestion_stock_2023.py: "Clic droit", puis "Enregistrer la cible du lien sous".

👉 Vos deux fichiers doivent ĂȘtre placĂ©s dans le mĂȘme dossier.

  1. Avec votre éditeur Python habituel, ouvrez les deux fichiers.
  2. Exécutez le fichier gestion_ferme.py. Vous verrez apparaßtre l'interface graphique. Vous pouvez la tester, mais elle ne fonctionne pas encore ...
  3. Compléter les fonctions du fichier gestion_stock_2023.py. Ne pas oublier d'enregistrer. Tester en exécutatnt gestion_ferme.py, et corriger votre code jusqu'à ce qu'il fonctionne comme Gaston le voudrait.
Solution

⏳ La correction viendra bientît ...

Top 3

Un jury doit attribuer le prix du « Codeur de l’annĂ©e ».
Afin de rĂ©compenser les trois candidats ayant obtenu la meilleure note, nous vous demandons d’écrire une fonction top_3_candidats qui reçoit un dictionnaire contenant comme clĂ©s les noms des candidats et comme valeurs la note que chacun a obtenue.
Cette fonction doit renvoyer la liste contenant les noms des trois meilleurs candidats, par ordre décroissant de leurs notes.
Vous pourrez supposer que les candidats ont des notes diffĂ©rentes, et qu’ils sont plus que trois.

Exemple : L’appel suivant de la fonction :

🐍 Script Python
top_3_candidats({'Candidat 7': 2, 'Candidat 2': 38, 'Candidat 6': 85, 'Candidat 1': 8, 'Candidat 3': 17, 
'Candidat 5': 83,'Candidat 4': 33})

doit renvoyer :
['Candidat 6', 'Candidat 5', 'Candidat 2']

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

.128013tpwPenéu)vglcix,:roAsf38Imj 0/-à;q=6dyh_k[RO7(b519S]2a.4050L0f0b0$0o0m0v0C0n0m0$0v0v0J010b0o0c010406050v0i0A0A0$0s0M040Z0t0m0i0|0t0g0C020$0A0c0H0C0R0f160s0I0i0f0v050E13151719110c04051E1x1H0E1E110L0o0k0;0?0^0`0?0g0l0i0$0l0f0F0c0M0b0N1g0C0N0o0l0N0m1-0N0b0 050,0V0m0f1Q0@0_011,1.1:1.0b1_1{1@0b0s1F1(0;1c0v0c0$0g0`0#011}1S010w0.0f0g1k0f1@2f2h2m1 2p1{2s0A2u040a0C0e0s0t0c0t0v0o1f1h0*2d0s0s0f0n2P1x2w0g1F0E1(2#292b2a1^0L2y1T0o0g2r2M1@1N1P0=1~2/2;0g0t2^1@0c2U1F2Z2#35122g1h2`2n2~0s160m1@0$1+2U0w0`030O0O0n2 0f1:2}0t0F0#0T0F0X0 0C0X1x0$363910382x3b1 3d3f3h3j0f3l013n3p3r3t2=3w3y2k040C0#3E3G2h3I2Z2.013N0$3g1F3i0N3k3m3o3q0*3X2~3Z0F0x3B0x3)2Y3H113-3L0`3:3=053@3_3T3{3W2:3Y3x0F0(3B0(451y473J3a1R3M0t3e3;3P3^3R3`3V3}4k3 4m0W3B0W4r3548393.4c4B4g3U3|3s4H3v4m0K3B0K4N4t494w4b4y3O3?3Q3S4V4j3u400T3B0T4(3+4P3K4+3/4-4A4/4C4;4i4G4@4m0y3B0y4|2!4~4v2{514z4d4f4D4h4F4X593y0Y3B0Y5e3,4Q4a5j4.4e4:4E4W3~4Z3y0X0D0 5J5w5g4R525l5D5o5F4Y400X3A045X5N4u5P5k4T5n4=584l5I3#0X3(0E3F464}5$5z4S544U575q5-3z425Z445=3*5f5_505{5C555E4?600X4o5Z4q655@674*5i6a5m565p5G5W4K5Z4M6k4s5^6n3c5Q5)6r5U5r3z4#5Z4%6y4O686o6D5|5*5~6t4m0X4_5Z4{6M4)5y696Q6b5}6s5V6V5b5Z5d6!6A6$6P5(6R6F6e4I5I5t5Z5v6;2!1I331x2^2(0L2b2-5z4W2@1O1F320f343H6l1F4W7i2x0o0L0`3o2Z5W3P7p7r6+6H3A0C2C0f7x6G6f1@6k6B1 0P0 0*0w7k6O2n0d3B7P7J4b0w0 0b2K0O0x3p2h1N0L0$0b1w6z727V010~040U7U6?3c0 2~0b1v7^4 5i7=0j0r7k117.7n1h7w017s39403#5C8a6T6,3!2l7C7E6{5H3w7H5?7:7S3$0C8w7 5h2n0v0L0 021t0t0b0H8E0i8G8I8F8H858y0C8h0O7t4m628g7q8b7y60427B2t8n5,6|418r883.8B3B8w1o2r0k0t0o1|0i2;0C1:0v7}2d0g7}2s938~1v0C0x0C2D0.1{0i0s0:0n7(7p7+7-6N875$8S8U3y6h8X8)5 8+4o8%2D9v6U9s8-7Q1 8:8v8w2I2r2-2r0C2r290h8{2Q0o2W0o1g2s0o2U0C2R2~0A0v0E7|7~8786373-9q8d4J7v8Y8i6H4K9z7D8Z7F8+6v457:9H8=1i8N8M8K8H8J8L8P9o9:9^8T9=3y6J9u9~8o404#9|9B8j0Fak65a59F4b7M9U0t7k0Cax010t0 0JaCaE0g0Vaz2W8Q5z7=7@ae7_3M7{8G9,9/aU0`82adaZ7oag9r0F6Xal9_604_aqam8*8pa-av8=aK7Y7!8 7}aJ7:aG04aI87aD7:7=0Q0!aCb7a!010n5Y030z0g2O0o3;0o0v9S1|a 1|0k7p1|2L9f0;2U0f0s8~3ibs9#989a9c0m9e9ga%7jaf7xa+6.a.8!8+5ba=a/bV8-aw7:7L040w4yb1be0g0 0ob+802n0t8u2:b:8z3MaM040s2h1ZaP50aRc15i0A0o0 64a(b`a#0 83bcaEbg0 030C0S3a0NbB0ncn970:9a7gc6bB9m4taTa)bQai0F6~bT9 8p5tbXbUcHb!a5a{7:b-049+0O160pb_3.b3b535bdb;1 b30Fc42nc65Lcf7:ch04cjbjblbn0v7+9W1hbxbC9P2UbC7*0g0:0?0C0V0t0i0=0fbN3+9pa*cC5J9@ar7z5KcJcG5W5K2#3FcNdsdtcObec:cj2R2Ucpcocq2Rd50c1d0:0lb~0g9$aXdc7/4Q9;2h5W5YcFan6V7A8ma?9w8p5XcMdsaEb%b)0scWaQ0 aSca4RaW0Ac*1 7=0qd.69aWb0czcb7;cdd}5ib?b.0ge57`041N3qd_0`b30%ef3/b.7}9(ejaRceb6cgbh2g0s3q9f0b9#0i9#9U2P9Y2UdO8.dR0g5W8f3i8Sdn6V2kdmdW5.d(duc#e2b%0o7OercPd dbe#beb3020l8Oe)c$aycRaXcT0$cVe13.7=84b6eW3.dx0CdAcnevdD1|9+9be^0o3fe(9nd=eI5W8WeMageO5I8$dZbYd$8Wa`eVcNa|e=7}e@e_c!aEcYeaaVfwfdcyffdfdS6V9tfjdj6f9yfocK5W9tfsftdve:ek04cu8`d-e/e2fCf(d?e=d^e~fXe2f19%0C1~0t0n8`eGdecBfK5Ia1fNd!9C3z9{fRflg5eUb#b,aNaBe`5zehejcQ2L0ceod:gi0 f#bBgm040jbce 7bbh0C130c32fb1|0n0+8RemezeB9V9X0-eF9-8Qfg6Vakg2fp5Wapg7eS6IgafWduesci0C1*dBf5br02030x0Y0H0h1{0k1|dM91cUfb3;bw17c6f|bP8Za+6Wdig3ash7eRa@5Wa_drg$fWg(c;0;0f0i0p0C1t0of21v940bh3dQfJeJ6-h8gVhAhcd#5WbSfVgbfYcQ7Z0c0Obsejghgfd~040$gB9Lgsd;bOgcf!2Ucvf%d=d/gtfD0`f10u0Bd891gF0;9j7*ey0GbD8~bo910*cs0C0k0-0g1thmbMgPe`gR6}hBfS6VcIgYhdigeUd*0 2U0b9fe9f+5`a}hNhPia370E7m737h757e1x0b78iF2+2$0$1`iC0E761D8.5zh%0O0w0$0P0f0O0N621p1ri70:e}iy1L1G040u1e9!0v1c1ec{0C2L0^0oiM0C0raD1K3I2^3.1U1W1Y1!1$1(1*211/1;1?7f74iy37iAh48cfK0y3zieeOjodY8(h959js2l6c5TdWjxdqiR50b%7Nej8uj0h*697X04hM7#7%dL9k7,hYgofFcxddb8cdi*fHh!cAh59=joeL8RfkjB8qhE6Uj,jy6*jr8qjDaEjJa{hS5i9Habaaa7k30Hhwj)jmhzjofij.fO4Ikc8ljuhCkh5S5+hF0#khj|a38C9I8?0g8^8`0C8|brh gE1g942hey1{i2bJbL9hh_9lk889hy3wjofMkejv4lkTki9AkWkg4nj^6SifkYkrbea48=9KdL9O1hc 9Rkz9TgL0geEg`f70t9(9*aXjY67ibkRkp0Fg1kVkkl9kZ9}lc9{jzknj?ldk,fYk.8wk6lqa7kPlbahjnatjqj:gXkjk*lxkmlcauhg8xe$04iwfAb2aHh-e3040Qej0v3#lra9k7k02nd{lPlU8Dk5lslZd`0 d|is50l%04lWacl+cc04bbixj(kQf~kba,lyijjoa;iikom4k(6`m3m1jDhJe2hL2K3Dl/e6lOmjc+c7040DltgRjobSgUlCbWm6lkbWlilchHlHgwhThM5;lMe*mlmJfYc,mpmrl7jocEmvj`ihlBmVm96dmbcEfVfvhMc93HmFmkb4lPmOmql|jZhxl kS3zdpdVmbdhj=6,jsdlmBlCdhmdf:3.d+b*mmfE3s1qlPe704b^nbe;9+l4jE810 j$5^l6m^l8d%4/eNj:d%m jw3z7An3j`nv3)g%b$b.e!mMmfe%nmaEb9jWndf.jLnol`nf8De-lYnMf,hMminVl!npmQntjsj-nxm}eQmyn03zeQnEny8fhIdtm(2Km*m?fYl#njfZmHgsl.n$itjOmhnYm.o6mg0cmIl}e{l-lPoin)olh+oam+fvnlgslSl^fZnTgsl{feolms61m2m7oHnAkXoKn{m}frmEnIh#lLorc20 oyn*1 mOoko3e27=0!ot3+m,eboUo%omlRejmOoqo:h+o*oo0 o/dPo4oXo?mom;oZl_oDoulNogobhTo~nnn+o=ozo@oCo+2!o-fEpdnQp1php3pjo|04oBm=o l~j*lw6goIlkpCoLk$pFoOoJpCn6d)nJpv1:nLp8h#owoznRozcQpwp5lQp7o,fBnZe.pb6oiuo$pyo;nql5fIn.g9nwj/m}g6mXnylhj_p~g#pNh#m)o9puo8o6f*p+ebq8p!o5qbfEpUqepqp!pY1{nUoVnWp$p=oFmRg!p_kf4ZjslAk!lc0XappJpElGkuoShKo}kCoxp20 p.pel,l`pk3$fvpoj!pgp!pipV0 qrqVp9cZpSqKlKqMq$qZqpmnc-q:o{oh0 pZj%o:oGh7qwk#qy3zm5p}m}a;qFn^r0nHn pO4XpRp%lJqiq=qSoYrke;q|o_oWnXq9p)n#q,nNod0co2p/h+p;3InspAm00XmulunFmxr6pKmAq0m}mDqIrdq4o1ofq+rhpTl3qNpXq{qnoCn-rGm_0XmTrKnymWqBn4cIr9nBr.q2fulJqXbepWq!moqQpprsqgegmLrwf,rpqsq~qu0#m{mUj:sgleqxm_sklElCskpMpm0`b%ioiqpupd9.7jiz3r2#7g2#iP750+0-0/04.
Astuce 1

Vous pouvez partir d'une liste vide

La ligne dico = dict(notes) sert à éviter de détruire le dictionnaire notes

Astuce 2

Vous pouvez chercher la note maximale, supprimer la paire correspondante du dictionnaire de départ, ajouter le nom correspondant dans la liste cherchée. Il suffit de répéter ce processus 3 fois.

Astuce 3

La fonction pop peut vous aider.