Itération et catégorisation de ratings
Bonjour Gabriel,
Je reviens une fois de plus ce matin avec un nouveau souci, je suis entrain de tester une fonction qui doit itérer entre une liste de nombre afin de la catégoriser:
normalement je devrais avoir comme output:
Low:2, médium:2 et high:2
mais à la place ça me renvoie plutôt autre chose. Je vais poser mon code et s'il te plaît corrige le
def categorize_ratings(rating_list):
for rating in rating_list:
number_of_low_ratings = [1,2,3,4]
number_of_medium_ratings = [5,6,7]
number_of_high_ratings = [8,9,10]
rating = -1
print(rating_list)
if rating <= 4:
print(f"Low: {number_of_low_ratings }")
elif rating <=7:
print(f"Medium:{number_of_medium_ratings }")
else:
print(f"High:{number_of_high_ratings}")
Lorsque je teste ma fonction, avec les elements suivants:
calling categorize_ratings([1, 2, 3, 4, 5, 6, 7, 8, 9])
categorize_ratings([1, 2, 3, 4, 5, 6, 7, 8, 9])
print("Expected output:\nLow:2 \nMedium:2 \nHigh:2")
au lieu d'avoir le même résultat j'ai plutôt un retour de mes listes mais
3fois pour Low, 2 fois pour médium et 1fois pour high.
merci d'avance.
Salut,
C'est normal, tu boucles sur la liste, mais au final rating sera toujours égal à -1 dans ton cas. Et tu print à chaque tout la rating list.
def categorize_ratings(rating_list):
for rating in rating_list:
if rating <= 4:
print(f"Low: {rating}")
elif rating <= 7:
print(f"Medium: {rating}")
else:
print(f"High: {rating}")
categorize_ratings([1, 2, 3, 4, 5, 6, 7, 8, 9])
"""
Low: 1
Low: 2
Low: 3
Low: 4
Medium: 5
Medium: 6
Medium: 7
High: 8
High: 9
"""
Là j'ai un exemple où les nombres sont catégorisées. Je ne suis pas sûr d'avoir compris ce que tu voulais, mais là pour chaque nombre il est classé en fonction des seuils.
Salut Gabriel,
Merci mais en fait il faudrait avoir comme output:
Low: 2
Medium: 2
High: 2
En gros il faut compter le nombre de ratings, lorsque la boucle for itère dans la liste, elle a deux fois le même niveau ou catégorie. Le resultat que tu obtiens n'est pas très éloigné du mien et c'est vrai j'ai mal posé mes conditions.
Le resultat doit être le compte de chaque niveau.
def categorize_ratings(rating_list):
for rating in rating_list:
rating_list.count(rating)
if rating <= 4:
print(f"Low:{rating})
elif rating <=7:
print(f"Medium:{rating})
else:
print(f"High:{rating})lorsque je teste j'obtiens le resultat suivant:
-
*Low:1
-
Low:3
-
Medium:5
-
Medium7
-
High:8
-
High:9*
Or le resultat attendu est plutôt
Low: 2
Medium:2
High:2
Salut,
Plusieurs solutions alors. Sans aller dans les expressions avec un générateurp our tout faire en une ligne, voici une solution intermédiaire :
from collections import defaultdict
def categorize_ratings(rating_list):
counts = defaultdict(int)
for rating in rating_list:
if rating <= 4:
counts['low'] += 1
elif rating <= 7:
counts['medium'] += 1
else:
counts['high'] += 1
return dict(counts)
Après tu peux printer comme tu veux les clés et valeurs pour les afficher comme tu le souhaites. Le defaultdict est parfait, car il permet de ne pas initialiser les clés de ton dictionnaire d'avance, le defaultdict s'en occupe.
Tu peux lire ça : https://www.docstring.fr/blog/le-module-collections/
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte