70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
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]
|