Livret d'épargne
Un livret d'Ă©pargne permet de placer de l'argent et d'obtenir des intĂ©rĂȘts.
Un livret se caractérise par :
- son plafond, qui ne doit pas ĂȘtre dĂ©passĂ© par les sommes dĂ©posĂ©es;
- son taux d'intĂ©rĂȘt, qui permet de calculer chaque mois les intĂ©rĂȘts qui se rajoutent au solde.
Dans cet exercice, on souhaite créer une classe Livret, décrite ci-dessous :
classDiagram
class Livret {
-float depot
+float taux
+float plafond
-float interets
informe_solde()
depose()
retire()
applique_interets()
}
L'attribut interets permet de stocker le cumul des intĂ©rĂȘts gĂ©nĂ©rĂ©s par le livret.
On initialise une instance de cette classe en renseignant le dĂ©pĂŽt initial, le taux d'intĂ©rĂȘt et le montant du plafond.
Seuls des dĂ©pĂŽts et retraits Ă lâeuro prĂšs, pas de centimes, sont autorisĂ©s.
>>> livret_1 = Livret(500., 0.01, 20000.)
Cette classe possÚde les méthodes décrites ci-dessous :
La méthode informe_solde
La mĂ©thodeinforme_solde renvoie le solde du livret, qui est la somme du montant dĂ©posĂ© et des intĂ©rĂȘts.
Exemple : si on a dĂ©posĂ© \(500\) euros, le solde sera de \(500\) euros. Si cela gĂ©nĂšre \(7,5\) euros d'intĂ©rĂȘts, le solde sera alors de \(507,5\) euros.
>>> livret_1 = Livret(500., 0.015, 20000.)
>>> livret_1.informe_solde()
500.0
>>> livret_1.applique_interets()
>>> livret_1.informe_solde()
507.5
La méthode depose
La méthodedepose prend en paramÚtre le montant du dépot, modifie l'attribut depot si cela n'entraine pas le dépassement du plafond, et renvoie True si l'opération est effectuée et False sinon.
Exemple : si on a déposé \(5000\) euros, il est possible de déposer \(1000\) euros. Mais avec un plafond fixé à \(20000\), on ne pourra pas déposer \(16000\) euros.
>>> livret_1 = Livret(5000., 0.02, 20000.)
>>> livret_1.depose(1000.)
True
>>> livret_1.informe_solde()
6000.0
>>> livret_1.depose(16000)
False
La méthode retire
La méthoderetire prend en paramÚtre le montant du retrait souhaité, modifie les attributs depot et interets si cela n'entraine pas un solde négatif, et renvoie True si l'opération est effectuée et False sinon.
L'argent est prĂ©levĂ© d'abord sur les intĂ©rĂȘts, puis sur l'argent dĂ©posĂ©.
Exemples :
- Si on a déposé \(5000\) euros au départ, il est possible de retirer \(1000\) euros, mais pas \(7000\) car le solde deviendrait négatif.
- Si un dĂ©pĂŽt de \(1000\) euros a gĂ©nĂ©rĂ© \(100\) euros d'intĂ©rĂȘts et que l'on souhaite retirer \(400\) euros, alors il restera \(700\) euros dans le depĂŽt et rien dans les intĂ©rĂȘts.
>>> livret_1 = Livret(5000., 0.02, 20000.)
>>> livret_1.applique_interets()
>>> livret_1.informe_solde()
5100.0
>>> livret_1.retire(1000.)
True
>>> livret_1.informe_solde()
4100.0
>>> livret_1.retire(7000.)
False
La méthode applique_interets
La mĂ©thode applique_interets calcule les intĂ©rĂȘts du livret et les additionne aux intĂ©rĂȘts dĂ©jĂ calculĂ©s. (Les intĂ©rĂȘts ne sont pas pris en compte pour le plafond, qui ne concerne que les sommes dĂ©posĂ©es.)
Les intĂ©rĂȘts sont calculĂ©s sur le solde (dĂ©pĂŽt et intĂ©rĂȘts dĂ©jĂ perçus) et arrondis au deuxiĂšme chiffre aprĂšs la virgule.
round ?
La fonction intégrée round permet d'arrondir un nombre donné.
La fonction prend en paramÚtres un nombre à virgule ainsi qu'un nombre de décimales et renvoie la valeur arrondie à ce nombre de décimales prÚs.
>>> round(65.1745, 2)
65.17
>>> round(65.1795, 1)
65.2
Exemple : si on a dĂ©posĂ© \(5000\) euros au dĂ©part, un taux de \(0.015\), (soit \(1,5\%\)), ajouterait \(75\) euros d'intĂ©rĂȘts. Une deuxiĂšme application du taux gĂ©nĂšrerait \(76,125\) euros d'intĂ©rĂȘts, arrondis Ă \(76,12\), pour un gain total de \(151,12\) euros.
>>> livret_1 = Livret(5000., 0.015, 20000.)
>>> livret_1.applique_interets()
>>> livret_1.informe_solde()
5075.0
>>> livret_1.applique_interets()
>>> livret_1.informe_solde()
5151.12
Comparaison de nombres flottants
Lorsqu'on écrit a = x ou x est un nombre réel, la valeur de a enregistrée en machine est une valeur approchée de x (quelques fois la valeur exacte).
Cette valeur approchĂ©e a la forme d'un nombre flottant (le type float en Python). En consĂ©quence, alors que des calculs et des comparaisons peuvent ĂȘtre effectuĂ©s de maniĂšre exacte sur des rĂ©els, ils ne le sont que de maniĂšre approchĂ©e sur leur reprĂ©sentation en machine.
On peut donc obtenir par exemple, avec a = x et b = y, l'expression a == b évaluée à True alors que x et y sont différents.
C'est pourquoi les tests ne vérifient pas l'égalité des résultats et des valeurs attendues mais leur proximité.
Ainsi, on peut vérifier que \(\sqrt{2} \approx 1,414214\) en faisantassert abs(1.414214 - sqrt(2)) < 1e-6. Ce test vérifie que les deux valeurs sont proches à \(10^{-6}\) prÚs.
Compléter la classe ci-dessous :
graph TB
a
# Tests(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)