Devoir sur la Programmation Orientée Objet
Exercice 1 (7 points)
La classe Music
représente une musique décrite par un titre, une liste d'artistes et une durée en secondes.
-
Donner une implémentation de la classe
Music
. -
Ajouter une méthode
hasAuthor
qui teste si un artiste spécifié fait partie des artistes de la musique en question. -
Proposer une représentation textuelle d'un objet de la classe
Music
avec la méthode str.Par exemple, on pourra afficher une musique sous le format:
Rasputin par Boney M dure 4 minutes et 29 secondes.
-
Comme un même morceau peut apparaître plusieurs fois parmi les musiques, on génère un identifiant unique au format chaîne de caractères à partir du morceau.
On appelle cet identifiant le MID (Music IDentifier). Modifier votre classe Music pour tenir compte de l'ajout de cet identifiant. Écrire une méthode
doublon
qui permettra de tester si deux morceaux sont en fait identiques.
Corrigé
class Music:
def __init__(self,titre,artistes,duree,MID):
self.titre=titre
self.artistes=artistes
self.duree=duree
self.MID=MID
def hasauthor(self,artist):
return artist in self.artistes
def __str__(self):
ar=''
for a in self.artistes:
ar=ar+" et "+a
return self.titre+" par "+a[3:]+" dure "+str(self.duree//60)+"minutes et"+str(self.duree%60)+"secondes"
def doublon(self,other):
return self.MID==other.MID
Exercice 2 (5 points)
On dispose d’une classe Carte
permettant de créer des objets modélisant des cartes à jouer.
-
Compléter la classe
Paquet_de_cartes
suivante en respectant les spécifications données dans les chaînes de documentation. -
Ajouter une assertion dans la méthode
get_carte
afin de vérifier que le paramètrepos
est correct.
class Carte:
def __init__(self, c, v):
""" Initialise les attributs couleur (entre 1 et 4), et valeur (entre 1 et 13). """
self.couleur = c
self.valeur = v
def get_valeur(self):
""" Renvoie la valeur de la carte : As, 2, ..., 10, Valet, Dame, Roi """
valeurs = ['As','2', '3', '4', '5', '6', '7', '8', '9', '10', 'Valet', 'Dame', 'Roi']
return valeurs[self.valeur - 1]
def get_couleur(self):
""" Renvoie la couleur de la carte (parmi pique, coeur, carreau, trèfle). """
couleurs = ['pique', 'coeur', 'carreau', 'trèfle']
return couleurs[self.couleur - 1]
class Paquet_de_cartes:
def __init__(self):
""" Initialise l'attribut contenu avec une liste des 52 objets Carte possibles rangées par valeurs croissantes en commençant par pique, puis coeur, carreau et tréfle. """
# À compléter (sur votre copie)
def get_carte(self, pos):
""" Renvoie la carte qui se trouve Ă la position pos (entier compris entre 0 et 51). """
# À compléter (sur votre copie)
Exemple :
>>> jeu = Paquet_de_cartes()
>>> carte1 = jeu.get_carte(20)
>>> print(carte1.get_valeur() + " de " + carte1.get_couleur())
8 de coeur
>>> carte2 = jeu.get_carte(0)
>>> print(carte2.get_valeur() + " de " + carte2.get_couleur())
As de pique
>>> carte3 = jeu.get_carte(52)
AssertionError : paramètre pos invalide
Corrigé
class Carte:
def __init__(self, c, v):
""" Initialise les attributs couleur (entre 1 et 4), et valeur (entre 1 et 13). """
self.couleur = c
self.valeur = v
def get_valeur(self):
""" Renvoie la valeur de la carte : As, 2, ..., 10, Valet, Dame, Roi """
valeurs = ['As','2', '3', '4', '5', '6', '7', '8', '9', '10', 'Valet', 'Dame', 'Roi']
return valeurs[self.valeur - 1]
def get_couleur(self):
""" Renvoie la couleur de la carte (parmi pique, coeur, carreau, trèfle). """
couleurs = ['pique', 'coeur', 'carreau', 'trèfle']
return couleurs[self.couleur - 1]
class Paquet_de_cartes:
def __init__(self):
""" Initialise l'attribut contenu avec une liste des 52 objets Carte possibles rangées par valeurs croissantes en commençant par pique, puis coeur, carreau et tréfle. """
self.contenu=[]
for i in range(1,5):
for j in range(1,14):
self.contenu.append(Carte(i,j))
def get_carte(self, pos):
""" Renvoie la carte qui se trouve Ă la position pos (entier compris entre 0 et 51). """
assert pos>len(self.contenu), "paramètre pos invalide"
return self.contenu[pos]