Files
ENI-Python/Robots/Modele/Robot.py
johanleroy e68e378e7a Robot
2025-09-10 08:51:53 +02:00

70 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import random
import string
class Robot:
orientations_possibles = ["NORD", "EST", "SUD", "OUEST"]
statuts_possibles = {1: "EN SERVICE", 2: "HORS SERVICE", 3: "EN REPARATION"}
nb_robots_crees = 0
def __init__(self, robot_type="Générique", orientation="NORD", statut=1):
self._robot_type = "Générique"
self.robot_type = robot_type # Utilise le setter
self._numero_serie = self._generer_numero_serie()
self._orientation = orientation if orientation in Robot.orientations_possibles else "NORD"
self._statut = statut if statut in Robot.statuts_possibles else 1
Robot.nb_robots_crees += 1
# --- Robot type ---
@property
def robot_type(self):
return self._robot_type
@robot_type.setter
def robot_type(self, value):
if isinstance(value, str) and len(value) >= 2:
self._robot_type = value
else:
print("Erreur : robot_type doit contenir au moins 2 caractères. Valeur par défaut utilisée.")
self._robot_type = "Générique"
# --- Numero de série ---
@property
def numero_serie(self):
return self._numero_serie
def _generer_numero_serie(self):
lettres = ''.join(random.choices(string.ascii_uppercase, k=2))
chiffres = str(random.randint(0, 999999999)).zfill(10)
return lettres + chiffres
# --- Orientation ---
@property
def orientation(self):
return self._orientation
# --- Statut ---
@property
def statut(self):
return self._statut
@statut.setter
def statut(self, value):
if value in Robot.statuts_possibles:
self._statut = value
else:
print(f"Erreur : statut doit être 1, 2 ou 3. Valeur inchangée ({self._statut}).")
# --- Affichage ---
def __str__(self):
return (f"Robot {self.numero_serie} {self.robot_type}\n"
f"Statut : {Robot.statuts_possibles[self.statut]}\n"
f"Orientation : {self.orientation}")
# --- Tourner ---
def tourner(self, direction):
if direction not in [1, -1]:
print("Erreur : direction doit être 1 (horaire) ou -1 (anti-horaire).")
return
idx = Robot.orientations_possibles.index(self._orientation)
self._orientation = Robot.orientations_possibles[(idx + direction) % 4]