2. Rutes de transport

Una empresa de transports emmagatzema la informació d’una ruta en llistes de rutes a on el primer element és un string amb el nom del conductor, el segon una llista d’strings amb les ciutats que s’han de visitar a la ruta i el tercer un enter amb la distància total de kilòmetres de la ruta. Per exemple:

["Pau", ["Barcelona", "València", "Alacant"], 350]

També es disposa d’una llista de ciutats restringides (strings), és a dir, ciutats que no es vol visitar en aquest moment per algun motiu (restriccions trànsit, contaminació, etc.). Considerem que una ruta no és vàlida si ha de visitar alguna ciutat dins la llista de ciutats restringides.

Desa les següents funcions al fitxer rutes.py.

  1. Dissenya la funció ruta_no_valida() que donada una ruta i una llista de ciutats restringides retorna 0.0 si la ruta és vàlida o un float arrodonit a dos decimals amb la distància total de kilòmetres de la ruta si no ho és. En el cas de que la ruta visiti quatre o més ciutats, la distància s’haurà d’incrementar en un 10% per possibles incidències.

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

    >>> ruta = ['Pau', ['Barcelona', 'València', 'Alacant'], 516]
    >>> restriccions = ['Alacant']
    >>> ruta_no_valida(ruta, restriccions)
    516.0
    
    >>> ruta = ['Pau', ['Barcelona', 'València', 'Alacant'], 516]
    >>> restriccions = ['Madrid']
    >>> ruta_no_valida(ruta, restriccions)
    0.0
    
    >>> ruta = ['Anna', ['Barcelona', 'Madrid', 'València', 'Alacant', 'Murcia'], 1496]
    >>> restriccions = ['Madrid', 'Alacant']
    >>> ruta_no_valida(ruta, restriccions)
    1645.6
    

    Nota

    Disposes de més tests al fitxer test-ruta-no-valida.txt

  2. A més, es disposa d’una llista de rutes a on cada element és una subllista com les indicades anteriorment que representa una ruta. Per exemple:

    [["Pau", ["Barcelona", "València", "Alacant"], 350],
    ["Marta", ["Madrid", "Saragossa"], 320],
    ["Joan", ["Bilbao", "Santander", "Gijón"], 500]]
    

    Dissenya la funció conductors_lliures() que donada una llista de rutes i una llista de ciutats restringides, retorna una nova llista amb els conductors assignats a rutes no vàlides. Cada element de la llista serà una tupla amb dos elements, el nom del conductor i la distància total de kilòmetres de la ruta. La llista estarà ordenada de forma ascendent per distància i, en cas d’empat, alfabèticament per nom.

    Aquesta funció ha de cridar a la funció ruta_no_valida().

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

    >>> lrutes1 = [['Marc', ['Bilbao', 'Madrid', 'València', 'Alacant', 'Barcelona'], 1726],
    ...           ['Pau', ['Barcelona', 'València', 'Alacant'], 516],
    ...           ['Carla',['València', 'Murcia', 'Cartagena'], 360],
    ...           ['Anna', ['Barcelona', 'València', 'Alacant', 'Murcia'], 596]]
    >>> lciutats1 = ['Barcelona','Alacant']
    
    >>> conductors_lliures(lrutes1,lciutats1)
    [('Pau', 516.0), ('Anna', 655.6), ('Marc', 1898.6)]
    
    >>> lciutats1b = ['Vigo', 'Sevilla']
    >>> conductors_lliures(lrutes1,lciutats1b)
    []
    

    Nota

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

Disposeu de solucions al fitxer rutes.py