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] = dies

Assigna 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.

  1. En el mòdul menjador (fitxer menjador.py), dissenyeu la classe GrupMenjador.

  2. 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
    
    
  3. 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)
    
    
  4. En un altre mòdul, anomenat gestio (fitxer gestio.py), dissenyeu les funcions següents:

    gestio.fusionar(grup, llista)
    Paràmetres:
    • grup – una instància de la classe GrupMenjador

    • llista – 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ètode iter() de la classe GrupMenjador.

    gestio.factura(grup, preudia)
    Paràmetres:
    • grup – una instància de la classe GrupMenjador

    • preudia – 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ètode iter_valids() de la classe GrupMenjador.

Disposeu de més jocs de proves al fitxer test-menjador.txt i test-gestio.txt.