Dans cet exercice, on cherche à connaître le nombre total d'employés d'une entreprise en partant du texte défini dans la variable sentence.
Vous devez récupérer le nombre total d'employés (1771) dans la variable employee_count.
Pour séparer une chaîne de caractères sur un caractère, on peut utiliser la méthode split.
Vous devrez appliquer une opération spécifique sur le nombre 529 qui comportera un caractère en trop (le point de la fin de la phrase).
code Code
sentence = "La première usine dispose de 324 employés. La deuxième usine en compte 529. L'unité de Los Angeles dispose quant à elle de 918 employés."
words = sentence.split()
employee_count = sum(int(word.strip(".")) for word in words if word.strip(".").isdigit())
comment Explications
La première opération que nous devons réaliser consiste à isoler chaque mot de la phrase.
Pour ce faire on peut utiliser la méthode split sans lui passer d'argument pour séparer la chaîne de caractères sur les espaces :
>>> sentence = "La première usine dispose de 324 employés. La deuxième usine en compte 529. L'unité de Los Angeles dispose quant à elle de 918 employés."
>>> sentence.split()
['La', 'première', 'usine', 'dispose', 'de', '324', 'employés.', 'La', 'deuxième', 'usine', 'en', 'compte', '529.', "L'unité", 'de', 'Los', 'Angeles', 'dispose', 'quant', 'à', 'elle', 'de', '918', 'employés.']
Nous pouvons ensuite créer la structure de base de notre compréhension de liste :
words = sentence.split()
employee_count = [word for word in words]
On peut récupérer les chaînes de caractères de la phrase qui contiennent des nombres grâce à la méthode isdigit. Ajoutons là à notre compréhension de liste :
employee_count = [word for word in words if word.isdigit()]
Malheureusement, nous n'obtenons que 2 des 3 nombres avec la compréhension de liste ci-dessus :
>>> [word for word in words if word.isdigit()]
['324', '918']
Le problème vient du fait que le 2e nombre dans la phrase est suivi d'un point. Quand on utilise la méthode split, nous récupérons donc 529. au lieu de 529.
La méthode isdigit ne considère donc pas cette chaîne de caractères comme un nombre à cause du point.
Nous devons donc traiter ce cas de figure en enlevant le point avec la méthode strip :
employee_count = [word.strip(".") for word in words if word.strip(".").isdigit()]
Nous récupérons ainsi les 3 nombres de la phrase :
>>> [word.strip(".") for word in words if word.strip(".").isdigit()]
['324', '529', '918']
Comme nous souhaitons additionner ces 3 nombres ensemble, nous devons également les convertir en nombre entier, grâce à la fonction int :
>>> [int(word.strip(".")) for word in words if word.strip(".").isdigit()]
[324, 529, 918]
Maintenant que notre liste contient uniquement des nombres entiers, nous pouvons faire la somme grâce à la fonction sum :
>>> sum([int(word.strip(".")) for word in words if word.strip(".").isdigit()])
1771
À noter que nous pouvons passer un générateur directement à la fonction sum, ce qui nous permet d'enlever les crochets autour de la compréhension de liste :
>>> sum(int(word.strip(".")) for word in words if word.strip(".").isdigit())
1771
À noter
Dans un cas comme celui-ci, nous obtenons une compréhension de liste qui devient difficile à lire. De plus, nous répétons la méthode strip deux fois de la même façon.
Dans un cadre professionnel, il pourrait être préférable de passer par une boucle for classique pour garder un code plus lisible.
sentence = "La première usine dispose de 324 employés. La deuxième usine en compte 529. L'unité de Los Angeles dispose quant à elle de 918 employés."
sentence = "La première usine dispose de 324 employés. La deuxième usine en compte 529. L'unité de Los Angeles dispose quant à elle de 918 employés."
words = sentence.split()
employee_count = sum([int(word.strip(".")) for word in words if word.strip(".").isdigit()])Console
Un instant...
Résultats
La variable employee_count contient le nombre 1771.
assert employee_count == 1771, f"La variable employee_count ne contient pas le bon nombre ({employee_count} au lieu de 1771)."Bravo, tu as réussi cet exercice de code 🥳
Envoyer ma solution
Vous avez trouvé une solution alternative pour cet exercice ? Proposez votre solution à la communauté 👇
Ma solution :












