Maths & NSI

Baccalauréat — Épreuve pratique — 2026 — NSI

Épreuve pratique NSI 2026 — Sujet 12 : refuge pour renards, classes et import CSV

Sujet

Épreuve pratique de NSI, session 2026 — sujet n°12 de la banque nationale. Durée : 1 heure, sur ordinateur. Le candidat dispose de l'énoncé et de fichiers de code et de données ; il agit en autonomie et, aux « appels professeur » indiqués, présente son travail à l'examinateur ou le sollicite en cas de difficulté.

Refuge pour renards

Le renard, longtemps considéré comme nuisible, est aujourd'hui de plus en plus protégé pour son rôle dans la régulation de la biodiversité. Afin d'aider à la réhabilitation des individus blessés ou orphelins, un refuge de protection a été construit. La personne en charge de l'infrastructure souhaite réaliser une base de données en CSV et Python pour stocker les informations essentielles sur les renards pris en charge.

Deux entités distinctes sont représentées. La première entité est le Renard. Un renard est défini par un identifiant de type entier, un nom sous forme de chaîne de caractères, un poids en kilogrammes de type flottant, ainsi qu'une date d'arrivée représentée par une chaîne de caractères au format AAAA-MM-JJ. La seconde entité est le Refuge. Un refuge est défini par son nom, son adresse postale, et une liste regroupant les objets de type Renard qu'il héberge.

Toutes les données relatives aux animaux sont fournies dans le fichier donnees_renards.csv, structuré au format CSV avec le point-virgule comme séparateur.

Extrait d'informations fournies dans le fichier donnees_renards.csv (tel qu'il figure dans l'énoncé) :

idnompoidsdate_arrivee
101Édgar6.52023-01-15
102César5.82023-02-10
103Gérard7.22023-03-05
104Sybille4.92024-11-20

Le fichier gestion_refuge.py comporte des éléments à compléter pour définir la classe Renard.

Question 1. Écrire le code du constructeur __init__ de la classe Renard.

Question 2. É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 — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.

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.

Question 3. 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 — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.

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.

Question 4. 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 — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.

Fichiers fournis

Le dossier comporte une version PDF de l'énoncé, le code source de départ gestion_refuge.py et le fichier donnees_renards.csv contenant toutes les données des renards. La bibliothèque csv doit être disponible.

gestion_refuge.py

import csv
 
 
class Renard:
    """
    Classe représentant un renard dans le refuge.
    Attributs : identifiant, nom, poids, date_arrivee.
    """
 
    def __init__(self, identifiant, nom, poids, date_arrivee):
        pass  # Question 1 à compléter
 
    def __str__(self):
        pass  # Question 2 à compléter
 
 
class Refuge:
    """
    Classe représentant le refuge contenant la liste des renards.
    """
 
    def __init__(self, nom, adresse):
        self.nom = nom
        self.adresse = adresse
        self.liste_renards = []
 
    def recueillir(self, un_renard):
        """
        Méthode d'ajout d'un renard au refuge.
        """
        self.liste_renards.append(un_renard)
 
    def lister_peu_corpulents(self):
        """
        Méthode qui renvoie une liste des Renards dont le poids est < 6.0 kg.
        """
        return [renard for renard in self.liste_renards if renard.poids < 6.0]
 
    def pourcentage_peu_corpulents(self):
        """
        Méthode qui renvoie le pourcentage des renards peu corpulents.
        """
        if len(self.liste_renards) == 0:
            return 0.0
        return len(self.lister_peu_corpulents()) / len(self.liste_renards) * 100
 
    def importer_donnees(self, nom_fichier):
        """
        Fonction qui importe les données des renards à partir d'un fichier CSV.
        """
        print(f"Tentative d'importation depuis {nom_fichier}...")
        with open(nom_fichier, 'r', encoding='utf-8') as f:
            lignes = csv.DictReader(f, delimiter=';')
            for ligne in lignes:
                renard = Renard(ligne['id'], ligne['nom'],
                                ligne['poids'], ligne['date_arrivee'])
                self.recueillir(renard)

donnees_renards.csv (début du fichier, 30 renards en tout)

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
104;Kira;4.9;2024-11-20
105;Rouky;6.1;2023-05-12
106;Vixen;5.5;2023-06-01
107;Goupil;7.8;2023-07-18
...

Corrigé

Corrigé réservé aux abonnés Premium.

Créez un compte gratuit : votre première correction est offerte.

Sujet officiel de la banque nationale de sujets 2026 de l'épreuve pratique de NSI (ministère de l'Éducation nationale, sujets.examens-concours.gouv.fr). Corrigé rédigé pour ce site.