Aller au contenu

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.

  1. Donner une implémentation de la classe Music.

  2. Ajouter une méthode hasAuthor qui teste si un artiste spécifié fait partie des artistes de la musique en question.

  3. 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.
    
  4. 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.

  1. Compléter la classe Paquet_de_cartes suivante en respectant les spécifications données dans les chaînes de documentation.

  2. Ajouter une assertion dans la méthode get_carte afin de vérifier que le paramètre pos 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]