Robot
This commit is contained in:
59
Robots/Modele/Aspirateur.py
Normal file
59
Robots/Modele/Aspirateur.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
from RobotMobile import RobotMobile
|
||||||
|
|
||||||
|
class Aspirateur:
|
||||||
|
def __init__(self, marque, puissance):
|
||||||
|
self.marque = marque
|
||||||
|
self.puissance = puissance
|
||||||
|
|
||||||
|
@property
|
||||||
|
def marque(self):
|
||||||
|
return self._marque
|
||||||
|
|
||||||
|
@marque.setter
|
||||||
|
def marque(self, value):
|
||||||
|
if isinstance(value, str) and value:
|
||||||
|
self._marque = value
|
||||||
|
else:
|
||||||
|
print("Erreur : la marque doit être une chaîne non vide.")
|
||||||
|
self._marque = "Inconnu"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def puissance(self):
|
||||||
|
return self._puissance
|
||||||
|
|
||||||
|
@puissance.setter
|
||||||
|
def puissance(self, value):
|
||||||
|
if isinstance(value, int) and value > 0:
|
||||||
|
self._puissance = value
|
||||||
|
else:
|
||||||
|
print("Erreur : la puissance doit être un entier positif.")
|
||||||
|
self._puissance = 1000
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"Aspirateur {self.marque}, puissance={self.puissance}W"
|
||||||
|
|
||||||
|
|
||||||
|
# --- Aspirateur Robot ---
|
||||||
|
class AspirateurRobot(Aspirateur, RobotMobile):
|
||||||
|
def __init__(self, marque, puissance, distance_max):
|
||||||
|
# Initialisation RobotMobile avec type "Aspirateur robot"
|
||||||
|
RobotMobile.__init__(self, robot_type="Aspirateur robot", orientation="NORD", statut=1, abscisse=0, ordonnee=0)
|
||||||
|
Aspirateur.__init__(self, marque, puissance)
|
||||||
|
self.distance_max = distance_max
|
||||||
|
self._distance_parcourue = 0 # pour suivre le parcours
|
||||||
|
|
||||||
|
@property
|
||||||
|
def distance_max(self):
|
||||||
|
return self._distance_max
|
||||||
|
|
||||||
|
@distance_max.setter
|
||||||
|
def distance_max(self, value):
|
||||||
|
if isinstance(value, (int, float)) and value > 0:
|
||||||
|
self._distance_max = value
|
||||||
|
else:
|
||||||
|
print("Erreur : distance_max doit être positive.")
|
||||||
|
self._distance_max = 100
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return (super(RobotMobile, self).__str__() + f"\nMarque : {self.marque}\n"
|
||||||
|
f"Puissance : {self.puissance}W")
|
||||||
69
Robots/Modele/Robot.py
Normal file
69
Robots/Modele/Robot.py
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
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]
|
||||||
31
Robots/Modele/RobotMobile.py
Normal file
31
Robots/Modele/RobotMobile.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
from Robot import Robot
|
||||||
|
|
||||||
|
class RobotMobile(Robot):
|
||||||
|
def __init__(self, robot_type="Générique", orientation="NORD", statut=1, abscisse=0, ordonnee=0):
|
||||||
|
super().__init__(robot_type, orientation, statut)
|
||||||
|
self._abscisse = abscisse
|
||||||
|
self._ordonnee = ordonnee
|
||||||
|
|
||||||
|
@property
|
||||||
|
def abscisse(self):
|
||||||
|
return self._abscisse
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ordonnee(self):
|
||||||
|
return self._ordonnee
|
||||||
|
|
||||||
|
def afficher_position(self):
|
||||||
|
return f"Position : [abs={self.abscisse} ; ord={self.ordonnee}]"
|
||||||
|
|
||||||
|
def avancer(self, m):
|
||||||
|
if self.orientation == "EST":
|
||||||
|
self._abscisse += m
|
||||||
|
elif self.orientation == "OUEST":
|
||||||
|
self._abscisse -= m
|
||||||
|
elif self.orientation == "NORD":
|
||||||
|
self._ordonnee += m
|
||||||
|
elif self.orientation == "SUD":
|
||||||
|
self._ordonnee -= m
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return super().__str__() + f"\n{self.afficher_position()}"
|
||||||
30
Robots/main.py
Normal file
30
Robots/main.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
from Modele.Robot import Robot
|
||||||
|
from Modele.RobotMobile import RobotMobile
|
||||||
|
from Modele.Aspirateur import Aspirateur, AspirateurRobot
|
||||||
|
|
||||||
|
def test_robot():
|
||||||
|
print("=== Test Robot ===")
|
||||||
|
r = Robot()
|
||||||
|
print(r)
|
||||||
|
r.tourner(1)
|
||||||
|
print("Après rotation :", r)
|
||||||
|
|
||||||
|
def test_robot_mobile():
|
||||||
|
print("\n=== Test RobotMobile ===")
|
||||||
|
rm = RobotMobile(robot_type="Mobile")
|
||||||
|
print(rm)
|
||||||
|
rm.avancer(5)
|
||||||
|
print("Après avancée de 5 :", rm)
|
||||||
|
|
||||||
|
def test_aspirateur_robot():
|
||||||
|
print("\n=== Test AspirateurRobot ===")
|
||||||
|
ar = AspirateurRobot(marque="Dyson", puissance=7500, distance_max=100)
|
||||||
|
print(ar)
|
||||||
|
ar.avancer(10)
|
||||||
|
ar.tourner(-1)
|
||||||
|
print("Après déplacement et rotation :", ar)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
test_robot()
|
||||||
|
test_robot_mobile()
|
||||||
|
test_aspirateur_robot()
|
||||||
Reference in New Issue
Block a user