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