# -*- encoding: utf8 -*-

# Modélisation d'un compte bancaire

class CompteBancaire(object):
    """Définition d'un compte bancaire"""
    
    def __init__(self, nom ="Dupont", solde =1000):
        self.nom, self.solde = nom, solde

    def depot(self, somme):
        """
        depot(float somme)--> None
        Ajoute une <somme> au solde du compte
        """
        self.solde += somme

    def retrait(self, somme):
        """
        retrait(float somme) --> None
        Retire, si possible, une <somme> au solde du compte
        """
        if somme <= self.solde:
            self.solde -= somme
        else:
            print("Le solde du compte de {} est insuffisant pour ce retrait.".format(self.nom))

    def affiche(self):
        """
        affiche() --> None
        Affiche le nom du titulaire et le solde du compte
        """
        print("Le solde du compte de {titulaire} est de {solde}.".format(titulaire=self.nom, solde=self.solde))
        

class CompteEpargne(CompteBancaire):
    """ Classe héritée de la classe CompteBancaire"""
    
    def __init__(self, nom ='Dunand', solde =500):
        CompteBancaire.__init__(self, nom, solde)   # invocation du constructeur de la classe mère
        self.taux =0.3                              # taux d'intérêt mensuel par défaut

    def changeTaux(self, taux):
        """
        changeTaux(float taux) --> None
        Modifie le taux d'intéret du compte d'épargne
        """
        self.taux =taux

    def capitalisation(self, nombreMois =6):
        """
        capitalisation(int nombreMois) --> None
        Calcule le solde du compte après <nombreMois> au taux d'épargne et affiche le résultat
        """
        print("Capitalisation sur {nMois} mois au taux mensuel de {pourcentage} %.".\
              format(nMois = nombreMois, pourcentage = self.taux))
        for m in range(nombreMois):
            self.solde = self.solde * (100 +self.taux)/100

# Programme de test :

if __name__ == '__main__':
    
    compte = CompteEpargne('Duvivier', 600)
    compte.depot(350)
    compte.affiche()
    compte.capitalisation(12)
    compte.affiche()
    compte.changeTaux(.5)
    compte.capitalisation(12)
    compte.affiche()

    input("Appuyez sur une touche pour fermer la fenetre !")

