Aller au contenu

Exercices

Les exercices classiques⚓︎

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

.128013=([tsSlbpkiu/Phw:3)o0m2e]d-f_1an vrygc050A0y0e0F0l0h0f0H0M0h0F0f0f0b010e0l0j010406050f0m0w0w0F0J0K040g0u0h0m0%0u0G050n0.0:0=0@0,0j040517101a0n170,0A0l0I0V0X0Z0#0X0G0L0m0F0L0y0B0j0K0e0p0~0H0p0l0L0p0h1C0p0e0*050Q0i0h0y1j0Y0!011B1D1F1D0e1L1N1J0e0J181x0V0`0f0j0F0G0#0x011P1l010C0S0y0G0F0w0y1J1+1-1=1R1^1N1{1}0*0a0H0o0J0u0j0u0f0l0}0G0H0O1)0J0J0y0M2i10200G180n1x2v1#1%1$1K0A221m0l0G1`2f1J1g1i0W1Q2F2H0G0u2L1J0j2o182t2v2Y0-1,2j2N1?2R0J0;0h1J0F1A2o0C0#030D0D0M2S0y1F2Q0u0B0v0B0E0*0E100F2Z2$0+2#212(1R2*2,2.2:0y2=012@2_2{2}2I300B1:040x36381-3a2t2E013f0F2-182/0p2;2?2^2`0O3p2R3r0s0*0s3w2s391b2W102L2y0A1%2D3d0#3M1~183!193Y2!113W3+2X2$0H0l0A0#2^2t3r333G3`3|013L3o2G3q31330H260y3}3n3N483P4a1J0n373b2%1k1R0k0*0O0C3V3y4o3B0q0*0H4w2u4y3)3C0C0*0I1`0A4D3^3c4q0#0)040c4N4F4Q3C0*0C0y2+0y4V3A4G4S0t0r4N0,3=4x3A3{4f3 313t052/4?454g2|4i2 4_1;4d4f3+3O523s4l370H5d4C4)4X4s040C0u0J4N5f3_4G0G0*0W4%4:2u5o4P2O010u4A042G5n4W5z5r5j4#1}4(5p4X4S4-5v3a5R4y4}3~2$3Q3h5V4 585Y4c1|4e4~57515Y2v5c5e5;5G2)4Z5K5u2!5g5z4S0d5M5y5@045t604p5}0*0z5F5|1?0u0*0b6a5N5H5^4$653B5~6l5q5s1N6o5O686g611R6d040B6v661?0w0l344.4V0n3@3X0y2v3.2w3$102z6R0F1M6M3Z1h5S0O0Q0S0f04.
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
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 :

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

Pour aller plus loin (exercices facultatifs)⚓︎

🏰 🐉 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

