Aller au contenu

Sujet n°32

Sujet original

Pour télécharger l'énoncé original, cliquer ici.

Exercice n°1

Écrire une fonction min_et_max() qui prend en paramètre un tableau de nombres tab non vide, et qui renvoie la plus petite et la plus grande valeur du tableau sous la forme d’un dictionnaire à deux clés 'min' et 'max'.

Les tableaux seront représentés sous forme de listes Python.

L’utilisation des fonctions natives min, max et sorted, ainsi que la méthode sort n’est pas autorisée.

Ne pas oublier d’ajouter au corps de la fonction une documentation et une ou plusieurs assertions pour vérifier les pré-conditions.

Exemples

>>> min_et_max([0, 1, 4, 2, -2, 9, 3, 1, 7, 1])
{'min': -2, 'max': 9}

>>> min_et_max([0, 1, 2, 3]) 
{'min': 0, 'max': 3}

>>> min_et_max([3]) 
{'min': 3, 'max': 3}

>>> min_et_max([1, 3, 2, 1, 3]) 
{'min': 1, 'max': 3}

>>> min_et_max([-1, -1, -1, -1, -1]) 
{'min': -1, 'max': -1}
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def min_et_max(tab):
    """
    tab - tableau de nombres
    Sortie: dict, dictionnaire tel que :
            - les clefs sont 'min' et 'max'
            - les valeurs associées sont respectivement le plus petit et
            le plus grand des éléments de tab.
    """
    assert isinstance(tab, list) and len(tab) != 0, "Le paramètre doit être un tableau non vide"
    dico = {'min': tab[0], 'max': tab[0]}
    for elt in tab:
        if elt < dico['min']:
            dico['min'] = elt
        if elt > dico['max']:
            dico['max'] = elt
    return dico


if __name__ == '__main__':
    # Exemples de l'énoncé
    print(min_et_max([0, 1, 4, 2, -2, 9, 3, 1, 7, 1]) == {'min': -2, 'max': 9})
    print(min_et_max([0, 1, 2, 3]) == {'min': 0, 'max': 3})
    print(min_et_max([3]) == {'min': 3, 'max': 3})
    print(min_et_max([1, 3, 2, 1, 3]) == {'min': 1, 'max': 3})
    print(min_et_max([-1, -1, -1, -1, -1]) == {'min': -1, 'max': -1})

    # Exemples supplémentaires
    print(min_et_max([3, 2, 1]) == {'min': 1, 'max': 3})
    print(min_et_max([5, -5]) == {'min': -5, 'max': 5})

Exercice n°2

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ètre pos est correct.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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és par valeurs croissantes en commençant par pique, puis coeur, carreau et trèfle. """ 
        # A compléter 

    def get_carte(self, pos): 
        """ Renvoie la carte qui se trouve à la position pos (entier compris entre 0 et 51). """ 
        # A compléter

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
Commentaires sur le code original

Pour télécharger l'original du fichier à compléter, cliquer ici.

Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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és par valeurs croissantes en commençant par pique, puis coeur, carreau et trèfle. """
        self.contenu = [ Carte(couleur, valeur) for couleur in range(1, 5) for valeur in range(1, 14) ]

    def get_carte(self, pos):
        """ Renvoie la carte qui se trouve à la position pos (entier compris entre 0 et 51). """
        assert isinstance(pos, int) and 0 <= pos < 4*13, 'La valeur doit être un entier entre 0 et 51'
        return self.contenu[pos]



if __name__ == '__main__':
    # Exemples de l'énoncé
    jeu = Paquet_de_cartes()
    carte1 = jeu.get_carte(20)
    print(carte1.get_valeur() == '8')
    print(carte1.get_couleur() == 'coeur')

    carte2 = jeu.get_carte(0)
    print(carte2.get_valeur() == 'As')
    print(carte2.get_couleur() == 'pique')

    #carte3 = jeu.get_carte(52)