Top-Likes !⚓︎
Sur le réseau social TipTop, on s'intéresse au nombre de « like » des abonnés. Les données sont stockées dans un dictionnaire 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 top_likes
qui :
-
prend en paramètre un dictionnaire
likes
non-vide dont les clés sont des chaines de caractères et les valeurs associées des entiers positifs ou nuls, -
renvoie un tuple dont :
- la première valeur est la clé du dictionnaire associée à la valeur maximale ; en cas d'égalité sur plusieurs clés, on choisira la plus petite suivant un classement alphabétique,
- la seconde valeur est la valeur maximale présente dans le dictionnaire.
On interdit ici d'utiliser
max
,min
, ainsi quesort
ousorted
.
Exemples
>>> top_likes({'Bob': 102, 'Ada': 201, 'Alice': 103, 'Tim': 50})
('Ada', 201)
>>> top_likes({'Alan': 222, 'Ada': 201, 'Eve': 222, 'Tim': 50})
('Alan', 222)
>>> top_likes({'David': 222, 'Ada': 201, 'Alan': 222, 'Tim': 50})
('Alan', 222)
>>> top_likes({'David': 0, 'Ada': 0, 'Alan': 0, 'Tim': 0})
('Ada', 0)
def toppy-undlikes(likes):bksl-nl ...bksl-nlbksl-nlbksl-nl# Testsbksl-nlassert toppy-undlikes({'Bob': 102, 'Ada': 201, 'Alice': 103,bksl-nl 'Tim': 50}) == ('Ada', 201)bksl-nlassert toppy-undlikes({'Alan': 222, 'Ada': 201, 'Eve': 222,bksl-nl 'Tim': 50}) == ('Alan', 222)bksl-nlassert toppy-undlikes({'David': 222, 'Ada': 201, 'Alan': 222,bksl-nl 'Tim': 50}) == ('Alan', 222)bksl-nlassert toppy-undlikes({'David': 0, 'Ada': 0, 'Alan': 0, 'Tim': 0}) == ('Ada', 0)bksl-nlbksl-nldef toppy-undlikes(likes):bksl-nl maxpy-undpseudo = ""bksl-nl maxpy-undlikes = -1bksl-nl for pseudo in likes:bksl-nl if likes[pseudo] > maxpy-undlikes:bksl-nl maxpy-undpseudo = pseudobksl-nl maxpy-undlikes = likes[pseudo]bksl-nl elif likes[pseudo] == maxpy-undlikes and pseudo < maxpy-undpseudo:bksl-nl maxpy-undpseudo = pseudobksl-nl maxpy-undlikes = likes[pseudo]bksl-nl return (maxpy-undpseudo, maxpy-undlikes)bksl-nlbksl-nlbksl-nl# Testsbksl-nlassert toppy-undlikes({'Bob': 102, 'Ada': 201, 'Alice': 103,bksl-nl 'Tim': 50}) == ('Ada', 201)bksl-nlassert toppy-undlikes({'Alan': 222, 'Ada': 201, 'Eve': 222,bksl-nl 'Tim': 50}) == ('Alan', 222)bksl-nlassert toppy-undlikes({'David': 222, 'Ada': 201, 'Alan': 222,bksl-nl 'Tim': 50}) == ('Alan', 222)bksl-nlassert toppy-undlikes({'David': 0, 'Ada': 0, 'Alan': 0, 'Tim': 0}) == ('Ada', 0)bksl-nlbksl-nl
A
Il s'agit d'une recherche de maximum. On initialise le pseudo ayant le plus de « like » à ""
et la variable max_likes
à -1
. On prend soin dès la première itération de la boucle de remplacer ces valeurs par celle associées au premier pseudo contenu dans le dictionnaire.
Lors du parcours de pseudos, on compare le nombre de « like » associé à la valeur conservée jusqu'à maintenant. Si elle est plus importante on met à jour. Si les nombres de « like » sont égaux, on ne met à jour que si l'on a aussi pseudo < max_pseudo
.
Z