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.

  1. 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.txt

  2. Dissenya 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 fitxer trajectes_filtrats.txt amb el contingut següent:

    EIXAMPLE,Electrica,mig
    CIUTAT VELLA,Mecanica,curt
    GRACIA,Electrica,mig
    

    Disposes de més tests al fitxer test-selecciona.txt

    Disposes de solucions al fitxer bicicletes.py.