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)
|