Bicicletes (2 punts) ==================== La informació sobre l'ús d'un servei de bicicletes compartides a diferents districtes s'emmagatzema en un *fitxer de trajectes* on cada línia representa un trajecte i està formada pel tipus d'usuari, el districte d'origen, la durada del trajecte en minuts, la data d'inici (amb el dia i el mes separats per ``'/'``) i el tipus de bicicleta, tot separat per un espai, un punt i coma i un espai (``' ; '``). Per exemple: .. literalinclude:: trajectes.txt Pots descarregar el fitxer :download:`trajectes.txt ` amb aquest exemple. #. Segons la durada, cada trajecte es classifica dins una categoria amb un string de la manera següent: - ``'curt'`` si dura menys de 15 minuts - ``'mig'`` si dura entre 15 i 30 minuts, ambdós inclosos - ``'llarg'`` si dura més de 30 minuts Dissenya la funció següent i desa-la al fitxer ``bicicletes.py``: .. function:: processa_linia(linia, mes_inici, mes_fi, t) Processa una línia d'un fitxer de trajectes. Si la línia correspon al tipus d'usuari *t* i el més de la data es troba dins del rang de mesos indicat per *mes_inici* i *mes_fi*, ambdós inclosos, retorna una tupla amb la informació de la línia. :param str linia: línia d'un fitxer de trajectes :param int mes_inici: primer mes del rang que es vol considerar :param int mes_fi: últim mes del rang que es vol considerar :param str t: tipus d'usuari que es vol seleccionar :rtype: tuple :return: una tupla amb el districte d'origen, el tipus de bicicleta i la classificació del trajecte segons la seva durada, o bé una tupla buida si la línia no compleix les condicions. Els següents doctests mostren exemples del que ha de fer la funció: .. literalinclude:: test-processa-linia.txt :language: python3 :lines: 3-10 Disposes de més tests al fitxer :download:`test-processa-linia.txt` #. Dissenya la funció següent i desa-la al fitxer ``bicicletes.py``: .. function:: selecciona(f_dades, f_sort, mes_inici, mes_fi, t) Crea un nou fitxer amb les dades del fitxer de trajectes anomenat *f_dades* que corresponen al tipus d'usuari *t* i pels que el mes de la data es troba dins del rang de mesos indicat per *mes_inici* i *mes_fi*, ambdós inclosos. El fitxer de sortida ha de contenir una línia per cada trajecte seleccionat, amb el districte d'origen, el tipus de bicicleta i la categoria de la durada, separats per comes. :param str f_dades: nom del fitxer de trajectes que conté les dades dels trajectes :param str f_sort: nom del fitxer on s'han d'escriure les dades filtrades :param int mes_inici: primer mes del rang que es vol considerar :param int mes_fi: últim mes del rang que es vol considerar :param str t: tipus d'usuari que es vol seleccionar Aquesta funció **ha de cridar** la funció :func:`processa_linia`. Per exemple, donada la crida .. code-block:: python selecciona('trajectes.txt', 'trajectes_filtrats.txt', 3, 7, 'Resident') on ``trajectes.txt`` és el fitxer de l'exemple anterior, la funció crearia el fitxer ``trajectes_filtrats.txt`` amb el contingut següent: .. literalinclude:: trajectes_filtrats.txt Disposes de més tests al fitxer :download:`test-selecciona.txt` Disposes de solucions al fitxer :download:`bicicletes.py`.