Pour moderniser son fonctionnement, le zoo "Safari Park" souhaite développer un logiciel de gestion. Ce logiciel doit permettre de suivre les animaux, les enclos, et les visiteurs du zoo. En tant que développeur, vous êtes chargé de concevoir une application en Python, utilisant la programmation orientée objet (POO), pour modéliser ces éléments et automatiser certaines tâches de gestion.
Vous allez devoir créer plusieurs classes pour représenter les différents acteurs du zoo : les animaux, les enclos, les visiteurs et le zoo lui-même. L'application doit permettre d'effectuer des opérations telles que l'ajout et le retrait d'animaux, le calcul de statistiques (âge moyen, poids total), et la gestion des tarifs des visiteurs.
Attributs :
nom (str) : Nom de l'animal.espece (str) : Espèce de l'animal.age (int) : Âge de l'animal.pays_origine (str) : Pays d'origine de l'animal.poids (float, en kg) : Poids de l'animal.Méthodes :
__init__ pour initialiser un animal avec ses caractéristiques.__repr__ pour afficher un animal sous la forme :Animal(nom='Nom', espece='Espèce', age=Âge, pays_origine='Pays', poids=Poids kg).Attributs :
nom (str) : Nom de l'enclos.taille (int, en m²) : Taille de l'enclos.animaux (liste d'objets Animal) : Liste des animaux présents dans l'enclos.Méthodes :
__init__ pour initialiser un enclos avec un nom et une taille.ajouter_animal(animal) pour ajouter un animal à l'enclos.retirer_animal(nom) pour retirer un animal de l'enclos par son nom.age_moyen() pour calculer et renvoyer l'âge moyen des animaux présents dans l'enclos.poids_total() pour renvoyer le poids total des animaux de l'enclos.__repr__ pour afficher un enclos sous la forme :Enclos(nom='Nom', taille=Taille m², animaux=[Liste des animaux]).Attributs :
nom (str) : Nom du visiteur.age (int) : Âge du visiteur.enclos_visites (liste de noms d'enclos visités) : Liste des enclos visités par le visiteur (vide par défaut).tarif (float) : Tarif de l'entrée pour le visiteur, calculé automatiquement selon son âge :
Méthodes :
__init__ pour initialiser un visiteur avec son nom, son âge, et calculer automatiquement son tarif.visiter_enclos(enclos) pour ajouter l'enclos visité à la liste.__repr__ pour afficher le visiteur sous la forme :Visiteur(nom='Nom', age=Âge, enclos_visites=[Liste des enclos], tarif=Tarif €).Attributs :
nom (str) : Nom du zoo.enclos (liste d'objets Enclos) : Liste des enclos du zoo.visiteurs (liste d'objets Visiteur) : Liste des visiteurs du zoo, vide lors de la création du zoo.Méthodes :
__init__ pour initialiser un zoo avec un nom.ajouter_enclos(enclos) pour ajouter un enclos au zoo.ajouter_visiteur(visiteur) pour ajouter un visiteur.supprimer_visiteur(visiteur) pour supprimer un visiteur.__repr__ pour afficher le zoo sous la forme :Zoo(nom='Nom', enclos=[Liste des enclos], visiteurs=[Liste des visiteurs]).id_visiteur qui permet d'associer un visiteur à un nombre entier unique. Il doit être affecté automatiquement à chaque nouveau visiteur, et on doit être sûr que 2 visiteurs n'ont jamais le même id.Zoo qui calcule le montant total des recettes générées par les visiteurs présents dans le zoo.Enclos une méthode qui vérifie si l'enclos a assez de place en fonction du nombre d'animaux. On considère que chaque animal doit pouvoir occuper un certain espace en m² (par exemple 200 m² par zèbre ou 500 m² par éléphant, etc.), cet espace doit donc être défini dans la classe Animal. Si l'enclos est plein, l'ajout d'un nouvel animal doit échouer (et un message doit avertir).Zoo qui affiche le nombre total de visiteurs ayant visité un enclos donné.