Exercices non graphique
Utiliser des classes
Exercices
Nous allons utiliser
le fichier ex1.zip , le dézipper et ouvrir le fichier exercice.py dans votre éditeur python.
Deux classes sont définies, la classe Eleve dont les méthodes sont les suivantes :
__init__(self,nom,prenom) : Le constructeur, nom et prenom sont des chaînes de caractères(string).
donne_nom(self) : Retourne le nom de l'élève sous forme d'une chaîne de caractères.
donne_prenom(self) : Retourne le prénom de l'élève sous forme d'une chaîne de caractères.
affiche_nom(self) : Affiche le nom de l’élève et ne retourne rien.
affiche_prenom(self) : Affiche le nom de l’élève et ne retourne rien.
donne_notes(self) : Retourne la liste des notes de l’élève.
donne_moyenne(self) : Donne la moyenne de l'élève.
ajoute_note(self, note) : Ajoute une note à l'élève.
La classe Classe, elle a pour but de réunir des élèves :
__init__(self) : Constructeur de la classe.
nb_eleves(self) : Donne le nombre d'élèves de la classe.
ajoute_eleve(self, eleve) : Ajoute un élève (instance de la classe Eleve).
donne_eleve(self, nom, prenom) : Retourne l'eleve de nom et prenom donné, si l'eleve n'est pas dans la classe retourne None.
donne_liste_eleve(self) : Retourne une liste contenant les élèves de la classe.
Les variables Anne, Benoit, Claire, Dennis, Mystere, Fabrice contiennent des instances d’Eleve.
Donner le nom d'Anne.
Donner le nom et le prénom de Mystere.
Donner la moyenner de Fabrice.
Ajouter un 0 à Fabrice, et donner sa nouvelle moyenne.
Donner les notes d'Anne.
Créer un élève Messiaen Hector, et donner lui deux notes un 8 et un 4.
classeA et classeB sont deux instances de Classe.
Anne est dans quelle classe ?
Ajouter Messiaen à la classe b.
Donner le nom des élèves de la classe b.
Faire une fonction qui va donner la moyenne d'une classe.
Un élève
Exercices
Un professeur de mathématique veut représenter un élève, il veut retenir le nom, le prenom et ses notes.
Créer une classe Eleve et son constructeur (les notes seront stockées, par exemple, dans un tableau qui au début est vide). Les attributs sont privés.
Créer une méthode nom qui affiche le nom de l'élève.
Créer une méthode prenom qui affiche le prenom de l'élève.
Créer une méthode note qui affiche les notes de l'élève.
Surcharger __str__ pour qu'il donne "Benoit Chirac : 12 - 2 - 20"
Créer une méthode modifie_nom(nouveau_nom) qui modifie le nom de l'élève.
Créer une méthode modifie_prenom(nouveau_prenom) qui modifie le prenom de l'élève.
Créer une méthode ajout(note) qui va ajouter une note à l'élève.
Créer une méthode nb_notes() qui va retourner le nombre de notes.
Créer une méthode moyenne() qui va retourner la moyenne des notes.
Les rationnels
Avant de commencer à écrire la classe, faire la question suivante qui sera très utile plus tard.
Exercices
Coder l'algorithme d'Euclide qui permet d'avoir le PGCD de deux nombres.
Les flottants du python ne permettent pas de stocker de manières exactes certaines fractions du genre \(\frac{1}{3}\) (et même \(\frac{1}{10}\)). Nous allons créer une classe Rationnels pour les rationnels.
Exercices
Combien d’attributs sont nécessaires pour stocker une fraction a/b ?
Coder les méthodes suivantes :
Le constructeur.
L'affichage (par exemple 2/3).
Les comparaisons <, == et >.
Les opérations +,*,-,/ (il faut retourner une instance nouvelle de la classe).
La conversion en double.
Les points
Exercices
Proposer une façons de stocker numériquement un point dans le plan cartésien (plan muni d'un repère). Il faut combien d’attributs ?
Coder les méthodes suivantes :
Le constructeur.
L'affichage des coordonnées cartésiennes.
Une méthode qui donne l'abscisse, une méthode qui donne l'ordonnée.
Surcharger l'opérateur d'égalité et de différence.
Surcharger __getitem__(self,i) qui permettra de récupérer l'abscisse d'un point A en faisant A[0] et l'ordonnée en faisant A[1].
Surcharger __setitem__(self,i,valeur) qui permettra de changer l'absisse et l'ordonnée d'un point. (Ce n'est donc pas de la programmation fonctionnelle.
Faire une fonction auxiliaire distance(point1,point2) qui donne la distance entre point1 et point2 (la formule est vue en seconde pas d'excuses).
Faire une fonction auxiliaire milieu(point1,point2) qui retourne le point milieu entre point1 et point2 (la formule est vue en seconde là aussi, pas d'excuses !).
Pour les matheux : les polynômes
Exercices
On va représenter un polynôme à l'aide de ses coefficients, le constructeur est donné ci-dessous :
p = Polynome(1,-2,0,4) représente x^3 - 2x^2 + 4 par exemple.
Faire une méthode degre qui donne le degré du polynôme (le degré est l'exposant du plus haut degré (pour l'exemple précédent p.degre() = 3).
Faire une méthode image qui donne l'image d'un nombre par un polynôme. (exemple p.image(2) = 2^3 - 2*2^2 + 4 = 4).
Faire une méthode derivee qui va retourner la dérivée d'un polynôme (attention la fonction doit retourner une nouvelle instance de Polynome) p.derivee() = Polynome(3,-4,0).
Surcharger la méthode __str__ pour afficher un polynôme, print(p) = "x^3 - 2x^2 + 4" (malheureusement il n'est pas simple d'afficher des exposants et on doit utiliser le ^).
Faire une méthode derivee_nieme(n) qui va retourner la derivée nieme d'un polynôme (Pensez à la récursion !).
Surcharger l'opérateur d'égalité et de non égalité.
Surcharger l'opérateur d'addition (attention il faut retourner une nouvelle instance) Polynome(1,-2,0,4) + Polynome(1,2,3) = Polynome(1,-1,2,7).
(dur) Surcharger l'opérateur de multiplication, Polynome(1,-2,0,4) * Polynome(1,2,3) = Polynome(1,0,-1,-2,8,12).
Le numéro de sécurité sociale
Le nom, prénom et année ne permet pas d'identifier une personne, pour ça on utilise le numéro de sécurité sociale .
Algorithme
Par Giesesamvitale — CNAMTS - GIE SESAM-Vitale, CC BY 3.0 , Lien
Dans une carte vitale, les nombres ne sont pas au hasard. Voici une version simplifiée :
Le premier numéro est égal à 1 (homme) ou 2(femme).
Les deux chiffres suivants représente les deux derniers chiffres de l'année de naissance (dans l'exemple la personne est née en 1967).
Les deux chiffres suivants représentent le mois de la naissance (ici 05 représente mai).
Les deux chiffres suivants représentent le département de naissance (49 Maine-et-Loire).
Les trois chiffres suivant représentent le code de la commune (qui n'a pas l'air d'exister sur l'exemple).
Les trois suivants représentent le rang de naissance dans le mois et la commune (la personne était le 157 ième naissance en mai 1967 dans la commune mystère.
Les deux nombres suivants sont la clef, elle est égale 97- (reste de la division par 97 du nombre formé des treize premiers chiffres).
Exercices
Coder une classe Nsociale qui a pour but de stocker un numéro de sécurité sociale.
Les méthodes d'interface de la classe seront :
Le constructeur (attention le constructeur doit vérifier la validité du numéro (on vérifira la clef, le sexe et le mois, de 01 à 12. L'utilisateur donnera le numéro entier au constructeur.
Surcharger l'opérateur __str__ qui permet d'afficher le numéro, à l'affichage on utilisera les même séparations que sur une carte vitale.
Surcharger l'opérateur d'égalité.
mois(self) qui donne le mois de naissance.
annee(self) qui donne les deux derniers mois de l'année de naissance.
sexe(self) qui donne le sexe de associé au numéro (par exemple la méthode retourne 0 ou 1 ou "homme" "femme).
Le patient
Pour c'est exercice, on utilisera la classe Date du cours, on la chargera avec import (placer le fichier dans le même répertoire).
Un médecin veut créer une classe pour représenter ses clients, il veut stocker, le nom, le prénom, la date de naissance, le numéro de sécurité sociale, les dates des fois où le patient est venu et la date du prochain rendez vous (éventuellement None si il n'y a pas de rendez vous). (bien sur il y a plus à retenir mais ici on simplifie).
Exercices
Coder une classe Patient qui permet de stocker ses données, à vous de choisir les attributs.
Les méthodes d'interfaces sont :
Le constructeur (qui doit vérifier si le numéro de sécurité sociale est compatible avec la date de naissance.
ajout(self,date) ajoute une date de visite au patient, elle doit effacer la précédente date de rendez vous.
vérifie(self,date) doit retourner un bool, si le patient à rendez vous à cette date alors il doit indiquer true (et false dans le cas contraire).
effectue(self,date) doit conserver la date donné, de plus si la date correspond à la date du rendez vous alors il faut passer celle ci à None.
retard(self) indique si le rendez vous du patient est passé.
Surcharger __str__ pour afficher toutes les informations du patient.
Les patients.
Le médecin veut maintenant faire une classe pour conserver l'ensemble de ses patients, il utilise bien sur la classe précédente.
Exercices
Coder une classe Patients (notez le s) qui permet de stocker ses données, à vous de choisir les attributs.
Les méthodes d'interfaces sont :
Le constructeur __init__(self,liste_patients) qui prend en paramètre une liste d'instances de Patient (éventuellement vide).
ajout(self,patient) ajoute un patient à la liste (sauf si le patient existe déjà, il doit l'indiquer dans ce cas).
donne_rendez_vous(self) doit afficher tous les patients qui ont rendez vous à la date donnée.
Surcharger __len__ pour qu'il indique le nombre de patient.
donne_patient(self,numero) doit retourner le patient qui a pour numéro de sécurité le numéro donné en paramètre (numero est de type entier).
phpMyVisites | Open source web analytics