Aller au contenu

Sujet n°5

Sujet original

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

Exercice n°1

Écrire une fonction rechercheMinMax() qui prend en paramètre un tableau de nombres entiers non triés tab, 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.

Exemples

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

>>> tableau = []
>>> resultat = rechercheMinMax(tableau)
>>> resultat
{'min': None, 'max': None}
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
def rechercheMinMax(tab):
    """
    tab - tableau de nombres non triés
    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.
    """
    if len(tab) == 0:
        return {'min': None, 'max': None}
    else:
        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__':
    tableau = [0, 1, 4, 2, -2, 9, 3, 1, 7, 1]
    resultat = rechercheMinMax(tableau)
    print(resultat)

    tableau = []
    resultat = rechercheMinMax(tableau)
    print(resultat)

Exercice n°2

On dispose d’un programme permettant de créer un objet de type PaquetDeCarte, selon les éléments indiqués dans le code ci-dessous.

Compléter ce code aux endroits indiqués par ??? puis ajouter des assertions dans l’initialiseur de Carte, ainsi que dans la méthode getCarteAt().

 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
class Carte:
    """Initialise Couleur (entre 1 a 4), et Valeur (entre 1 a 13)"""
    def __init__(self, c, v):
        self.Couleur = c
        self.Valeur = v

    """Renvoie le nom de la Carte As, 2, ... 10, 
       Valet, Dame, Roi"""
    def getNom(self):
        if ( self.Valeur > 1 and self.Valeur < 11):
            return str( self.Valeur)
        elif self.Valeur == 11:
            return "Valet"
        elif self.Valeur == 12:
            return "Dame"
        elif self.Valeur == 13:
            return "Roi"
        else:
            return "As"

    """Renvoie la couleur de la Carte (parmi pique, coeur, carreau, trefle"""
    def getCouleur(self):
        return ['pique', 'coeur', 'carreau', 'trefle' ][self.Couleur - 1]

class PaquetDeCarte:
    def __init__(self):
        self.contenu = []

    """Remplit le paquet de cartes"""
    def remplir(self):
    ??? = [ ??? for couleur in range(1, ???) for valeur in range( 1, ???)]

    """Renvoie la Carte qui se trouve à la position donnée"""
    def getCarteAt(self, pos):
        if 0 <= pos < ??? :
            return ???

Exemple

>>> unPaquet = PaquetDeCarte() 
>>> unPaquet.remplir() 
>>> uneCarte = unPaquet.getCarteAt(20) 
>>> print(uneCarte.getNom() + " de " + uneCarte.getCouleur()) 
8 de coeur
Commentaires sur le code original

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

Le sujet original ne donne pas d'indication précise sur les assertions à réaliser. Il faut se rappeler qu'elles ont pour but de faire respecter les préconditions de la fonction.

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
43
44
45
46
class Carte:
    """Initialise Couleur (entre 1 a 4), et Valeur (entre 1 a 13)"""
    def __init__(self, c, v):
        assert isinstance(c, int) and 1 <= c <= 4, 'La couleur doit être un entier entre 1 et 4'
        assert isinstance(v, int) and 1 <= c <= 13, 'La valeur doit être un entier entre 1 et 13'
        self.Couleur = c
        self.Valeur = v

    """Renvoie le nom de la Carte As, 2, ... 10,
       Valet, Dame, Roi"""
    def getNom(self):
        if ( self.Valeur > 1 and self.Valeur < 11):
            return str( self.Valeur)
        elif self.Valeur == 11:
            return "Valet"
        elif self.Valeur == 12:
            return "Dame"
        elif self.Valeur == 13:
            return "Roi"
        else:
            return "As"

    """Renvoie la couleur de la Carte (parmi pique, coeur, carreau, trefle"""
    def getCouleur(self):
        return ['pique', 'coeur', 'carreau', 'trefle' ][self.Couleur - 1]

class PaquetDeCarte:
    def __init__(self):
        self.contenu = []

    """Remplit le paquet de cartes"""
    def remplir(self):
        self.contenu = [ Carte(couleur, valeur) for couleur in range(1, 3) for valeur in range(1, 14)]

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


if __name__ == '__main__':
    unPaquet = PaquetDeCarte() 
    unPaquet.remplir() 
    uneCarte = unPaquet.getCarteAt(20) 
    print(uneCarte.getNom() + " de " + uneCarte.getCouleur() == '8 de coeur')