Robot solution
This commit is contained in:
100
Robots/solution/M06_TP02 - Test_Robots.py
Normal file
100
Robots/solution/M06_TP02 - Test_Robots.py
Normal file
@@ -0,0 +1,100 @@
|
||||
from Modele.Aspirateur import Aspirateur, AspirateurRobot
|
||||
from Modele.Robot import Robot
|
||||
from Modele.RobotMobile import RobotMobile
|
||||
|
||||
r1 = Robot()
|
||||
r2 = Robot("Mécanique")
|
||||
r3 = Robot("Electrique")
|
||||
|
||||
print("------------------------------------")
|
||||
print("------- TP : PREMIERE PARTIE -------")
|
||||
print("------------------------------------")
|
||||
|
||||
print("-------- CREATION DE ROBOTS --------")
|
||||
print(r1)
|
||||
print('_'*36)
|
||||
print(r2)
|
||||
print('_'*36)
|
||||
print(r3)
|
||||
print('_'*36)
|
||||
print("Nombre de robots créés au total : ", Robot.nb_robot)
|
||||
print("------------------------------------")
|
||||
|
||||
print("--------- TEST SETTER TYPE ---------")
|
||||
r4 = Robot("T") # Doit afficher un message d'erreur
|
||||
print(r4) # Doit afficher un type Générique
|
||||
print('_'*36)
|
||||
r2.robot_type = "K" # Doit afficher un message d'erreur
|
||||
print(r2) # Le type ne doit pas avoir été modifié
|
||||
print("------------------------------------")
|
||||
|
||||
print("--------- TEST STATUT ---------")
|
||||
r2.statut = 2
|
||||
print(r2)
|
||||
print('_'*36)
|
||||
r2.statut = 5 # Doit afficher un message d'erreur
|
||||
print(r2) # Le statut ne doit pas avoir été modifié
|
||||
print("------------------------------------")
|
||||
|
||||
print("--------- TEST TOURNER ---------")
|
||||
r3.tourner(1)
|
||||
print(r3)
|
||||
print('_'*36)
|
||||
r3.tourner(-1)
|
||||
print(r3)
|
||||
print('_'*36)
|
||||
r3.tourner(12) # Doit afficher un message d'erreur
|
||||
print(r3) # Le robot ne doit pas avoir tourné
|
||||
print("------------------------------------")
|
||||
|
||||
print("------------------------------------")
|
||||
print("------- TP : DEUXIEME PARTIE -------")
|
||||
print("------------------------------------")
|
||||
|
||||
r5 = RobotMobile()
|
||||
r6 = RobotMobile(ord=4)
|
||||
r7 = RobotMobile(robot_type="Electronique", abs=2, ord=5)
|
||||
|
||||
print("---- CREATION DE ROBOTS MOBILES ----")
|
||||
print(r5)
|
||||
print('_'*36)
|
||||
print(r6)
|
||||
print('_'*36)
|
||||
print(r7)
|
||||
print('_'*36)
|
||||
print("Nombre de robots créés au total : ", Robot.nb_robot)
|
||||
print("------------------------------------")
|
||||
|
||||
print("--- DEPLACEMENT DE ROBOTS MOBILES --")
|
||||
print(r5.afficher_position())
|
||||
r5.avancer(4)
|
||||
print(r5.afficher_position())
|
||||
print('_'*36)
|
||||
print(r6.afficher_position())
|
||||
r6.tourner(1)
|
||||
r6.avancer(4)
|
||||
print(r6.afficher_position())
|
||||
print('_'*36)
|
||||
print(r7.afficher_position())
|
||||
r7.tourner(-1)
|
||||
r7.avancer(6)
|
||||
print(r7.afficher_position())
|
||||
print("------------------------------------")
|
||||
|
||||
print("------------------------------------")
|
||||
print("------- TP : TROISIEME PARTIE ------")
|
||||
print("------------------------------------")
|
||||
|
||||
print("----- CREATION D'UN ASPIRATEUR -----")
|
||||
a1 = Aspirateur('Rowenta', 4500)
|
||||
print(a1)
|
||||
print("------------------------------------")
|
||||
|
||||
print("--- CREATION D'UN ASPIRATEUR ROBOT --")
|
||||
ar1 = AspirateurRobot('Rowenta', 4500, 115)
|
||||
print(ar1)
|
||||
print("------------------------------------")
|
||||
|
||||
print("--- TEST PARCOURS --")
|
||||
ar1.parcours(10, 15)
|
||||
print("------------------------------------")
|
||||
80
Robots/solution/Modele/Aspirateur.py
Normal file
80
Robots/solution/Modele/Aspirateur.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from Modele.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):
|
||||
self._marque = value
|
||||
|
||||
@property
|
||||
def puissance(self):
|
||||
return self._puissance
|
||||
|
||||
@puissance.setter
|
||||
def puissance(self, value):
|
||||
self._puissance = value
|
||||
|
||||
def __str__(self):
|
||||
return "Aspirateur {}, puissance={}W".format(self._marque, self._puissance)
|
||||
|
||||
|
||||
class AspirateurRobot(RobotMobile, Aspirateur):
|
||||
def __init__(self, marque, puissance, distance_max):
|
||||
Aspirateur.__init__(self, marque, puissance)
|
||||
RobotMobile.__init__(self, robot_type="Aspirateur Robot")
|
||||
self.distance_max = distance_max
|
||||
|
||||
@property
|
||||
def distance_max(self):
|
||||
return self._distance_max
|
||||
|
||||
@distance_max.setter
|
||||
def distance_max(self, value):
|
||||
self._distance_max = value
|
||||
|
||||
def __str__(self):
|
||||
return RobotMobile.__str__(self) + "\nPuissance : {}W".format(self._puissance)
|
||||
|
||||
def parcours(self, abs_max, ord_max):
|
||||
grid = [['-' for i in range(abs_max)] for j in range(ord_max)]
|
||||
grid[0][0] = "*"
|
||||
# Se diriger vers l'Est
|
||||
while self.orientation != 'EST':
|
||||
self.tourner(1)
|
||||
distance = 0
|
||||
|
||||
while distance < self._distance_max and self.abs < abs_max and self.ord < ord_max:
|
||||
self.avancer(1)
|
||||
distance += 1
|
||||
grid[self.ord][self.abs] = '*'
|
||||
# En bout de ligne on va vers le SUD puis l'OUEST
|
||||
if self._abs == abs_max - 1:
|
||||
self.tourner(-1)
|
||||
if distance < self._distance_max and self.abs < abs_max and self.ord < ord_max:
|
||||
self.avancer(1)
|
||||
distance += 1
|
||||
grid[self.ord][self.abs] = '*'
|
||||
self.tourner(-1)
|
||||
# En début de ligne on va vers le SUD puis l'EST
|
||||
if self._abs == 0:
|
||||
self.tourner(1)
|
||||
if distance < self._distance_max and self.abs < abs_max and self.ord < ord_max:
|
||||
self.avancer(1)
|
||||
distance += 1
|
||||
grid[self.ord][self.abs] = '*'
|
||||
self.tourner(1)
|
||||
|
||||
# Affichage du parcours
|
||||
for i in range(len(grid)):
|
||||
for j in range(len(grid[i])):
|
||||
print(grid[i][j], end='')
|
||||
print()
|
||||
60
Robots/solution/Modele/Robot.py
Normal file
60
Robots/solution/Modele/Robot.py
Normal file
@@ -0,0 +1,60 @@
|
||||
import random
|
||||
import string
|
||||
|
||||
|
||||
class Robot:
|
||||
nb_robot = 0
|
||||
ORIENTATIONS = ["NORD", "EST", "SUD", "OUEST"]
|
||||
STATUTS = {1: "En service", 2: "Hors Service", 3: " En réparation"}
|
||||
DEFAULT_TYPE = "Générique"
|
||||
|
||||
def __init__(self, robot_type=DEFAULT_TYPE):
|
||||
self.robot_type = robot_type
|
||||
self._numero_serie = ''.join([random.choice(string.ascii_uppercase) for i in range(2)]) \
|
||||
+ ("%4d" % random.randint(0, 1000000000))
|
||||
self._orientation = Robot.ORIENTATIONS[0]
|
||||
self._statut = 1
|
||||
|
||||
Robot.nb_robot += 1
|
||||
|
||||
@property
|
||||
def robot_type(self):
|
||||
return self._robot_type
|
||||
|
||||
@robot_type.setter
|
||||
def robot_type(self, value):
|
||||
if len(value) >= 2:
|
||||
self._robot_type = value
|
||||
else:
|
||||
self._robot_type = Robot.DEFAULT_TYPE
|
||||
print("Le type du robot doit comporter au minimum 2 caractères.")
|
||||
|
||||
@property
|
||||
def numero_serie(self):
|
||||
return self._numero_serie
|
||||
|
||||
@property
|
||||
def orientation(self):
|
||||
return self._orientation
|
||||
|
||||
@property
|
||||
def statut(self):
|
||||
return self.statut
|
||||
|
||||
@statut.setter
|
||||
def statut(self, value):
|
||||
if value in Robot.STATUTS.keys():
|
||||
self._statut = value
|
||||
else:
|
||||
self._robot_type = Robot.DEFAULT_TYPE
|
||||
print("Statut invalide ! Valeurs acceptées : ", Robot.STATUTS)
|
||||
|
||||
def __str__(self):
|
||||
return "Robot {} - {}\nStatut : {}\nOrientation : {}".format(self._numero_serie, self._robot_type, Robot.STATUTS[self._statut],
|
||||
self._orientation)
|
||||
|
||||
def tourner(self, value):
|
||||
if value in [1, -1]:
|
||||
self._orientation = Robot.ORIENTATIONS[(Robot.ORIENTATIONS.index(self._orientation) + value)%len(Robot.ORIENTATIONS)]
|
||||
else:
|
||||
print("Un robot peut tourner de 1 ou de -1.")
|
||||
32
Robots/solution/Modele/RobotMobile.py
Normal file
32
Robots/solution/Modele/RobotMobile.py
Normal file
@@ -0,0 +1,32 @@
|
||||
from Modele.Robot import Robot
|
||||
|
||||
|
||||
class RobotMobile(Robot):
|
||||
def __init__(self, robot_type='Générique', abs=0, ord=0):
|
||||
Robot.__init__(self, robot_type)
|
||||
self._abs = abs
|
||||
self._ord = ord
|
||||
|
||||
@property
|
||||
def abs(self):
|
||||
return self._abs
|
||||
|
||||
@property
|
||||
def ord(self):
|
||||
return self._ord
|
||||
|
||||
def afficher_position(self):
|
||||
return 'Position : [abs={} ; ord={}]'.format(self.abs, self.ord)
|
||||
|
||||
def avancer(self, value):
|
||||
if self.orientation == "EST":
|
||||
self._abs += value
|
||||
elif self.orientation == "OUEST":
|
||||
self._abs -= value
|
||||
elif self.orientation == "NORD":
|
||||
self._ord += value
|
||||
else:
|
||||
self._ord -= value
|
||||
|
||||
def __str__(self):
|
||||
return Robot.__str__(self) + "\n" + self.afficher_position()
|
||||
100
Robots/solution/Test_Robots.py
Normal file
100
Robots/solution/Test_Robots.py
Normal file
@@ -0,0 +1,100 @@
|
||||
from Modele.Aspirateur import Aspirateur, AspirateurRobot
|
||||
from Modele.Robot import Robot
|
||||
from Modele.RobotMobile import RobotMobile
|
||||
|
||||
r1 = Robot()
|
||||
r2 = Robot("Mécanique")
|
||||
r3 = Robot("Electrique")
|
||||
|
||||
print("------------------------------------")
|
||||
print("------- TP : PREMIERE PARTIE -------")
|
||||
print("------------------------------------")
|
||||
|
||||
print("-------- CREATION DE ROBOTS --------")
|
||||
print(r1)
|
||||
print('_'*36)
|
||||
print(r2)
|
||||
print('_'*36)
|
||||
print(r3)
|
||||
print('_'*36)
|
||||
print("Nombre de robots créés au total : ", Robot.nb_robot)
|
||||
print("------------------------------------")
|
||||
|
||||
print("--------- TEST SETTER TYPE ---------")
|
||||
r4 = Robot("T") # Doit afficher un message d'erreur
|
||||
print(r4) # Doit afficher un type Générique
|
||||
print('_'*36)
|
||||
r2.robot_type = "K" # Doit afficher un message d'erreur
|
||||
print(r2) # Le type ne doit pas avoir été modifié
|
||||
print("------------------------------------")
|
||||
|
||||
print("--------- TEST STATUT ---------")
|
||||
r2.statut = 2
|
||||
print(r2)
|
||||
print('_'*36)
|
||||
r2.statut = 5 # Doit afficher un message d'erreur
|
||||
print(r2) # Le statut ne doit pas avoir été modifié
|
||||
print("------------------------------------")
|
||||
|
||||
print("--------- TEST TOURNER ---------")
|
||||
r3.tourner(1)
|
||||
print(r3)
|
||||
print('_'*36)
|
||||
r3.tourner(-1)
|
||||
print(r3)
|
||||
print('_'*36)
|
||||
r3.tourner(12) # Doit afficher un message d'erreur
|
||||
print(r3) # Le robot ne doit pas avoir tourné
|
||||
print("------------------------------------")
|
||||
|
||||
print("------------------------------------")
|
||||
print("------- TP : DEUXIEME PARTIE -------")
|
||||
print("------------------------------------")
|
||||
|
||||
r5 = RobotMobile()
|
||||
r6 = RobotMobile(ord=4)
|
||||
r7 = RobotMobile(robot_type="Electronique", abs=2, ord=5)
|
||||
|
||||
print("---- CREATION DE ROBOTS MOBILES ----")
|
||||
print(r5)
|
||||
print('_'*36)
|
||||
print(r6)
|
||||
print('_'*36)
|
||||
print(r7)
|
||||
print('_'*36)
|
||||
print("Nombre de robots créés au total : ", Robot.nb_robot)
|
||||
print("------------------------------------")
|
||||
|
||||
print("--- DEPLACEMENT DE ROBOTS MOBILES --")
|
||||
print(r5.afficher_position())
|
||||
r5.avancer(4)
|
||||
print(r5.afficher_position())
|
||||
print('_'*36)
|
||||
print(r6.afficher_position())
|
||||
r6.tourner(1)
|
||||
r6.avancer(4)
|
||||
print(r6.afficher_position())
|
||||
print('_'*36)
|
||||
print(r7.afficher_position())
|
||||
r7.tourner(-1)
|
||||
r7.avancer(6)
|
||||
print(r7.afficher_position())
|
||||
print("------------------------------------")
|
||||
|
||||
print("------------------------------------")
|
||||
print("------- TP : TROISIEME PARTIE ------")
|
||||
print("------------------------------------")
|
||||
|
||||
print("----- CREATION D'UN ASPIRATEUR -----")
|
||||
a1 = Aspirateur('Rowenta', 4500)
|
||||
print(a1)
|
||||
print("------------------------------------")
|
||||
|
||||
print("--- CREATION D'UN ASPIRATEUR ROBOT --")
|
||||
ar1 = AspirateurRobot('Rowenta', 4500, 115)
|
||||
print(ar1)
|
||||
print("------------------------------------")
|
||||
|
||||
print("--- TEST PARCOURS --")
|
||||
ar1.parcours(10, 15)
|
||||
print("------------------------------------")
|
||||
Reference in New Issue
Block a user