Baccalauréat — Épreuve pratique — 2026 — NSI
Épreuve pratique NSI 2026 — Sujet 07 : simulation coccinelles et pucerons
Sujet
Épreuve pratique de NSI, session 2026 — sujet n°07 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é.
Coccinelles et pucerons
Les coccinelles jouent un rôle essentiel dans la régulation naturelle des pucerons, dont elles sont les principaux prédateurs. Dans une exploitation de tomates sous serre, un producteur est confronté à une prolifération de pucerons. Afin de limiter l'usage de traitements chimiques, il choisit une solution de lutte biologique consistant à introduire des coccinelles.
Il souhaite disposer d'un modèle numérique simplifié permettant d'étudier l'évolution de la population de coccinelles, leur consommation de pucerons, leur reproduction et leur mortalité.
Le fichier coccinelles.py contient :
- une classe
Coccinelledont les objets possèdent les attributs :age: âge de la coccinelle (en jours) ;esperance_de_vie: durée de vie maximale (en jours) ;sexe: sexe de la coccinelle ("male"ou"femelle") ;niv_nutrition: nombre de jours consécutifs durant lesquels la coccinelle s'est suffisamment nourrie ;
- une fonction
evolution(population, nb_proies)simulant l'évolution de l'écosystème sur une journée.
Rappel : le module random permet de générer des valeurs aléatoires.
random.randint(a, b)renvoie un entier aléatoire compris entreaetbinclus.random.random()renvoie un nombre flottant aléatoire compris entre 0 inclus et 1 exclu.
Question 1. On souhaite observer le comportement du modèle sur une courte période. Créer une population initiale contenant 3 coccinelles (2 femelles et 1 mâle), toutes âgées de 10 jours et ayant un niveau de nutrition de 2. Le nombre initial de pucerons est fixé à 200. Écrire une séquence d'instructions (utilisant une boucle) permettant de simuler l'évolution de ce petit écosystème sur 5 jours consécutifs, en appelant la fonction evolution. Afficher le nombre de coccinelles et de pucerons à la fin de chaque journée.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Question 2. Écrire une fonction simulation_simple(population, nb_proies) qui automatise ce processus sur une durée maximale de 30 jours. Cette fonction doit s'interrompre prématurément si la population de coccinelles ou de pucerons tombe à zéro. Elle doit renvoyer un triplet (tuple) contenant : le nombre final de coccinelles, le nombre final de pucerons, et le nombre de jours effectivement simulés. Tester cette fonction en créant une population initiale identique à la question précédente face à 1000 pucerons.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Question 3. Écrire la documentation et les commentaires de la méthode chasser.
Après une première analyse des résultats, le producteur se rend compte que le modèle actuel présente des limites biologiques importantes :
- le modèle suppose que les coccinelles peuvent se reproduire dès leur naissance, alors qu'en réalité, la reproduction n'est possible qu'à partir de 20 jours de vie ;
- le modèle ne tient pas compte des conséquences mortelles d'un manque de nourriture. Lorsqu'une coccinelle atteint un niveau de nutrition de 0, elle a en réalité 1 chance sur 3 (environ 33 % de probabilité) de ne pas survivre à la journée.
Question 4. Modifier les méthodes reproduction et a_survecu de la classe Coccinelle afin d'y intégrer ces deux nouvelles règles biologiques (la maturité sexuelle et l'impact mortel du manque de nourriture). Tester à nouveau la simulation globale pour observer les changements.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Fichier fourni : coccinelles.py
import random
class Coccinelle:
def __init__(self, sexe, age, niv_nutrition):
self.age = age
self.esperance_de_vie = random.randint(200, 350)
self.sexe = sexe
self.niv_nutrition = niv_nutrition
def chasser(self, nb_proies, nb_coccinelles):
if nb_coccinelles == 0:
return nb_proies
proies_par_cocci = nb_proies / nb_coccinelles
if proies_par_cocci > 20:
consomme = random.randint(12, 20)
elif proies_par_cocci > 10:
consomme = random.randint(8, 15)
else:
consomme = random.randint(3, 8)
consomme = min(consomme, nb_proies)
if consomme >= 10:
self.niv_nutrition += 1
else:
self.niv_nutrition = max(0, self.niv_nutrition - 1)
return nb_proies - consomme
def reproduction(self):
"""
Une femelle avec un niveau de nutrition >= 2 engendre exactement
deux descendants : un mâle et une femelle.
"""
descendants = []
if self.sexe == "femelle" and self.niv_nutrition >= 2:
descendants.append(Coccinelle("male", 0, 0))
descendants.append(Coccinelle("femelle", 0, 0))
self.niv_nutrition = 0
return descendants
def a_survecu(self):
"""
Met à jour l'âge de la coccinelle et indique si elle est encore en vie.
"""
self.age = self.age + 1
return self.age < self.esperance_de_vie
def __repr__(self):
return f"Coccinelle {self.sexe}, âge: {self.age}/{self.esperance_de_vie}, niv_nutrition: {self.niv_nutrition}"
def evolution(population, nb_proies):
"""
Simule une journée dans l'écosystème :
- chasse des coccinelles
- reproduction
- vieillissement et mortalité
- croissance des pucerons
population est une liste d'instances de la classe Coccinelle
nb_proies est un entier indiquant le nombre de proies
Cette fonction renvoie un couple (population_suivante, nouveau_nb_proies) indiquant
la nouvelle population à la fin de la journée et le nombre de proies.
"""
population_suivante = []
nouveau_nes = []
nb_coccinelles = len(population)
for coccinelle in population:
nb_proies = coccinelle.chasser(nb_proies, nb_coccinelles)
if coccinelle.a_survecu():
population_suivante.append(coccinelle)
nouveau_nes += coccinelle.reproduction()
# Croissance naturelle des pucerons (augmentation de 20% par jour)
nb_proies = int(nb_proies * 1.2)
# Ajout des nouveau-nés en fin de journée
population_suivante += nouveau_nes
return population_suivante, nb_proies
#############################################################################
# Écrire ci-dessous le code pour les questions de l'énoncé #
#############################################################################Corrigé
Créez un compte gratuit : votre première correction est offerte.