1. 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:
Resident ; EIXAMPLE ; 18 ; 14/3 ; Electrica Turista ; GRACIA ; 42 ; 5/7 ; Mecanica Resident ; SANTS-MONTJUIC ; 25 ; 21/9 ; Mecanica Resident ; GRACIA ; 12 ; 1/1 ; Electrica Turista ; EIXAMPLE ; 31 ; 17/8 ; Electrica Resident ; CIUTAT VELLA ; 9 ; 4/3 ; Mecanica Turista ; SANTS-MONTJUIC ; 36 ; 2/11 ; Electrica Resident ; EIXAMPLE ; 20 ; 30/12 ; Mecanica Resident ; GRACIA ; 15 ; 7/7 ; Electrica
Pots descarregar el fitxer 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:- 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ó:
>>> processa_linia('Resident ; EIXAMPLE ; 14 ; 1/3 ; Electrica\n', 3, 7, 'Resident') ('EIXAMPLE', 'Electrica', 'curt') >>> processa_linia('Resident ; LES CORTS ; 30 ; 30/6 ; Mecànica\n', 5, 7, 'Resident') ('LES CORTS', 'Mecànica', 'mig') >>> processa_linia('Resident ; GRACIA ; 31 ; 1/1 ; Electrica\n', 3, 7, 'Resident') ()
Disposes de més tests al fitxer
test-processa-linia.txtDissenya la funció següent i desa-la al fitxer
bicicletes.py:- 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.
- Paràmetres:
f_dades (str) – nom del fitxer de trajectes que conté les dades dels trajectes
f_sort (str) – nom del fitxer on s’han d’escriure les dades filtrades
mes_inici (int) – primer mes del rang que es vol considerar
mes_fi (int) – últim mes del rang que es vol considerar
t (str) – tipus d’usuari que es vol seleccionar
Aquesta funció ha de cridar la funció
processa_linia().Per exemple, donada la crida
selecciona('trajectes.txt', 'trajectes_filtrats.txt', 3, 7, 'Resident')
on
trajectes.txtés el fitxer de l’exemple anterior, la funció crearia el fitxertrajectes_filtrats.txtamb el contingut següent:EIXAMPLE,Electrica,mig CIUTAT VELLA,Mecanica,curt GRACIA,Electrica,mig
Disposes de més tests al fitxer
test-selecciona.txtDisposes de solucions al fitxer
bicicletes.py.