Exercices pour débuter☘
Les exercices ci-dessous ont pour but de vous familiariser avec la programmation orientée objet.
Prenez l'habitude de revenir vous entraîner régulièrement avec ces exercices tout au long de l'année. Ils sont généralement accompagnés de pistes et de leur solution pour vous permettre de progresser.
Avant de vous précipiter sur ces solutions dès la première difficulté, n'oubliez pas les conseils suivants :
- Avez-vous bien fait un schéma au brouillon pour visualiser le problème posé ?
- Avez-vous essayé de rédiger un algorithme en français, avec vos propres mots, avant de vous lancer dans la programmation sur machine ?
- Avez-vous utilisé des affichages intermédiaires, des
print()
, pour visualiser au fur et à mesure le contenu des variables ? - Avez-vous testé le programme avec les propositions de tests données dans l'exercice ?
- Avez-vous testé le programme avec de nouveaux tests, différents de ceux proposés ?
Rappels
- Chaque programme Python doit être sauvegardé sous forme de fichier texte
avec l'extension
.py
.
Enregistrez ce fichier dans le dossier[D01-POO]
avec le nom donné à l'exercice :ProgD01.51.py
,ProgD01.52.py
, etc... - Pour exécuter ce programme, il suffit de le sauvegarder puis d'appuyer
sur la touche
[F5]
.
ProgD01.51☘
Programmez et testez la classe Duree
étudiée en travaux dirigés.
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 |
|
ProgD01.52☘
Définir une classe Livre en Python dont les attributs sont titre
,
auteur
et prix
.
Pour cela :
- Écrire sa documentation.
- Programmer le constructeur
__init__()
.
Attention, le prix doit être un nombre. Ajouter une assertion pour le vérifier. - Programmer le destructeur
__del__()
. - Programmer la méthode
est_titre()
qui renvoieTrue
si le titre passé en paramètre est celui du livre,False
sinon. - Programmer la méthode
est_moins_cher()
qui renvoieTrue
si le Livre passé en paramètre est vendu plus cher que celui sur lequel s'applique la méthode,False
sinon.
Exemples de tests
>>> d = Livre("a", "b", "tarif")
AssertionError: Le prix tarif doit être de type nombre (float ou int)
>>> d = Livre("a", "b", 12)
>>> d.est_titre("a")
True
>>> d.est_titre("b")
False
>>> e = Livre("b", "c", 14)
>>> d.est_moins_cher(e)
True
>>> e.est_moins_cher(d)
False
Une piste - un code à compléter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
ProgD01.53☘
Définir une classe Angle en Python dont l'unique attribut angle
est un
entier, sa valeur par défaut étant 0
. Cette classe représente un angle
mesuré en degrés.
- Programmer le constructeur
__init__()
.
Attention, l'angle doit être un entier. Ajouter une assertion pour le vérifier. - Surcharger les méthodes d'affichage
__repr__()
et__str__()
. Les deux méthodes fournissent le même affichage du type"127°"
. -
Programmer une méthode
normaliser()
qui modifie la valeur de l'angle de sorte que celui-ci soit toujours compris entre0
et359
. Appeler ensuite cette méthode dans le constructeur pour normaliser l'entier saisit en paramètre lors de l'instanciation d'un nouvel angle.Exemple de test
Si l'initialisation est :
alors la valeur d'angle est modifiée automatiquement et l'affichage donnera :>>> a = Angle(970)
>>> a 250°
-
Programmer la méthode
get_angle()
qui renvoie la valeur de l'attributangle
de l'instance sur laquelle la méthode est appliquée. -
Programmer la méthode
set_angle()
qui modifie par effet de bord la valeur de l'attributangle
sur lequel la méthode est appliquée.Exemple de test
>>> a = Angle(143) >>> a.set_angle(225) >>> print(a) 225°
Attention
Ne pas oublier de normaliser la valeur de l'angle...
>>> a = Angle(143) >>> a.set_angle(1225) >>> print(a) 145°
-
Surcharger les opérateurs d'addition et de soustraction.
Attention, la mesure de l'Angle
renvoyée soit être comprise entre0
et359
. -
Ajouter un programme de test dans le
main
.
Une piste - un code à compléter
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 |
|
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 47 48 49 50 51 52 53 |
|