Menjador¶
Una escola de primària organitza l’alumnat que es queda al menjador en grups reduïts vigilats per un o una monitora. Per la gestió de la comptabilitat del menjador, per cada grup, es disposa d’informació sobre qui n’és la monitora, quins són els alumnes que el composen i, per cada alumne, el nombre de dies en que ha fet ús del servei.
La classe GrupMenjador que representa un grup de menjador seguint l’especificació següent:
- class menjador.GrupMenjador(nom_monitora)¶
Construeix un grup de menjador a partir del nom del monitor o monitora i sense cap alumne inicialment.
Atributs
- nom_moni¶
El nom del o la monitora del grup
Aquesta classe ha de suportar les operacions següents:
Operació
Resultat
g[nom]Retorna el nombre de dies que l’alumne de nom nom s’ha quedat al menjador. Es compleix: nom in g.
g[nom] = diesAssigna el nombre de dies dies a l’alumne de nom nom del grup de menjador g. Si l’alumne no era al menjador g, l’afegeix.
A més, aquesta classe ha de suportar la funció len() que retorna el nombre d’alumnes del grup`de menjador i l’operador in que indica si un alumne pertany al grup de menjador.
Vegeu per exemple:
>>> g = GrupMenjador('Elena')
>>> len(g)
0
>>> g.nom_moni
'Elena'
>>> g['Kim'] = 17
>>> g['Kim']
17
>>> g['Kim'] = 11
>>> g['Kim']
11
>>> 'Kim' in g
True
Per implementar aquesta classe cal tenir en compte que ha de tenir un atribut privat. Us aconsellem que sigui un diccionari amb clau el nom de l’alumne i valor el nombre de dies que aquest s’ha quedat al menjador.
En el mòdul
menjador(fitxermenjador.py), dissenyeu la classeGrupMenjador.Comproveu si la classe és iterable per noms d’alumne. Si no ho és, implementeu el mètode necessari per a que ho sigui. Per exemple:
>>> alumne = next(iter(g)) >>> alumne in g True
Implementeu el mètode
iter_valids()que crea un iterador de tuples (alumne, dies) per tots els alumnes que s’han quedat com a mínim 1 dia al menjador. Per exemple:>>> g2 = GrupMenjador('Alex') >>> g2['Tom'] = 23 >>> next(g2.iter_valids()) ('Tom', 23)
En un altre mòdul, anomenat
gestio(fitxergestio.py), dissenyeu les funcions següents:- gestio.fusionar(grup, llista)¶
- Paràmetres:
grup – una instància de la classe
GrupMenjadorllista – una llista (
list) de noms d’alumnes que s’han quedat a dinar un dia concret
- Retorna:
Cap paràmetre. És una funció modificadora que actualitza grup a partir de llista, afegint 1 dia al nombre de dies que els alumnes s’han quedat al menjador per tots els noms de llista. Si un alumne no pertany al grup, l’afegeix amb valor 1 dia.
- gestio.llistar(grup)¶
- Paràmetres:
grup – una instància de la classe
GrupMenjador- Retorna:
una llista (
list) formada per la llista ordenada lexicogràficament dels alumnes de grup. Utilitzeu el mètodeiter()de la classeGrupMenjador.
- gestio.factura(grup, preudia)¶
- Paràmetres:
grup – una instància de la classe
GrupMenjadorpreudia – un enter (
int) que representa el preu diari del servei de menjador
- Retorna:
una llista (
list) ordenada lexicogràficament per nom d’alumnes, i formada per tuples (nom, cost_servei) on cost_servei és l’import de la factura de menjador de l’alumne comptant tots els dies en que ha usat el servei. A la llista només hi ha d’apareixer els alumnes que s’han quedat com a mínim un dia. Utilitzeu el mètodeiter_valids()de la classeGrupMenjador.
Disposeu de més jocs de proves al fitxer test-menjador.txt i test-gestio.txt.