1. Itineraris (7 punts)¶
1.1. Classe Etapa¶
La classe Etapa especificada a continuació representa etapes d’un viatge: nom de la població, data d’arribada i data de sortida. Implementeu-la al mòdul etapes (fitxer etapes.py).
- class etapes.Etapa(poblacio, data_arri, data_sort)¶
Crea una instància de la classe que representa una etapa a la població poblacio, amb la data i hora d’arribada data_arri i amb la data i hora de sortida data_sort.
Atributs
- data_arribada¶
La data d’arribada a l’etapa (
datetime.datetime)
- data_sortida¶
La data de sortida de l’etapa(
datetime.datetime)
Mètodes
La classe suporta la funció
str()que retorna l’expressió Etapa: nom_poblacio.
Vegeu per exemple:
>>> e = Etapa('Barcelona', datetime(2023, 3, 23, 9, 15), datetime(2023, 3, 25, 9, 15))
>>> str(e)
'Etapa: Barcelona'
>>> e.durada()
48
>>> e = Etapa('Barcelona', datetime(2023, 3, 23, 9, 15), datetime(2023, 3, 25, 19, 15))
>>> e.durada()
58
>>> e = Etapa('Barcelona', datetime(2023, 3, 23, 9, 15), datetime(2023, 3, 25, 19, 59))
>>> e.durada()
58
Disposeu de més jocs de prova al fitxer tests-etapa.txt.
1.2. Classe Itinerari¶
La classe Itinerari especificada a continuació representa l’itinerari de viatge d’una persona, composta per una seqüència d’etapes (etapes.Etapa). Es suposa que l’itinerari no passa més d’una vegada per una ciutat. Implementeu-la al mòdul itineraris (fitxer itineraris.py).
- class itineraris.Itinerari(persona)¶
Crea una instància de la classe que representa l’itinerari d’un viatge de la persona donada. Inicialment, l’itinerari no conté cap etapa.
Atributs
Mètodes
- afegir_etapa(etapa)¶
Afegeix una etapa (
etapes.Etapa) al final de l’itinerari.
- etapa_llarga(hores)¶
Retorna el nom de la primera població en la que s’ha fet una etapa de durada superior al nombre d’hores donat. Si no n’hi ha cap, retorna el
strbuit.
Aquesta classe suporta les operacions i funcions següents:
Operació
Resultat
t[i]- Retorna l’etapa d’índex i de l’itinerari t amb
0 <=i <= len(t)
len(t)Retorna el nombre d’etapes de l’itinerari t
iter(t)Retorna un iterador de noms de població de l’itinerari t
Per implementar aquesta classe, cal crear un atribut privat que sigui un contenidor d’etapes.
Vegeu per exemple:
>>> it = Itinerari('Joana')
>>> it.nom
'Joana'
>>> len(it)
0
>>> it.etapa_llarga(10)
''
>>> it.afegir_etapa(Etapa('Barcelona', datetime(2023, 3, 23, 12), datetime(2023, 3, 25, 13)))
>>> print(it[0])
Etapa: Barcelona
>>> it.etapa_llarga(10)
'Barcelona'
>>> it.etapa_llarga(58)
''
>>> it.afegir_etapa(Etapa('Roma', datetime(2023, 3, 25, 16, 59), datetime(2023, 3, 29, 10, 5)))
>>> it.afegir_etapa(Etapa('Atenes', datetime(2023, 3, 29, 14, 38), datetime(2023, 4, 3, 7, 10)))
>>> len(it)
3
>>> print(it[1])
Etapa: Roma
>>> list(iter(it))
['Barcelona', 'Roma', 'Atenes']
>>> it.etapa_llarga(56)
'Roma'
>>> it.etapa_llarga(100)
'Atenes'
>>> it.temps_etapes()
250
Disposeu de més jocs de prova al fitxer tests-itinerari.txt.