2. Estacions de metro (3 punts)¶
Disposem d’un diccionari amb informació sobre les línies i estacions
del metro de Barcelona. La clau d’aquest (dict) és el número
de línia (int) i el valor és una llista amb les estacions
d’aquella línia posades en l’ordre en què es recorren.
Per exemple (òbviament és una simplificació de la realitat):
{1: ['espanya', 'hostafracs', 'p.sants'],
3: ['espanya', 'tarragona', 'sants', 'p.centre'],
5: ['sants', 'p.sants', 'badal']}
Es vol generar un diccionari d’estacions veïnes que per cada estació
ens indiqui quines són les seves estacions veïnes tenint en compte
totes les línies. Un diccionari d’estacions veïnes té per claus les
estacions (str) i el valor de cada clau és una llista de
tuples amb el nom i la línia de cada una de les seves estacions
veïnes.
Per exemple, a partir del diccionari de l’exemple anterior:
{'badal': [('p.sants', 5)],
'espanya': [('hostafracs', 1), ('tarragona', 3)],
'hostafracs': [('espanya', 1), ('p.sants', 1)],
'p.centre': [('sants', 3)],
'p.sants': [('badal', 5), ('hostafracs', 1), ('sants', 5)],
'sants': [('p.centre', 3), ('p.sants', 5), ('tarragona', 3)],
'tarragona': [('espanya', 3), ('sants', 3)]}
Observa, per exemple, que les estacions veïnes de Plaça de Sants ('p.sants') són Badal ('badal') i Sants ('sants') per la línia 5, i Hostafrancs ('hostafrancs') per la línia 1.
Amb aquest objectiu, es demana que al mòdul metro (fitxer metro.py) facis les funcions següents:
- metro.actualitza_evD(evD, ln, estL)¶
Afegeix al diccionari d’estacions veïnes evD les estacions de la línia ln que hi ha a la llista estL.
La llista estL conté tres estacions com a mínim.
Aquesta funció modifica evD.
Per exemple:
>>> ev = {} >>> actualitza_evD(ev, 1, ['espanya', 'hostafrancs', 'p.sants']) >>> for l in ev.values(): l.sort() >>> ev == { ... 'p.sants': [('hostafrancs', 1)], ... 'espanya': [('hostafrancs', 1)], ... 'hostafrancs': [('espanya', 1), ('p.sants', 1)]} True
Trobaràs més tests al fitxer
test-actualitza_evD.txt
- metro.genera_evD(d)¶
tal que
donat
dun diccionari amb les línies de metro com el descrit- retorna un diccionari d’estacions veïnes que conté totes les
estacions que apareixen a les línies de
d.
Per exemple:
>>> d = { ... 1: ['espanya', 'hostafracs', 'p.sants'], ... 3: ['espanya', 'tarragona', 'sants', 'p.centre'], ... 5: ['sants', 'p.sants', 'badal'] ... } >>> dsol = genera_evD(d) >>> for l in dsol.values(): l.sort() >>> dsol == { ... 'sants': [('p.centre', 3), ('p.sants', 5), ('tarragona', 3)], ... 'p.sants': [('badal', 5), ('hostafracs', 1), ('sants', 5)], ... 'badal': [('p.sants', 5)], ... 'espanya': [('hostafracs', 1), ('tarragona', 3)], ... 'tarragona': [('espanya', 3), ('sants', 3)], ... 'p.centre': [('sants', 3)], ... 'hostafracs': [('espanya', 1), ('p.sants', 1)]} True
Disposes dels jocs de proves al fitxer
test-genera_evD.txt.