Exercices adaptés des sources suivantes :
- Cours de Frédéric Mandon sous licence Creative Commons BY NC SA, http://www.maths-info-lycee.fr/.
- Cours de Cédric Baubeau/Maxime Charpignon/Franck Duffaud/Gilles Dalles - www.math93.com.
POO - Exercices
Jeu de cartes ( travail sur papier )
Des cercles
- Écrire une classe
Cercle. Les objets construits à partir de cette classe seront des cercles de tailles variées.Attributs : rayon ( initialisé à l'instanciation d'un objet, donc passé en argument au constructeur )
Méthodes :
surface(): renvoie la surface du cercleperimetre(): renvoie le périmétre du cercleest_plus_grand(autre_cercle): renvoieTruesi le rayon de self est plus grand que celui d'un autre objet de typeCercle
- Instancier ensuite 5 objets de type
Cercle( de rayon quelconque ). - Afficher la surface et le périmètre du premier et du dernier cercle.
- Comparer la taille du deuxième et du quatrième cercle.
Affichage d'un objet
- Reprendre la classe
Cercleprécédente, créer un objet quelconque, et essayer de l'afficher dans la console Python : comment interpréter l'affichage obtenu ? - une méthode spéciale existe, qui se substitue automatiquement au
print"classique" à partir du moment où elle a été définie : la méthode__str__:class Cercle: def __init__(self,...): """Constructeur""" ... def __str__(self): """Méthode d'affichage""" ... return ...Cette méthode doit renvoyer une chaîne de caractères représentant les informations ( souvent, les attributs de l'objet ) à afficher.
Écrire le code d'une méthode
__str__pour la classe Cercle, qui permettra d'afficher le rayon d'un objet de type classe :
c1 = Cercle(21)
print(c1)
>>> rayon = 21
Des chiens.
Écrire une classe Chien.
Attributs :
- nom
- points_sante : initialisé à la valeur par défaut 100 à l'instanciation
- aboiement : chaîne de caractères
Méthodes :
mordre(autre_chien): fait baisser les points de santé d’un autre objet de typeChienmanger(): augmente les points de santégrogner(): renvoie « Grrr... » + son aboiementmachouiller(chaîne): renvoie la chaîne passée en argument mélangée aléatoirement
Pour tester la classe :
- Instancier quelques chiens ayant des noms et des aboiements différents
- faire manger un des chiens et vérifier que ses points de santé ont bien augmenté
- faire grogner un chien
- faire mâchouiller à un chien une chaîne de caractères quelconque
- faire mordre un chien par un autre et vérifier que ses points de santé ont bien baissé.
Une horloge.
Deux versions à cet exercice :
- une orientée "réflexion" où on vous donne un problème à résoudre
- une beaucoup plus guidée où on vous présente les différentes taches à réaliser.
La première version est sans doute la plus délicate, mais en même temps la plus formatrice; si vous ne voyez vraiment pas comment résoudre le problème, passez à la deuxième version, plus simple...
1ère version "Résolution de problème"
Compléter le code ci-dessous de façon à obtenir l'affichage de l'heure seconde après seconde :
13 : 59 : 55
13 : 59 : 56
13 : 59 : 57
13 : 59 : 58
13 : 59 : 59
14 : 0 : 0
14 : 0 : 1
14 : 0 : 2
14 : 0 : 3
14 : 0 : 4
14 : 0 : 5
14 : 0 : 6
....
2ème version "Résolution guidée"
Créer une classe Horloge, destinée à afficher l'heure.
Attributs :
- heures
- minutes
- secondes
Les valeurs initiales des attributs devront être passées en argument au constructeur lors de l'instanciation de l'objet de type Horloge.
Méthodes :
ticTac(): cette méthode augmente l’horloge d’une seconde, et gère également le changement de minutes et d'heureaffiche(): cette méthode affiche l'heure sous la forme hh:mm:ss
Instancier un objet de type Horloge, et pour "animer" l'affichage de l'heure seconde après seconde, utiliser le code suivant :
Des grandes boîtes et des petites boîtes et des moyennes boîtes...( révisions Première ! )
1.1. Écrire une classe Boite; cette classe a pour attributs :
- longueur
- largeur
- hauteur
Ces trois attributs sont dans un ordre décroissant : longueur ≥ largeur ≥ hauteur.
Cette classe a pour méthodes :
volume(), qui comme son nom l’indique donne le volume d’une boiterentreDans(autre_boite), qui renvoieTruesi l’objetBoiterentre dans autre_boite.
2. Créer aléatoirement une liste d’une vingtaine de boîtes ( on peut choisir des dimensions entre 1 et 50 ). Ces boîtes peuvent être rangées comme éléments d'une liste.
3. A l’aide d’un algorithme glouton, donner une suite de boîtes aussi grande que possible qui rentrent les unes dans les autres.
Indication : il faudra au préalable trier la liste des boîtes par volume décroissant. Pour cela, il peut être intéressant dans un but de révision, d'utiliser un des algorithmes à connaître, à savoir le tri par insertion ou le tri par sélection.
Réfléchissez ensuite à l'algorithme glouton à utiliser pour trouver la suite la plus grande de boîtes imbriquées...