class Assignatura:
    def __init__(self, codi_asig, credits):
        self.codi = codi_asig
        self.ncredits = credits
    def __str__(self):
        return 'Assignatura {:s} {:3.1f} crèdits'.format(self.codi, self.ncredits)
    
class Expedient:
    def __init__(self):
        self.__dnotes = {}
    def __len__(self):
        return len(self.__dnotes)
    def __contains__(self, asig):
        return asig in self.__dnotes
    def __getitem__(self, asig):
        return self.__dnotes[asig]
    def __setitem__(self, asig, nota):
        self.__dnotes[asig] = nota
    def mitjana(self):
        ncredits = 0
        tot = 0
        for asig in self.__dnotes:
            tot = tot + self.__dnotes[asig]*asig.ncredits
            ncredits = ncredits + asig.ncredits
        return tot/ncredits
    def total_credits(self):
        ncredits = 0
        for asig in self.__dnotes:
            ncredits = ncredits + asig.ncredits
        return ncredits

class Alumne:
    def __init__(self, nom_complet, grup):
        self.nom = nom_complet
        self.grup = grup
    def __str__(self):
        return self.nom + ' Grup: ' + self.grup

class AlumneExpedient(Alumne):
    def __init__(self, nom_complet, grup):
        super().__init__(nom_complet, grup)
        self.expedient = Expedient()
        
    def mitjana(self):
        return self.expedient.mitjana()

    