.128013x=(,j5[tsSIlbpkAiuq/P8hwO:3)o0m;2R7e4]à9d-f_1an6 véryg.c050P0K0i0U0r0m0j0X0(0m0U0j0j0c010i0r0o010406050j0s0F0F0U0!0#040k0D0m0s0|0D0V0X020U0F0o0G0X0I0K160!0t0s0K0j050u13151719110o04051E1x1H0u1E110P0r0Y0;0?0^0`0?0V0$0s0U0$0K0Q0o0#0i0x1g0X0x0r0$0x0m1-0x0i0 050,0n0m0K1Q0@0_011,1.1:1.0i1_1{1@0i0!1F1(0;1c0j0o0U0V0`0H011}1S010R0.0K0V1k0K1@2f2h2m1 2p1{2s0F2u040a0X0v0!0D0o0D0j0r1f1h0*2d0!0!0K0(2P1x2w0V1F0u1(2#292b2a1^0P2y1T0r0V2r2M1@1N1P0=1~2/2;0V0D2^1@0o2U1F2Z2#35122g1h2`2n2~0!160m1@0U1+2U0R0`030S0S0(2 0K1:2}0D0Q0H0J0Q0T0 0X0T1x0U363910382x3b1 3d3f3h3j0K3l013n3p3r3t2=3w3y2k040X0H3E3G2h3I2Z2.013N0U3g1F3i0x3k3m3o3q0*3X2~3Z0Q0B3B0B3)2Y3H113-3L0`3:3=053@3_3T3{3W2:3Y3x0Q0L3B0L451y473J3a1R3M0D3e3;3P3^3R3`3V3}4k3 4m0g3B0g4r3548393.4c4B4g3U3|3s4H3v4m0W3B0W4N4t494w4b4y3O3?3Q3S4V4j3u400J3B0J4(3+4P3K4+3/4-4A4/4C4;4i4G4@4m0w3B0w4|2!4~4v2{514z4d4f4D4h4F4X593y0O3B0O5e3,4Q4a5j4.4e4:4E4W3~4Z3y0T0E0 5J5w5g4R525l5D5o5F4Y400T3A045X5N4u5P5k4T5n4=584l5I3#0T3(0u3F464}5$5z4S544U575q5-3z425Z445=3*5f5_505{5C555E4?600T4o5Z4q655@674*5i6a5m565p5G5W4K5Z4M6k4s5^6n3c5Q5)6r5U5r3z4#5Z4%6y4O686o6D5|5*5~6t4m0T4_5Z4{6M4)5y696Q6b5}6s5V6V5b5Z5d6!6A6$6P5(6R6F6e4I5I5t5Z5v6;2!1I331x2^2(0P2b2-5z4W2@1O1F320K343H6l1F4W7i2x0r0P0`3o2Z5W3P7p7r6+6H3A0X2C0K7x6G6f1@6k6B1 0p0 0*0R7k6O2n0y3B7P7J4b0R0 0i2K0S0B3p2h1N0P0U0i1w6z727V010~040d7U6?3c0 2~0i1v7^4 5i7=0C0A7k117.7n1h7w017s39403#5C8a6T6,3!2l7C7E6{5H3w7H5?7:7S3$0X8w7 5h2n0j0P0 021t0D0i0G8E0s8G8I8F8H858y0X8h0S7t4m628g7q8b7y60427B2t8n5,6|418r883.8B3B8w1o2r0Y0D0r1|0s2;0X1:0j7}2d0V7}2s938~1v0X0B0X2D0.1{0s0!0:0(7(7p7+7-6N875$8S8U3y6h8X8)5 8+4o8%2D9v6U9s8-7Q1 8:8v8w2I2r2-2r0X2r290Z8{2Q0r2W0r1g2s0r2U0X2R2~0F0j0u7|7~8786373-9q8d4J7v8Y8i6H4K9z7D8Z7F8+6v457:9H8=1i8N8M8K8H8J8L8P9o9:9^8T9=3y6J9u9~8o404#9|9B8j0Qak65a59F4b7M9U0D7k0Xax010D0 0caCaE0V0naz2W8Q5z7=7@ae7_3M7{8G9,9/aU0`82adaZ7oag9r0Q6Xal9_604_aqam8*8pa-av8=aK7Y7!8 7}aJ7:aG04aI87aD7:7=0h0MaCb7a!010(5Y030l0V2O0r3;0r0j9S1|a 1|0Y7p1|2L9f0;2U0K0!8~3ibs9#989a9c0m9e9ga%7jaf7xa+6.a.8!8+5ba=a/bV8-aw7:7L040R4yb1be0V0 0rb+802n0D8u2:b:8z3MaM040!2h1ZaP50aRc15i0F0r0 64a(b`a#0 83bcaEbg0 030X0z3a0xbB0(cn970:9a7gc6bB9m4taTa)bQai0Q6~bT9 8p5tbXbUcHb!a5a{7:b-049+0S160bb_3.b3b535bdb;1 b30Qc42nc65Lcf7:ch04cjbjblbn0j7+9W1hbxbC9P2UbC7*0V0:0?0X0n0D0s0=0KbN3+9pa*cC5J9@ar7z5KcJcG5W5K2#3FcNdsdtcObec:cj2R2Ucpcocq2Rd50o1d0:0$b~0V9$aXdc7/4Q9;2h5W5YcFan6V7A8ma?9w8p5XcMdsaEb%b)0!cWaQ0 aSca4RaW0Fc*1 7=0ed.69aWb0czcb7;cdd}5ib?b.0Ve57`041N3qd_0`b30%ef3/b.7}9(ejaRceb6cgbh2g0!3q9f0i9#0s9#9U2P9Y2UdO8.dR0V5W8f3i8Sdn6V2kdmdW5.d(duc#e2b%0r7OercPd dbe#beb3020$8Oe)c$aycRaXcT0UcVe13.7=84b6eW3.dx0XdAcnevdD1|9+9be^0r3fe(9nd=eI5W8WeMageO5I8$dZbYd$8Wa`eVcNa|e=7}e@e_c!aEcYeaaVfwfdcyffdfdS6V9tfjdj6f9yfocK5W9tfsftdve:ek04cu8`d-e/e2fCf(d?e=d^e~fXe2f19%0X1~0D0(8`eGdecBfK5Ia1fNd!9C3z9{fRflg5eUb#b,aNaBe`5zehejcQ2L0oeod:gi0 f#bBgm040Cbce 7bbh0X130o32fb1|0(0+8RemezeB9V9X0-eF9-8Qfg6Vakg2fp5Wapg7eS6IgafWduesci0X1*dBf5br02030B0O0G0Z1{0Y1|dM91cUfb3;bw17c6f|bP8Za+6Wdig3ash7eRa@5Wa_drg$fWg(c;0;0K0s0b0X1t0rf21v940ih3dQfJeJ6-h8gVhAhcd#5WbSfVgbfYcQ7Z0o0Sbsejghgfd~040UgB9Lgsd;bOgcf!2Ucvf%d=d/gtfD0`f10q0fd891gF0;9j7*ey0NbD8~bo910*cs0X0Y0-0V1thmbMgPe`gR6}hBfS6VcIgYhdigeUd*0 2U0i9fe9f+5`a}hNhPia370u7m737h757e1x0i78iF2+2$0U1`iC0u761D8.5zh%0S0R0U0p0K0S0x621p1ri70:e}iy1L1G040q1e9!0j1c1ec{0X2L0^0riM0X0AaD1K3I2^3.1U1W1Y1!1$1(1*211/1;1?7f74iy37iAh48cfK0w3zieeOjodY8(h959js2l6c5TdWjxdqiR50b%7Nej8uj0h*697X04hM7#7%dL9k7,hYgofFcxddb8cdi*fHh!cAh59=joeL8RfkjB8qhE6Uj,jy6*jr8qjDaEjJa{hS5i9Habaaa7k30Ghwj)jmhzjofij.fO4Ikc8ljuhCkh5S5+hF0Hkhj|a38C9I8?0V8^8`0X8|brh gE1g942hey1{i2bJbL9hh_9lk889hy3wjofMkejv4lkTki9AkWkg4nj^6SifkYkrbea48=9KdL9O1hc 9Rkz9TgL0VeEg`f70D9(9*aXjY67ibkRkp0Qg1kVkkl9kZ9}lc9{jzknj?ldk,fYk.8wk6lqa7kPlbahjnatjqj:gXkjk*lxkmlcauhg8xe$04iwfAb2aHh-e3040hej0j3#lra9k7k02nd{lPlU8Dk5lslZd`0 d|is50l%04lWacl+cc04bbixj(kQf~kba,lyijjoa;iikom4k(6`m3m1jDhJe2hL2K3Dl/e6lOmjc+c7040EltgRjobSgUlCbWm6lkbWlilchHlHgwhThM5;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.o6mg0omIl}e{l-lPoin)olh+oam+fvnlgslSl^fZnTgsl{feolms61m2m7oHnAkXoKn{m}frmEnIh#lLorc20 oyn*1 mOoko3e27=0Mot3+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!lc0TappJpElGkuoShKo}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,nNod0oo2p/h+p;3InspAm00TmulunFmxr6pKmAq0m}mDqIrdq4o1ofq+rhpTl3qNpXq{qnoCn-rGm_0TmTrKnymWqBn4cIr9nBr.q2fulJqXbepWq!moqQpprsqgegmLrwf,rpqsq~qu0Hm{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.