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

poblacio

La població de l’etapa (str)

data_arribada

La data d’arribada a l’etapa (datetime.datetime)

data_sortida

La data de sortida de l’etapa(datetime.datetime)

Mètodes

durada()

El nombre d’hores (int) transcorregudes entre l’arribada i la sortida.

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

nom

El nom de la persona que viatja, inicialitzat amb el paràmetre persona (str).

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 str buit.

temps_etapes()

Retorna la suma de les durades de totes les etapes en hores (int).

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.