Classes assignatura, expedient i alumne¶
En aquest exercici, s’implementaran diverses classes destinades a representar els conceptes d’assignatura, alumne i expedient acadèmic. També es treballarà el concepte d’herència.
Totes les classes s’han d’implementar en el mòdul estudiantat (fitxer estudiantat.py).
Implementeu la classe
Assignaturadonada la seva especificació:- class estudiantat.Assignatura(codi_asig, credits)¶
Construeix una instància de la classe a partir del codi i del nombre de crèdits de l’assignatura.
Atributs
Aquesta classe suporta el mèdode
str()que retorna una expressió de tipus: Assignatura:codi x.x crèdits on codi és el codi de l’assignatura i x.x el seu nombre de crèdits. Vegeu per exemple:>>> a = Assignatura('240675', 4.5) >>> a.ncredits 4.5 >>> a.codi '240675' >>> str(a) 'Assignatura 240675 4.5 crèdits'
Disposeu de més tests al fitxer
test-assignatura.txt.Implementeu la classe
Expedientque representa l’expedient acadèmic d’un estudiant. Vegeu-ne l’especificació:- class estudiantat.Expedient¶
Construeix un expedient inicialment buit, sense capa nota.
Mètodes
- total_credits()¶
Retorna el nombre total de crèdits de l’expedient, sumant els de totes les assignatures
- mitjana()¶
Retorna la nota mitjana de l’expedient, ponderant cada nota pel nombre de crèdits de l’assignatura
Aquesta classe suporta les operacions següents:
Operació
Resultat
e[asig]Retorna la nota de l’assignatura asig de l’expedient e. Es compleix: asig in e.
e[asig] = notaAssigna la nota nota a l’assignatura de nom asig de l’expedient e. Si l’assignatura no era a l’expedient e, l’afegeix.
La classe suporta la funció
len()que retorna el nombre d’assignatures de l’expedient i el mètode in que indica si una assignatura és a l’expedient. Les assignatures són instàncies de la classeAssignatura. La classe ha de tenir un atribut privat que representarà les notes de les assignatures, per exemple, un diccionari amb claus les assignatures i valors les notes.Alerta que la classe és contenidora d’instàncies de la classe
Assignatura, no se’n deriva per herència.Vegeu per exemple:
>>> e = Expedient() >>> e.total_credits() 0 >>> a = Assignatura('20888', 4.5) >>> a in e False >>> len(e) 0 >>> e[a] = 5.0 >>> len(e) 1 >>> e[a] 5.0 >>> e.mitjana() 5.0 >>> a in e True
Disposeu de més tests al fitxer
test-expedient.txt.Ara, implementeu la classe
Alumneque representa les dades d’un alumne (nom i grup al que pertany). Vegeu-ne l’especificació:- class estudiantat.Alumne(nom_alumne, grup)¶
Construeix una instància de la classe a partir del nom de l’alumne i el grup al que pertany.
Aquesta classe suporta el mèdode
str()que retorna una expressió de tipus: nom Grup: ngrup on nom és el nom de l’alumne i ngrup el nom del seu grup. Vegeu per exemple:Vegeu per exemple:
>>> a = Alumne('Tomàs Rodríguez Fonollosa', '1A') >>> a.nom 'Tomàs Rodríguez Fonollosa' >>> a.grup '1A' >>> print(str(a)) Tomàs Rodríguez Fonollosa Grup: 1A
Disposeu de més tests al fitxer
test-alumne.txt.La classe
AlumneExpedientes deriva per herència de la classeAlumnei li afegeix un atribut addicional, l’expedient acadèmic de l’alumne, una instància de la classeExpedient. Inicialment, l’expedient és buit, sense cap assignatura. Vegeu:- class estudiantat.AlumneExpedient(nom_alumne, grup)¶
Construeix una instància de la classe a partir del nom de l’alumne i el grup al que pertany.
Atributs (a més dels de la classe base)
Mètodes (a més dels de la classe base)
- mitjana()¶
Retorna la nota mitjana de l’expedient de l’alumne.
Vegeu per exemple:
>>> al1 = AlumneExpedient('Tomàs Rodríguez Fonollosa', '1A') >>> isinstance(al1, Alumne) and isinstance(al1, AlumneExpedient) True >>> al1.nom 'Tomàs Rodríguez Fonollosa' >>> al1.grup '1A' >>> print(str(al1)) Tomàs Rodríguez Fonollosa Grup: 1A >>> len(al1.expedient) 0 >>> asig1 = Assignatura('45678', 4.5) >>> al1.expedient[asig1] = 6.7 >>> al1.mitjana() == al1.expedient.mitjana() True >>> al1.mitjana() 6.7
Per a implementar el mètode
mitjana()cal que utilitzeu el mètode de mateix nom de la classeExpedient. Disposeu de més tests al fitxertest-alume-expedient.txt.Finalment, en el fitxer
gestio.pyimplementeu la funció següent:- gestio.notes_alumnes(llista)¶
Per a resoldre aquest exercici podeu utilitzar la funció de python
isinstance(). Disposeu de jocs de proves al fitxertest-gestio.txt.
Trobareu una solució dels exercicis a estudiantat.py i gestio.py.