Informations

Date limite 27/08/2025 17:00:00
Limite de soumission Pas de limite

Se connecter

[Q4] Qui sera le prochain Picsou?

Supposons qu'on vous donne un fichier contenant une liste de personnes avec des montants d'argent qu'ils ont gagnés à différents moments au cours du dernier mois. Le fichier a le format suivant :

Sophie 4000
Lisa 4500
Claude 10
Sophie 200
Sophie 5000
Lisa 3000
Stéphanie 300
Stéphanie 300 # à ignorer
Lisa 2000
Jean 50
Jean $50
Claude 30
Lisa 300
Stéphanie 6000

Dans ce format, chaque ligne consiste d'un nom d'une personne suivi par un nombre entier positif (0 ou plus) représentant le montant qu'elle a gagné à un certain moment. Si un même nom se trouve sur plusieurs lignes différentes, il s'agit de la même personne qui a gagné plusieurs montants. La somme de tous ces montants est le montant total que cette personne a gagné.

Écrivez une fonction argent_personne(nom_fichier) qui lit le fichier des gains par personne et retourne un dictionnaire associant chaque personne avec le montant qu'il a gagné au total (y compris si c'est 0).

Si le fichier est vide ou si le fichier n'existe pas, la fonction renvoie un dictionnaire vide. Si le fichier n'est pas vide, vous ne devez considérer que les lignes qui respectent exactement le format donné, c'est-à-dire un nom (une chaîne de caractères) suivi par un espace et un nombre entier positif. Les lignes qui ne suivent pas ce schéma doivent être ignorées. Dans l'exemple, les lignes Stéphanie 300 # à ignorer et Jean $50 sont à ignorer car elles ne respectent pas exactement le format souhaité.

Pour notre exemple, pour Sophie la somme est 9200 (4000+200+5000), pour Lisa 9800 (4500+3000+2000+300), pour Claude 40 (10+30) pour Jean 50 et pour Stéphanie 6300 (300+6000). Donc pour ce fichier, la fonction doit retourner le dictionnaire :

{'Sophie': 9200, 'Lisa': 9800, 'Claude': 40, 'Stéphanie': 6300, 'Jean': 50}

Conseils :

  • Commencez par un code qui fait l'hypothèse que toutes les lignes sont dans le format correct. Un code qui marche mais qui ne gère pas les lignes incorrectes recevra déjà quelques points.
  • Faites une fonction auxiliaire pour vérifier la validité d'une ligne donnée, et ignorez les lignes invalides.

Question 1: L'argent

Écrivez le corps de la fonction argent_personne ci-dessous :

Question 2: Zone de test

Insérez votre code de test optionnel ci-dessous. Vous pouvez utiliser assert et print pour tester votre programme. Votre code de test sera exécuté à la suite de la définition de votre fonction (il ne faut pas la recopier ici). Ce code test sera ignoré lors de l'évaluation. Il vous sert seulement à tester votre propre code.

Exemple: