4. Control de material del gimnàs

Un fitxer de material és un fitxer de text on la primera línia conté els noms dels aparells, separats per un separador (p. ex. un punt i coma), i cada línia següent conté el nombre d’utilitzacions de cada aparell, en el mateix ordre que els noms de la capçalera i separades amb el mateix separador.

Per exemple:

cinta,bicicleta,peses,el·líptica
12,8,20,5
15,10,18,7
9,6,22,4

Pots descarregar aquest fitxer: gimnas-1.txt.

Un diccionari de material és un diccionari on cada clau és el nom d’un aparell i cada valor és una llista amb totes les dades d’aquell aparell (en format string) en l’ordre en què apareixen al fitxer. Per exemple, el diccionari de material corresponent al fitxer anterior seria:

{
  'cinta': ['12', '15', '9'],
  'bicicleta': ['8', '10', '6'],
  'peses': ['20', '18', '22'],
  'el·líptica': ['5', '7', '4']
}
  1. Dissenya la següent funció i desa-la al fitxer gimnas.py:

    crea_dic_mat(aparells)

    Retorna un nou diccionari de material amb llistes buides com a valor

    Paràmetres:

    aparells (list[str]) – noms dels aparells

    Retorna:

    diccionari de columnes on cada clau és el nom d’un aparell i cada valor una llista buida

    Tipus de retorn:

    dict

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> lap1 = ['cinta', 'bicicleta', 'peses', 'el·líptica']
    >>> d1 = crea_dic_mat(lap1)
    >>> d1 == { 'cinta': [], 'bicicleta': [], 'peses': [], 'el·líptica': []}
    True
    

    Disposeu de més tests al fitxer test-crea-dic-mat.txt

  2. Dissenya la següent funció i desa-la al fitxer gimnas.py:

    afegeix_dia(linia, sep, aparells, dic_material)

    Modifica el diccionari dic_material afegint-hi les dades de la línia linia.

    Paràmetres:
    • linia (str) – línia del fitxer amb dades separades pel separador sep i amb salt de línia al final

    • sep (str) – separador

    • aparells (list[str]) – noms dels aparells en l’ordre en què estan a linia. Es suposa que tots els noms ja hi són al diccionari dic_material

    • dic_material (dict) – diccionari de material

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> dic1 = {'cinta': ['12'], 'bicicleta': ['8'], 'peses': ['20'],
    ...         'el·líptica': ['5']}
    >>> aparells1 = ['cinta', 'bicicleta', 'peses', 'el·líptica']
    >>> afegeix_dia('15,10,18,7\n', ',', aparells1, dic1)
    >>> dic1 == {'cinta': ['12', '15'], 'bicicleta': ['8', '10'],
    ...          'peses': ['20', '18'], 'el·líptica': ['5', '7']}
    True
    

    Disposeu de més tests al fitxer test-afegeix-dia.txt

  3. Dissenya la següent funció i desa-la al fitxer gimnas.py:

    dic_material(nf, sep)

    Crea un diccionari de material amb les dades del fitxer nf.

    Paràmetres:
    • nf (str) – nom del fitxer

    • sep (str) – separador

    Tipus de retorn:

    dict

    Retorna:

    diccionari de material amb les dades del fitxer nf

    Cal que aquesta funció cridi les funcions crea_dic_mat() i afegeix_dia().

    Els següents doctests mostren exemples del que ha de fer la funció quan es crida amb el nom del fitxer de l’exemple anterior (gimnas-1.txt):

    >>> d = dic_material('gimnas-1.txt', ',')
    >>> d == {'cinta': ['12', '15', '9'], 'bicicleta': ['8', '10', '6'],
    ...       'peses': ['20', '18', '22'], 'el·líptica': ['5', '7', '4']}
    True
    

    Disposeu de més tests al fitxer test-dic-material.txt

Disposes de solucions al fitxer gimnas.py.