PORTÉE D'EXÉCUTION DU CODE :
exécution par cellule (chaque cellule s'exécute indépendamment des autres)
CODE ÉLÈVE
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é #
#############################################################################
CODE ENSEIGNANT
SOLUTION POSSIBLE