Exercices sur les dictionnaires

Exercice 1:

On s’intéresse à des super-héros Marvel.

a) Écrire sous forme de dictionnaires les personnages Marvel que sont Thor, La Guêpe, Black Panther et Doctor Strange. Doivent être précisé leur nom, leur origine (terrien ou autre), leur sexe et le port éventuel d’une cape.
b) On dispose de la description d’un dernier super-héro peter_quill

peter_quill = {'Nom': [('Peter', 'Quill'), 'Star-Lord'], 'Sexe': 'H', 
               "Port d'une cape": False, 'Origine': 'Terrien', 
               'Origine2': 'Autre'}

Que doit-on écrire dans la console Python pour pouvoir accéder uniquement à son nom de famille 'Quill' ?

Réponse ?

Exercice 2: Attraper les tous !

Rémi a fait deux parties sur le jeu Pokemon. Lors de sa première partie, il a affronté:

  • sur la “Route 3”, 20 spearows et il a été victorieux à 15 reprises et 18 mankeys avec 12 victoires;
  • dans le “Meadow”, 22 cottonees et il a gagné 20 fois;
  • dans la “Cave”, 25 zubats avec 18 victoires et 26 digletts avec 16 victoires.

On représente cette partie à l’aide du dictionnaire ci-dessous:

partie1 = {
           'Spearow': ('Route 3', 20, 15),
           'Mankey': ('Route 3', 18, 12),
           'Cottonee': ('Maedow', 22, 20),
           'Zubat': ('Cave', 25, 18),
           'Diglett': ('Cave', 26, 16)
           }

De même, pour la seconde partie, sur les mêmes lieux que précédemment, il a été victorieux 18 fois sur 20 affrontements contre des spearows, 14 fois sur 22 affrontements contre des mankeys, 13 fois sur 20 contre des zubats et enfin 16 sur 18 contre des digletts.


  1. a) Donner la représentation de la seconde partie de la même façon que la première partie.
    b) Rémi a oublié de préciser que, lors de sa seconde partie, il a également combattu sur la “Route 3” 20 rattatas et il en est sorti victorieux à 17 reprises. Quelle instruction doit on faire pour rectifier cet oubli ?

Réponse ?

  1. On donne la fonction suivante:
    def le_plus_affronte(partie):
       pokemon_max, affrontements_max = None, None
           for (pokemon, (lieu, affrontements, victoires)) in partie.items():
               if affrontements_max == None or affrontements > affrontements_max
                  pokemon_max, affrontements_max = pokemon, affrontements
       return (pokemon_max, affrontements_max)
    

    a) Que va retourner le_plus_affronte(partie1) ?
    b) En vous inspirant de la fonction précédente, écrire une fonction le_moins_victorieux() qui admet en paramètre une partie et qui retourne le pokemon rencontré par Rémi lors de cette partie avec lequel il a connu le moins de victoires. Le retour attendu sera donné sous la forme d’un tuple désignant le nom de ce pokémon ainsi que le nombre de victoires qui lui est rattaché lors de cette partie.
    Jeu de tests:

    >>> le_moins_victorieux(partie1)
    ('Mankey', 12)
    >>> le_moins_victorieux(partie2)
    ('Zubat', 13)
    
Réponse ?
  1. On désire écire une fonction nb_affrontements() qui prend en paramètre la partie et le lieu et qui retourne le nombre d’affrontements qui a eu lieu dans la partie et le lieu choisis.

    a) Proposer un jeu de tests.
    b) Pour réaliser cette fonction, parmi les propositions de boucles ci-dessous laquelle est à privilégier ?
    (i) for cle in partie.keys()
    (ii) for valeur in partie.values()
    (iii) for (cle, valeur) in partie.items()
    c) Écrire une fonction qui répond aux critères imposés.

Réponse ?
  1. On désire enfin écire une fonction nb_victoires() qui prend en paramètre la partie et un pokemon et qui retourne le nombre d’affrontements qui a eu lieu dans cette partie avec ce pokemon.
    Jeu de tests
    >>> nb_victoires(partie1, 'Cottonee')
    20
    >>> nb_victoires(partie2, 'Cottonee')
    0
    

    a) Pour réaliser cette fonction, parmi les propositions de boucles ci-dessous laquelle est à privilégier ?
    (i) for cle in partie.keys()
    (ii) for valeur in partie.values()
    (iii) for (cle, valeur) in partie.items()
    b) Écrire une fonction qui répond aux critères imposés.

Réponse ?