Aller au contenu

Dictionnaire de « J'aime »⚓︎

Lors d'une soirée déguisée un vote est organisé afin d'élire le meilleur costume.

Chaque personne peut attribuer des « J'aime » à aucune, une, ou plusieurs personnes pour son déguisement. Les résultats de ces « J'aime » sont enregistrés dans un dictionnaire dont les clés sont les prénoms des personnes et la valeur associée est la liste des personnes auxquelles elles ont attribué un « J'aime ».

Par exemple, pour le dictionnaire :

🐍 Script Python
votes_soiree = {
    "Alice": ["Bob", "Carole", "Dylan"],
    "Bob": ["Carole", "Esma"],
    "Esma": ["Bob", "Alice"],
    "Fabien": ["Dylan"],
    "Carole": [],
    "Dylan":[],
}

Comme on peut le voir, Alice a attribué des « J'aime » aux déguisements de Bob, Carole et Dylan. Carole n'a quant à elle attribué aucun « J'aime ».

Vous devez compléter les deux fonctions suivantes :

  • scores_aimes prend en argument le dictionnaire votes tel que décrit plus haut et renvoie le dictionnaire dont les clés sont les personnes présentes lors de la soirée et les valeurs associées le nombre de « J'aime » qu'ils ont reçus ;

  • gagnants prend en argument le dictionnaire votes tel que décrit plus haut et renvoie la liste contenant le nom des vainqueurs du vote (les noms des personnes ayant reçus le plus de « J'aime »).

Exemples

🐍 Console Python
>>> votes_soiree = {
...     "Alice": ["Bob", "Carole", "Dylan"],
...     "Bob": ["Carole", "Esma"],
...     "Esma": ["Bob", "Alice"],
...     "Fabien": ["Dylan"],
...     "Carole": [],
...     "Dylan":[],
... }
>>> scores_aimes(votes_soiree)
{'Bob': 2, 'Alice': 1, 'Esma': 1, 'Fabien': 0, 'Carole': 2, 'Dylan': 2}
>>> gagnants(votes_soiree)
['Bob', 'Carole', 'Dylan']
###
# Testsbksl-nlvotespy-undsoiree = {bksl-nl "Alice": ["Bob", "Carole", "Dylan"],bksl-nl "Bob": ["Carole", "Esma"],bksl-nl "Esma": ["Bob", "Alice"],bksl-nl "Fabien": ["Dylan"],bksl-nl "Carole": [],bksl-nl "Dylan":[],bksl-nl}bksl-nlbksl-nlbksl-nlassert scorespy-undaimes(votespy-undsoiree) == {bksl-nl "Bob": 2,bksl-nl "Alice": 1,bksl-nl "Esma": 1,bksl-nl "Fabien": 0,bksl-nl "Carole": 2,bksl-nl "Dylan": 2,bksl-nl}bksl-nlbksl-nlassert sorted(gagnants(votespy-undsoiree)) == ["Bob", "Carole", "Dylan"]bksl-nlbksl-nl# Tests supplémentairesbksl-nlvotespy-und1 = {"a": [], "b": [], "e": [], "f": [], "c": [], "d": []}bksl-nlassert scorespy-undaimes(votespy-und1) == {"a": 0, "b": 0, "c": 0, "d": 0, "e": 0, "f": 0}bksl-nlassert sorted(gagnants(votespy-und1)) == ["a", "b", "c", "d", "e", "f"]bksl-nlbksl-nlvotespy-und2 = {"a": ["a"], "b": ["b"], "e": ["e"], "f": ["f"], "c": ["c"], "d": ["d"]}bksl-nlassert scorespy-undaimes(votespy-und2) == {"a": 1, "b": 1, "e": 1, "f": 1, "c": 1, "d": 1}bksl-nlassert sorted(gagnants(votespy-und2)) == ["a", "b", "c", "d", "e", "f"]bksl-nlbksl-nlvotespy-und3 = {"a": [], "b": ["a"], "e": ["a"], "f": ["a"], "c": ["a"], "d": ["a"]}bksl-nlassert scorespy-undaimes(votespy-und3) == {"a": 5, "b": 0, "e": 0, "f": 0, "c": 0, "d": 0}bksl-nlassert sorted(gagnants(votespy-und3)) == ["a"]bksl-nlbksl-nl 5/5

def scorespy-undaimes(votes):bksl-nl """bksl-nl Renvoie le dictionnaire dont les clés sont les personnes,bksl-nl et les valeurs le nombre de personnes qui leur ont attribué des J'aime.bksl-nl """bksl-nl ...bksl-nlbksl-nlbksl-nldef gagnants(votes):bksl-nl """bksl-nl Renvoie la liste des personnes ayant le plus reçu de : J'aimebksl-nl """bksl-nl ...bksl-nlbksl-nlbksl-nlbksl-nl# Testsbksl-nlvotespy-undsoiree = {bksl-nl "Alice": ["Bob", "Carole", "Dylan"],bksl-nl "Bob": ["Carole", "Esma"],bksl-nl "Esma": ["Bob", "Alice"],bksl-nl "Fabien": ["Dylan"],bksl-nl "Carole": [],bksl-nl "Dylan":[],bksl-nl}bksl-nlbksl-nlbksl-nlassert scorespy-undaimes(votespy-undsoiree) == {bksl-nl "Bob": 2,bksl-nl "Alice": 1,bksl-nl "Esma": 1,bksl-nl "Fabien": 0,bksl-nl "Carole": 2,bksl-nl "Dylan": 2,bksl-nl}bksl-nlbksl-nlassert sorted(gagnants(votespy-undsoiree)) == ["Bob", "Carole", "Dylan"]bksl-nlbksl-nlbksl-nldef scorespy-undaimes(votes):bksl-nl """bksl-nl Renvoie le dictionnaire dont les clés sont les personnes,bksl-nl et les valeurs le nombre de personnes qui leur ont attribué des J'aimebksl-nl """bksl-nl bilan = {}bksl-nl for personne in votes:bksl-nl bilan[personne] = 0bksl-nlbksl-nl for personne in votes:bksl-nl for personnepy-undchoisie in votes[personne]:bksl-nl bilan[personnepy-undchoisie] = bilan[personnepy-undchoisie] + 1bksl-nl return bilanbksl-nlbksl-nlbksl-nldef gagnants(votes):bksl-nl """bksl-nl Renvoie la liste des personnes ayant le plus reçu de : J'aimebksl-nl """bksl-nl bilan = scorespy-undaimes(votes)bksl-nl maxi = 0bksl-nl for personne in bilan:bksl-nl if bilan[personne] > maxi:bksl-nl maxi = bilan[personne]bksl-nlbksl-nl listepy-undgagnants = [nom for nom in bilan if bilan[nom] == maxi]bksl-nlbksl-nl return listepy-undgagnantsbksl-nlbksl-nlbksl-nl# Testsbksl-nlvotespy-undsoiree = {bksl-nl "Alice": ["Bob", "Carole", "Dylan"],bksl-nl "Bob": ["Carole", "Esma"],bksl-nl "Esma": ["Bob", "Alice"],bksl-nl "Fabien": ["Dylan"],bksl-nl "Carole": [],bksl-nl "Dylan": [],bksl-nl}bksl-nlbksl-nlbksl-nlassert scorespy-undaimes(votespy-undsoiree) == {bksl-nl "Bob": 2,bksl-nl "Alice": 1,bksl-nl "Esma": 1,bksl-nl "Fabien": 0,bksl-nl "Carole": 2,bksl-nl "Dylan": 2,bksl-nl}bksl-nlbksl-nlassert sorted(gagnants(votespy-undsoiree)) == ["Bob", "Carole", "Dylan"]bksl-nlbksl-nl

A

On aurait pu utiliser les méthodes .keys(), .values() et .items()

Voici une autre proposition de résolution en utilisant ces méthodes :

🐍 Script Python
def scores_aimes(votes):
    """
    Renvoie le dictionnaire dont les clés sont les personnes,
    et les valeurs le nombre de personnes qui leur ont attribué des J'aime
    """
    bilan = {}
    for personne in votes.keys(): # ou tout simplement for personne in votes
        bilan[personne] = 0
    for liste_choisis in votes.values():
        for prenom in liste_choisis:
            bilan[prenom] = bilan[prenom] + 1
    return bilan


def gagnants(votes):
    """
    Renvoie la liste des personnes ayant le plus reçu de J'aime
      triée par ordre alphabétique
    """
    bilan = scores_aimes(votes)
    maximum = max(bilan.values())
    liste_gagnants = [nom for (nom, score) in bilan.items() if score == maximum]
    return liste_gagnants

Z