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: .. literalinclude:: gimnas-1.txt :language: console Pots descarregar aquest fitxer: :download:`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: .. code-block:: python { 'cinta': ['12', '15', '9'], 'bicicleta': ['8', '10', '6'], 'peses': ['20', '18', '22'], 'el·líptica': ['5', '7', '4'] } #. Dissenya la següent funció i desa-la al fitxer :file:`gimnas.py`: .. function:: crea_dic_mat(aparells) Retorna un nou diccionari de material amb llistes buides com a valor :param list[str] aparells: noms dels aparells :return: diccionari de columnes on cada clau és el nom d'un aparell i cada valor una llista buida :rtype: dict Els següents doctests mostren exemples del que ha de fer la funció: .. literalinclude:: test-crea-dic-mat.txt :language: python3 :lines: 3-6 Disposeu de més tests al fitxer :download:`test-crea-dic-mat.txt` #. Dissenya la següent funció i desa-la al fitxer :file:`gimnas.py`: .. function:: afegeix_dia(linia, sep, aparells, dic_material) Modifica el diccionari *dic_material* afegint-hi les dades de la línia `linia`. :param str linia: línia del fitxer amb dades separades pel separador `sep` i amb salt de línia al final :param str sep: separador :param list[str] aparells: 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* :param dict dic_material: diccionari de material Els següents doctests mostren exemples del que ha de fer la funció: .. literalinclude:: test-afegeix-dia.txt :language: python3 :lines: 3-9 Disposeu de més tests al fitxer :download:`test-afegeix-dia.txt` #. Dissenya la següent funció i desa-la al fitxer :file:`gimnas.py`: .. function:: dic_material(nf, sep) Crea un diccionari de material amb les dades del fitxer *nf*. :param str nf: nom del fitxer :param str sep: separador :rtype: dict :return: diccionari de material amb les dades del fitxer *nf* Cal que aquesta funció cridi les funcions :func:`crea_dic_mat` i :func:`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``): .. literalinclude:: test-dic-material.txt :language: python3 :lines: 3-6 Disposeu de més tests al fitxer :download:`test-dic-material.txt` Disposes de solucions al fitxer :download:`gimnas.py`.