Sujet n° 12 · Session 2026 · 1 heure
Le refuge pour renards
Un refuge recueille des renards blessés ou orphelins et suit leur poids. Le candidat écrit une classe, l'affiche proprement, puis découvre qu'un import CSV laisse des nombres sous forme de chaînes.
- Programmation objet
- Méthode __str__
- Fichier CSV
- Types et conversions
- Débogage
Mise en situationRenards et refuge
Un renard est défini par un identifiant entier, un nom (chaîne de caractères), un poids en kilogrammes (flottant) et une date d'arrivée (chaîne au format AAAA-MM-JJ). Un refuge est défini par son nom, son adresse postale et la liste des objets Renard qu'il héberge.
Les données sont dans le fichier donnees_renards.csv, avec le point-virgule comme séparateur :
| id | nom | poids | date_arrivee |
|---|---|---|---|
| 101 | Zorro | 6.5 | 2023-01-15 |
| 102 | Roxy | 5.8 | 2023-02-10 |
| 103 | Filou | 7.2 | 2023-03-05 |
Les trois premières lignes du fichier fourni.
Toutes les cellules de cette page partagent le même Python, comme un notebook : une fonction écrite à une question sert aux suivantes. Maj + Entrée exécute la cellule.
Pour l'examinateur
L'extrait imprimé dans l'énoncé (Édgar, César, Gérard, Sybille) ne correspond pas au fichier fourni (Zorro, Roxy, Filou…). Le candidat peut s'en étonner.
Question 1Le constructeur
Le fichier gestion_refuge.py comporte des éléments à compléter pour définir la classe Renard. Écrire le code du constructeur __init__ de la classe Renard.
Appel professeur
À demander au candidat
- Dans
__init__, quel est le rôle deself? Pourquoi ne pas écrire simplementpoids = poids? - Quelle différence entre un attribut et une méthode ? Donnez un exemple de chacun dans votre code.
identifiantest-il un paramètre ou un argument ? Quand parle-t-on d'argument ?
Les conversions int et float peuvent se faire ici ou à l'import (question 3) : les deux sont acceptables si le candidat reste cohérent.
Question 2Présenter un renard
Écrire le code de la méthode __str__ de la classe Renard qui renvoie une chaîne de caractères qui présente l'animal sous le format précis : "Renard ID [id] - [Nom] (Arrivé le [date_arrivee])".
Tester ensuite cette classe en instanciant un renard dans une variable renard1 ayant pour identifiant 200, se nommant Oscar, ayant un poids de 5.1 kg et étant arrivé le 1er janvier 2026. Afficher les informations de cette instance dans la console.
Appel professeur
À demander au candidat
print(renard1)appelle__str__implicitement. Qu'afficherait-il si l'on supprimait cette méthode ?
Le format est imposé au caractère près, espaces et parenthèses compris.
Résultats attendus
print(renard1)- Renard ID 200 - Oscar (Arrivé le 2026-01-01)
Question 3Une importation trompeuse
Le fichier gestion_refuge.py comporte une classe Refuge. Une méthode importer_donnees y est pré-écrite pour lire le fichier CSV et peupler le refuge.
L'exécution de la méthode importer_donnees provoque une erreur logique lors de l'utilisation ultérieure des données, notamment lors de la manipulation du poids et de l'identifiant des renards. Identifier la source de cette erreur dans la lecture des données brutes, proposer une correction du code de la méthode, puis tester cette correction en instanciant le refuge « SOS Goupil » (situé « 12 rue de la Forêt ») et en y important le fichier donnees_renards.csv.
Appel professeur
À demander au candidat
- Si
poidsvaut'5.8', que donnerenard.poids < 6.0? Pourquoi Python ne signale-t-il rien au moment de l'import ? csv.DictReaderlit chaque ligne comme un dictionnaire. Comment obtenir la valeur de la colonnenom?- Que garantit
with open(...)? Que se passerait-il sanswithsi une erreur survenait en pleine lecture ?
L'erreur est silencieuse à l'import : les valeurs restent des chaînes et l'erreur n'apparaît qu'à la comparaison avec 6.0.
Résultats attendus
- Code fourni, à l'analyse
TypeError:'<'entrestretfloat- Renards importés
- 30
Question 4Surveiller la corpulence
Le refuge utilise ces données pour surveiller la santé des animaux. Les vétérinaires considèrent qu'un renard est peu corpulent si son poids est strictement inférieur à 6.0 kg. La classe Refuge dispose de deux méthodes nommées lister_peu_corpulents et pourcentage_peu_corpulents pour effectuer ce suivi.
Exécuter les deux méthodes d'analyse de la corpulence sur l'instance de votre refuge. Justifier le pourcentage obtenu en isolant et en affichant le nombre de renards peu corpulents par rapport au nombre total de renards hébergés.
Appel professeur
À demander au candidat
- Réécrivez la liste en compréhension de
lister_peu_corpulentsavec une boucleforclassique. - Pourquoi le test
len(self.liste_renards) == 0est-il indispensable danspourcentage_peu_corpulents?
lister_peu_corpulents renvoie une liste d'objets Renard : c'est sa longueur qu'il faut comparer au nombre total.
Résultats attendus
- Peu corpulents
- 15 sur 30
- Pourcentage
- 50,0 %
Le fichier du candidat
Le jour de l'épreuve, le candidat travaille dans un seul fichier. Ce bouton rassemble vos cellules dans l'ordre, telles qu'elles sont à l'écran, en un gestion_refuge.py à ouvrir dans votre éditeur habituel.