3. Assignació de vehicles a zones

  1. Una ciutat regula l’accés de vehicles a dues zones de distribució: centre i perifèrica. Per fer-ho, es disposa d’un fitxer d’accés de vehicles registrats, on cada línia conté la matrícula d’un vehícle, les emissions (un nombre enter o real) i la categoria (camió, furgoneta,…), tot separat per punt i coma. Per exemple:

    1111AAA;80.0;camió
    2222BBB;90.0;camió
    3333CCC;50;furgoneta
    4444DDD;60.0;furgoneta
    5555EEE;10.0;cotxe elèctric
    

    Pots descarregar aquestes dades al fitxer d’exemple exemple_vehicles.txt.

    També es disposa d’un diccionari que classifica cada categoria en una de les dues zones i a on les claus són categories i els valors la zona. Per exemple:

    {
     "camió": "perifèrica",
     "furgoneta": "centre",
     "cotxe elèctric": "centre"
    }
    

    Dissenya la funció següent i desa-la al fitxer vehicles.py.

    llegeix_vehicle(linia, dic)

    Retorna les dades d’una línea d’un fitxer d’accés com a una tupla (matrícula, emissions, zona).

    Paràmetres:
    • linia (str) – Una línia del fitxer d’accés

    • dic (dict) – Diccionari que relaciona cada categoria amb una zona

    Retorna:

    Una tupla amb la matrícula (string), les emissions (float), i la zona corresponent (string)

    Tipus de retorn:

    tuple(str, float, str)

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

    >>> dic = {
    ...     "camió": "perifèrica",
    ...     "furgoneta": "centre",
    ...     "cotxe elèctric": "centre"
    ... }
    
    >>> llegeix_vehicle("1234ABC;104.5;camió", dic)
    ('1234ABC', 104.5, 'perifèrica')
    
    >>> llegeix_vehicle("4444HHH;120;camió", dic)
    ('4444HHH', 120.0, 'perifèrica')
    

    Nota

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

  2. Per cada zona, només es poden autoritzar aquells vehicles que, en sumar les seves emissions amb la suma dels vehicles ja admesos a la mateixa zona, no superi un límit establert. Si un vehicle no pot ser admès per aquest motiu, s’omet, i el procés continua amb el següent.

    Dissenya la funció següent i desa-la al fitxer vehicles.py.

    autoritzats(fvehicles, fcentre, fperi, dic, maxcentre, maxperi)

    Escriu en els fitxers fcentre i fperi, les matrícules dels vehicles autoritzats a la zona centre i perifèrica respectivament, un per línia.

    Paràmetres:
    • fvehicles (str) – Nom del fitxer d’accés amb els vehicles

    • fcentre (str) – Nom del fitxer on s’escriuran les matrícules admeses a la zona «centre»

    • fperi (str) – Nom del fitxer on s’escriuran les matrícules admeses a la zona «perifèrica»

    • dic (dict) – Diccionari que relaciona cada categoria amb una zona

    • maxcentre (float) – Emissions màximes permeses a la zona centre

    • maxperi (float) – Emissions màximes permeses a la zona perifèrica

    La funció ha de cridar a llegeix_vehicle().

    Per exemple, pel fitxer d’exemple anterior exemple_vehicles.txt, la següent crida:

    >>> autoritzats("exemple_vehicles.txt", "centre.txt",
    ...            "peri.txt", dic, 100.0, 150.0)
    

    crearia dos fitxers, un anomenat centre.txt amb el contingut

    3333CCC
    5555EEE
    

    i un altre anomenat peri.txt amb el contingut

    1111AAA
    

    Nota

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

Disposes de solucions al fitxer vehicles.py.