#jcourtin 11/2016   une classe bidon !

"""
Une journée en enfer :       https://www.youtube.com/watch?v=pmk2mNf9iqE

A une fontaine, on dispose de deux bidons : un de 3 litres et un de 5 litres.
Comment peut-on obtenir 4 litres d'eau ?
"""


#L'objectif de ce TP est d'apprendre à créer un objet en Python
#en l'occurence un bidon de capacité fixée.

#on peut remplir le bidon, le vider, ou verser son contenu dans un autre objet bidon.



class Bidon():
    
    ##définitions des attributs de la classe : accessibles par  objet.attribut
    maxVolume=None
    volume=None
    
    
    ##constructeur :  >>>monBidon=Bidon(5, 2)  
    #                   créé un bidon de 5L max avec un volume initiale de 2L 
    def __init__(self, setMaxVolume, volumeINI):
        self.maxVolume=setMaxVolume
        self.volume=volumeINI



    ##définitions des méthodes de la classe : accessibles par objet.methode(argument)
    
    
    
    #Affichage : cette méthode est déclenchée lors de l'appel >>> print(monBidon)
    def __str__(self):
        myString="Bidon : "+str(self.volume)+" / "+str(self.maxVolume)+"L"
        return myString
    
    

    def getVolumeDisponible(self):
        #renvoie le volume restant libre dans le bidon
        return #??
    
    #les 4 méthodes suivantes ne renvoient rien :
    
    
    
    def viderCompletement(self):
        #Fixe le volume (self.volume) à 0
    
    
    
    def remplirCompletement(self):
        #fixe le volume à son max
    
    
    
    def setVolume(self, volume):   
        #fixe le volume, a une valeur déterminée ()
        #Cette méthode est privée : 
        #On a pas le droit d'utiliser cette fonction pour le jeu ...
        #mais uniquement pour réaliser les tranfert de verserDansBidon() au sein de la classe.
    
    
    
    def verserDansBidon(self, other):
        #réalise le transfert de self dans other
        #Règles : 
        #         - si il y a la place on verse tout dans other
        #         - Sinon on remplit other à ras-bord (et self garde le reste)
        #Vous devez re-calculer les volumes (self.volume et other.volume)
        
    
    
    
############################# MAIN #############################################
if (__name__=="__main__"):
    
    Bidon5L=Bidon(5., 0.)    #creation des bidons initialement vides
    Bidon3L=Bidon(3., 0.)
        
    #avant
    print(Bidon3L);    print(Bidon5L)
    
    #Proposer une succession d'opérations pour obtenir 4L d'eau.
    #avec uniquement :
    #[viderCompletement, remplirCompletement, setVolume, verserDansBidon]
    
    
    #après
    print(Bidon3L);    print(Bidon5L)
    
  