Dans une entreprise, chaque mois, les salariés ont un salaire et une prime.
Le comptable cherche à faire des statistiques. Et comme il ne sait pas se
servir d'un ordinateur, comme d'habitude c'est sur vous que ça retombe !
On cherche donc à savoir quels sont les salariés :
-
qui ont au moins 3000 euros de salaire par mois.
-
qui ont eu au moins 250 euros de prime ce mois ci.
-
dont la prime fait au moins 6% du salaire.
Les données en entrée sont :
-
personnes: la liste des salariés. -
salaires: la liste de salaires par mois (liste d'entiers). -
primes: la liste des primes du mois (liste d'entiers).
Les 3 listes sont dans le même ordre, c'est-à-dire que le premier nom de la liste personnes à pour salaire le premier de salaires, et pour prime la première de primes, et ainsi de suite pour le deuxième, le troisième etc.
On veut en sortie 3 listes :
-
la liste des personnes dont le salaire est 3000 euros ou plus.
-
la liste des personnes dont la prime est de 250 euros ou plus.
-
la liste des personnes dont la prime fait au moins 6% du salaire.
Vous devez écrire une fonction statistiques_salaires qui prends dans l'ordre les paramètres personnes, salaires, primes et qui renvoie dans l'ordre les 3 listes de personnes.
Exemple d'utilisation
personnes = ["Stallman", "Torvalds", "Perlis", "Turing", "VomNeumann",
"Iverson", "Boole", "Hamming", "Knuth", "Ritchie", "Thompson"]
salaires = [1500, 4700, 1500, 3800, 890, 4200, 480, 395, 1710, 1300, 3900]
primes = [190, 0, 117, 100, 500, 60, 0, 150, 0, 100, 180]
>>> statistiques_salaires(personnes, salaires, primes)
[['Torvalds', 'Turing', 'Iverson', 'Thompson'],
['VomNeumann'],
['Stallman', 'Perlis', 'VomNeumann', 'Hamming', 'Ritchie']]
Bonus
Si vous souhaitez augmenter la difficulté, vous pouvez également résoudre l'exercice en imposant les conditions ci-dessous.
-
refaire l'exercice en utilisant une seule boucle dans tout le programme.
-
gérer le cas où une personne à un salaire nul (alors le calcul des 6% est compliqué).
-
refaire l'exercice en utilisant aucune boucle.
- Pensez à utiliser la fonction
rangepour itérer sur les index d'une liste.
code Code
def statistiques_salaires(personnes: list, salaires: list, primes: list) -> list:
personnes_salaires_plus_de_3000 = []
for index in range(len(personnes)):
if salaires[index] >= 3000:
personnes_salaires_plus_de_3000.append(personnes[index])
personnes_prime_plus_de_250 = []
for index in range(len(personnes)):
if primes[index] >= 250:
personnes_prime_plus_de_250.append(personnes[index])
personnes_prime_6_pourcents = []
for index in range(len(personnes)):
if (primes[index] / salaires[index]) > 6/100:
personnes_prime_6_pourcents.append(personnes[index])
return [personnes_salaires_plus_de_3000, personnes_prime_plus_de_250, personnes_prime_6_pourcents]
Version avec zip
Pour ceux qui veulent creuser un peu plus loin et optimiser le code, sachez que la fonction zip permet de regrouper des listes et dans notre car c'est très utile car cela nous permet de résoudre l'exercice à l'aide d'une seule boucle. Il suffit simplement d'itérer sur le résultat de la fonction zip.
def statistiques_salaires(personnes: list, salaires: list,
primes: list) -> list:
personnes_salaires_plus_de_3000 = []
personnes_prime_plus_de_250 = []
personnes_prime_6_pourcents = []
for personne, salaire, prime in zip(personnes, salaires, primes):
if salaire >= 3000:
personnes_salaires_plus_de_3000.append(personne)
if prime >= 250:
personnes_prime_plus_de_250.append(personne)
if (prime / salaire) > 6 / 100:
personnes_prime_6_pourcents.append(personne)
return [personnes_salaires_plus_de_3000, personnes_prime_plus_de_250,
personnes_prime_6_pourcents]
comment Explications
Dans un premier temps, nous pouvons créer le prototype de la fonction avec les informations données dans l’énoncé. La fonction doit s’appeler statistiques_salaires et elle doit être composée de 3 paramètres (personnes, salaires et primes) qui sont tous les trois des listes puis la fonction doit renvoyer comme résultat sous la forme d’une liste.
def statistiques_salaires(personnes: list, salaires: list, primes: list) -> list:
Une fois le prototype réalisé, passons à la première étape en relevant toutes les personnes percevant un salaire d’au moins 3000 euros par mois.
Il nous faut donc créer une liste pour stocker les nom des personnes.
personnes_salaire_plus_de_3000 = []
Maintenant, parcourront les différents index de la liste personnes afin de vérifier si leur salaire est d’au moins 3000 euros.
for index in range(len(personnes)):
Petit rappel ici, la fonction len permet d’obtenir la taille d’une liste ou d’une chaîne de caractères.
Puis à chaque index il suffit de récupérer le salaire associé dans la liste salaires à l’aide de deux crochets afin de vérifier si le salaire est supérieur ou égal à 3000 euros.
personnes_slaire_plus_de_3000 = []
for index in range(len(personnes)):
if salaires[index] >= 3000:
Dans le cas où le salaire est supérieur ou égal à 3000 euros, il faut bien penser à ajouter le nom de la personne dans la liste précédemment créée (personnes_salaires_plus_de_3000). Pour récupérer le nom de la personne on récupère la valeur associée à l’index dans notre liste de personnes afin de l’ajouter dans la liste grâce à la méthode append.
personnes_slaire_plus_de_3000 = []
for index in range(len(personnes)):
if salaires[index] >= 3000:
personnes_salaires_plus_de_3000.append(personnes[index])
Dans un second temps. il nous est demandé de récupérer les noms de toutes les personnes ayant une prime d’au moins 250 euros par mois. Ici le processus est le même sauf que l’on va rechercher les primes dans la liste des primes et on va vérifier que la prime est supérieure ou égale à 250 euros.
personnes_prime_plus_de_250 = []
for index in range(len(personnes)):
if primes[index] >= 250:
personnes_prime_plus_de_250.append(personnes[index])
Maintenant, passons à la dernière étape qui consiste à récupérer les noms des personnes ayant une prime supérieure ou égale à 6% de leur salaire.
Petit rappel mathématique ici, pour calculer le pourcentage d’une valeur 1 par rapport à une valeur 2, il faut diviser la valeur 1 par la valeur 2.
Dans notre cas on souhaite calculer le pourcentage de la prime par rapport au salaire. Donc le calcul sera le suivant : prime / salaire.
Une fois que nous savons cela, nous pouvons commencer par créer une liste vide qui contiendra les noms des personnes dont la prime représente au moins 6% de leur salaire.
personnes_prime_6_pourcents = []
Ensuite, il va falloir parcourir les différents index des salariés présents dans la liste personnes . À chaque itération on vérifie si le pourcentage de la prime par rapport au salaire est supérieur ou égal à 6 pourcents à l’aide d’une structure conditionnel if .
personnes_prime_6_pourcents = []
for index in range(len(personnes)):
if (primes[index] / salaires[index]) >= 6/100:
Dans le cas où la condition est vérifiée, on pense bien à ajouter le nom de la personne dans la liste personnes_prime_6_pourcents à l’aide de la méthode append.
personnes_prime_6_pourcents.append(personnes[index])
Enfin, pour terminer il nous reste plus qu’à mettre les trois listes (personnes_salaires_plus_de_3000, personnes_prime_plus_de_250 et personnes_prime_6_pourcents) dans une liste puis renvoyer le résultat grâce au mot-clé return.
return [personnes_salaires_plus_de_3000, personnes_prime_plus_de_250, personnes_prime_6_pourcents]
star Points importants
-
On utilise les boucles pour parcourir des listes en utilisant des indices pour accéder aux éléments.
-
Pour ajouter un élément dans une liste, on utilise la méthode
append.
personnes = ["Stallman", "Torvalds", "Perlis", "Turing", "VomNeumann",
"Iverson", "Boole", "Hamming", "Knuth", "Ritchie", "Thompson"]
salaires = [1500, 4700, 1500, 3800, 890, 4200, 480, 395, 1710, 1300, 3900]
primes = [190, 0, 117, 100, 500, 60, 0, 150, 0, 100, 180]
# Votre code ici 👇def statistiques_salaires(personnes: list,
salaires: list,
primes: list) -> list:
personnes_salaires_plus_de_3000 = []
for index in range(len(personnes)):
if salaires[index] >= 3000:
personnes_salaires_plus_de_3000.append(personnes[index])
personnes_prime_plus_de_250 = []
for index in range(len(personnes)):
if primes[index] >= 250:
personnes_prime_plus_de_250.append(personnes[index])
personnes_prime_6_pourcents = []
for index in range(len(personnes)):
if (primes[index] / salaires[index]) >= 6/100:
personnes_prime_6_pourcents.append(personnes[index])
return [personnes_salaires_plus_de_3000, personnes_prime_plus_de_250, personnes_prime_6_pourcents]Console
Un instant...
Résultats
Test avec les données de l'entreprise
personnes = ["Stallman", "Torvalds", "Perlis", "Turing", "VomNeumann",
"Iverson", "Boole", "Hamming", "Knuth", "Ritchie", "Thompson"]
salaires = [1500, 4700, 1500, 3800, 890, 4200, 480, 395, 1710, 1300, 3900]
primes = [190, 0, 117, 100, 500, 60, 0, 150, 0, 100, 180]
assert statistiques_salaires(personnes, salaires, primes) == [['Torvalds', 'Turing', 'Iverson', 'Thompson'], ['VomNeumann'], ['Stallman', 'Perlis', 'VomNeumann', 'Hamming', 'Ritchie']], f"Le résultat ne correspond pas aux statistiques attendues par le comptable."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 :










