class Voiture(object) :
'''Classe définissant une voiture à partir de ses caractéristiques (marque, modèle, couleur).
Un objet, instance de cette classe, possède plusieurs méthodes :
get_Position() : renvoie la position da voiture, tuple (x, y)
get_Couleur() : renvoie la couleur de la voiture
set_Couleur
Demarre() : mets en route le moteur
Avance() : l'objet avance
Recule() : l'objet recule
TourneGauche() : l'objet tourne à gauche
TourneDroite() : l'objet tourne à droite'''
def __init__(self, marque, modele, couleur):
'''Méthode dédiée, constructeur de la classe'''
from random import randint
self.__marque = marque
self.__modele = modele
self.__couleur = couleur.capitalize()
self.__position = (randint(0,40),randint(0,40)) # position de départ aléatoire
self.__orientation = 'E' # véhicule orientée par défaut vers l'Est
self.__etat_moteur = False # véhicule avec moteur éteint
def set_Couleur(self, nouvelle_couleur):
'''Méthode publique, change la couleur de la voiture en nouvelle_couleur'''
assert isinstance(nouvelle_couleur, str), "La nouvelle couleur doit être définie comme une chaine de caractères."
self.__couleur = nouvelle_couleur.capitalize()
def get_Couleur(self):
'''Méthode publique, renvoie la couleur de la voiture'''
return self.__couleur
def get_Marque(self) :
'''Méthode publique, renvoie la marque de la voiture'''
return self.__marque
def get_Modele(self) :
'''Méthode publique, renvoie le modèle de la voiture'''
return self.__modele
def get_Position(self):
'''Méthode publique, renvoie la position de la voiture : tuple (x, y)'''
return self.__position
def __set_Position(self, position):
'''Méthode privée, affecte la position de la voiture : tuple (x, y)'''
self.__position = position
def get_Orientation(self):
'''Méthode publique, renvoie l'orientation de la voiture.'''
return self.__orientation
def __set_Orientation(self, orientation):
'''Méthode privée, affecte l'orientation de la voiture : 'N', 'S', 'O' ou 'E'.'''
self.__orientation = orientation
def demarre(self) :
'''Fait démarrer le moteur de la voiture.'''
if not self.__etat_moteur :
self.__etat_moteur = True
else :
print('Le moteur est déjà allumé.')
def avance(self):
'''Fait avancer la voiture d'une case.'''
if self.__etat_moteur :
mouvements = {'O' : (-1, 0), # déplacement en x et y en fonction de l'orientation
'E' : (1, 0),
'N' : (0, -1),
'S' : (0, 1)}
x, y = self.get_Position()
dx, dy = mouvements[self.get_Orientation()]
self.__set_Position((x + dx, y + dy))
else :
print("Le moteur n'est pas démarré.")
def recule(self):
'''Fait reculer la voiture d'une case.'''
if self.__etat_moteur :
mouvements = {'E' : (1, 0), # déplacement en x et y en fonction de l'orientation
'O' : (-1, 0),
'N' : (0, -1),
'S' : (0, 1)}
x, y = self.get_Position()
dx, dy = mouvements[self.get_Orientation()]
self.__set_Position((x - dx, y - dy))
else :
print("Le moteur n'est pas démarré.")
def tourneGauche(self):
'''Fait tourner la voiture à gauche : changement d'orientation et avancement d'une case.'''
if self.__etat_moteur :
change = {'N' : 'O',
'O' : 'S',
'S' : 'E',
'E' : 'N'}
self.__set_Orientation(change[self.get_Orientation()])
self.Avance()
else :
print("Le moteur n'est pas démarré.")
def tourneDroite(self):
'''Fait tourner la voiture à droite : changement d'orientation et avancement d'une case.'''
if self.__etat_moteur :
change = {'N' : 'E',
'O' : 'N',
'S' : 'O',
'E' : 'S'}
self.__set_Orientation(change[self.get_Orientation()])
self.Avance()
else :
print("Le moteur n'est pas démarré.")
def __str__(self):
'''Méthode dédiée, affiche des données de l'objet.'''
affichage = 'Marque : ' + self.get_Marque() + '\nModèle : ' + self.get_Modele() + '\nCouleur : ' + self.get_Couleur()
x, y = self.get_Position()
return affichage