Résumé en français : On vous donne une liste contenant des couleurs de moufles (donc pas de main gauche ou droite à distinguer). On vous demande le nombre de paires que vous pouvez constituer, c'est-à-dire avoir 2 moufles de la même couleur.
Avec le premier exemple donné, on peut constituer une paire de moufles rouge (red) et une paire bleue (blue) soit 2 paires.
Relisez l'exercice 6 que j'ai proposé, vous devriez constater de nombreuses ressemblances.
Une première idée est de commencer par récupérer les différentes couleurs puis, pour chacune d'elle, de compter combien de fois cette couleur apparait. Il suffira de diviser par 2 ce nombre (sans tenir compte des virgules) pour savoir combien de paires on peut constituer avec cette couleur. Finalement, on fera la somme du nombre de paires trouvées.
Je reprends la structure classique vue dans l'exercice 6 :
def nb_paires(gants):
couleurs = [ ] # couleurs distinctes
for g in gants: # on parcourt les gants
if g not in couleurs: # nouvelle couleur ?
couleurs.append(g) # on l'ajoute à la liste
paires = 0 # nombre de paires possibles
for c in couleurs: # on parcourt à nouveau les gants
paires += gants.count(c) // 2 # on compte puis ÷ entière par 2
return paires # on renvoie le nombre de paires
nb_paires(["gray","black","purple","purple","gray","black"])
3
nb_paires(["red","green","blue"])
0
Comme nous l'avons également vu dans l'exercice 6, nous pouvons utiliser des ensembles (set
) pour récupérer les éléments uniques. Les versions sont alors nettement plus courtes :
def nb_paires(gants):
return sum(gants.count(v) // 2 for v in set(gants))
nb_paires(["gray","black","purple","purple","gray","black"])
3
Est-il vraiment nécessaire de récupérer les couleurs uniques ? Imaginons la situation dans la vie réelle avec 'red' 'green' 'red' 'blue' 'blue'
:
'red'
, je n'ai pas cette couleur donc je la garde'green'
, je n'ai pas cette couleur donc je la garde'red'
. J'ai déjà cette couleur, je peux donc faire une paire. J'enlève les 2 moufles 'red' et j'ajoute 1 au nombre de paires'blue'
, je n'ai pas cette couleur donc je la garde'blue'
. J'ai déjà cette couleur, je peux donc faire une paire. J'enlève les 2 moufles 'blue' et j'ajoute 1 au nombre de paires🤖 Refaites de tête le processus avec les gants 'red' 'red' 'red' 'red' 'red'
Prendre un gant revient à ajouter un élément dans une liste, inversement créer une paire à éliminer cette couleur de la liste. Voyons comment ajouter, enlever ou tester si un élément est dans un ensemble en utilisant les méthodes add
, remove
:
paires = set() # Ensemble vide
paires.add('red') # on ajoute 'red' à l'ensemble
paires
{'red'}
paires.add('blue')
paires
{'blue', 'red'}
paires.remove('red') # on enlève 'red'
paires
{'blue'}
'red' in paires # on teste si 'red' est dans l'ensemble
False
Version finale basée sur cette idée :
def nb_paires(gants):
couleurs = set() # les couleurs trouvées
paires = 0 # nb de paires réalisées
for c in gants: # on parcourt les gants
if c in couleurs: # couleur déjà vue ?
couleurs.remove(c) # on la retire des couleurs trouvées
paires += 1 # le nombre de paires augmente de 1
else: # sinon
couleurs.add(c) # ajouter cette nouvelle couleur
return paires # nombre de paires trouvées
nb_paires(["gray","black","purple","purple","gray","black"])
3