Aller au contenu

correction indicative

Dictionnaires - 1ère activité

Dictionnaires

Dans un dictionnaire la clé permet de récupérer rapidement un élément.

Par exemple, si j'ai un dictionnaire avec le prénom des élèves que j'ai associé à leur numéro de téléphone :

contacts = {'abdel': '0155551010', 'christian': '0516526600', 'assa': '0545974500'}
Et que je cherche le numéro de téléphone de l'un d'entre eux, par exemple celui de christian, alors je peux le récupérer efficacement de cette manière :

contacts['christian']

Pour ajouter un élément dans le dictionnaire on indique quelle clé (le prénom dans notre cas) on associe à la valeur (le numéro de téléphone dans notre exemple) :

contacts['roberto'] = '0955551910'

On vient d'ajouter roberto à notre dictionnaire :

contacts = {'abdel' '0155551010', 'christian': '0516526600', 'assa': '0545974500', 'roberto' : '0955551910'}

Exercice 1

Soit deux listes, la première contient des noms de l'élève, la seconde contient les numéros de téléphones. Le \(ième\) indice dans la liste de nom doit être associé au \(ième\) indice dans la liste de téléphone.

noms = ['riri', 'fifi', 'loulou']
telephones = ['0101010101', '0202020202', '0303030303']

Soit ce dictionnaire vide :

contacts = {}

Ajouter les contacts riri', 'fifi', 'loulou au dictionnaire contacts.

Résultat attendu :

contacts = {'riri' : '0101010101', 'fifi' : '0202020202', 'loulou' : '0303030303'}

Exercice 2

Cet exercice est extrait des épreuves pratiques du baccalauréat.

Sur le réseau social TipTop, on s’intéresse au nombre de « like » des abonnés. Les données sont stockées dans des dictionnaires où les clés sont les pseudos et les valeurs correspondantes sont les nombres de « like » comme ci-dessous :

{'Bob': 102, 'Ada': 201, 'Alice': 103, 'Tim': 50}

Écrire une fonction max_dico qui :

Prend en paramètre un dictionnaire dico non vide dont les clés sont des chaînes de caractères et les valeurs associées sont des entiers ;
Renvoie un tuple dont :
    - La première valeur est la clé du dictionnaire associée à la valeur maximale ;
    - La seconde valeur est la première valeur maximale présente dans le dictionnaire.
>>> max_dico({'Bob': 102, 'Ada': 201, 'Alice': 103, 'Tim': 50})
('Ada', 201)
>>> max_dico({'Alan': 222, 'Ada': 201, 'Eve': 220, 'Tim': 50})
('Alan', 222)

Exercice 3

Cet exercice est extrait des épreuves pratiques du baccalauréat.

Les résultats d'un vote ayant trois issues possibles 'A', 'B' et 'C' sont stockés dans un tableau.

Exemple :

urne = ['A', 'A', 'A', 'B', 'C', 'B', 'C', 'B', 'C', 'B']

La fonction depouille doit permettre de compter le nombre de votes exprimés pour chaque artiste. Elle prend en paramètre un tableau et renvoie le résultat dans un dictionnaire dont les clés sont les noms des artistes et les valeurs le nombre de votes en leur faveur.

La fonction vainqueur doit désigner le nom du ou des gagnants. Elle prend en paramètre un dictionnaire dont la structure est celle du dictionnaire renvoyé par la fonction depouille et renvoie un tableau. Ce tableau peut donc contenir plusieurs éléments s’il y a des artistes ex- aequo. Compléter les fonctions depouille et vainqueur ci-après pour qu’elles renvoient les résultats attendus.

def depouille(urne):
    resultat = ...
    for bulletin in urne:
        if ...:
            resultat[bulletin] = resultat[bulletin] + 1
        else:
            ...
    return resultat

def vainqueur(election):
    vainq = ''
    nmax = 0
    for candidat in election:
        if ... > ... :
            nmax = ...
    liste_finale = [nom for nom in election if election[nom] == ...]
    return ...

Exemples d’utilisation :

>>> election = depouille(urne)
>>> election
{'A': 3, 'B': 4, 'C': 3}
>>> vainqueur(election)
['B']

Exercice 4

On peut avoir des dictionnaires dans des dictionnaires.

Soit le dictionnaire suivant :

utilisateurs = {

    'aeinstein': {
        'prenom': 'albert',
        'nom': 'einstein',
        'lieu': 'princeton',
    },

    'mcurie': {
        'prenom': 'marie',
        'nom': 'curie',
        'lieu': 'paris',
    }
}
Afficher le résultat ci-dessous :

Utilisateur : aeinstein
    Nom complet : Albert Einstein
    Lieu: Princeton

Utilisateur: mcurie
    Nom complet : Marie Curie
    Lieu : Paris

Exercice 5

Cet exercice est un exemple de problème classique qui peut être résolu efficacement en utilisant un dictionnaire.

Soit une liste nums et un entier cible.En utilisant un dictionnaire développez une fonction qui retourne l'indice de chacun des nombres tels que leur somme correspond à la valeur cible. Vous ne pouvez pas utiliser deux fois le même élément (voir exemple 3 ci-dessous).

Créer une fonction.

Exemple 1:

Entrée: nums = [2,7,11,15], cible = 9
Sortie : [0,1]
Explication : nums[0] + nums[1] == 9, on returne [0, 1].

Exemple 2:

Entrée : nums = [3,2,4], cible = 6
Sortie : [1,2]

Exemple 3:

Entrée : nums = [3,3], cible = 6
Sortie : [0,1] (et pas [0, 0] car vous ne pouvez pas utiliser deux fois le même élément)