1. Reconstruir una sèrie de temperatures (5 punts)¶
Avís
Per resoldre aquest exercici no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per desar tots els elements d’un iterador.
Disposem d’una sèrie temporal T de temperatures reals amb un decimal, mesurades
al llarg del temps. La sèrie pot contenir valors perduts, que es representen amb
el símbol '*'. En aquesta sèrie mai apareixeran dos o més '*'
consecutius.
Volem reconstruir la sèrie generant una nova sèrie T” on tots els valors perduts hagin estat substituïts segons les regles següents:
Si un
'*'es troba entre dues temperatures conegudes a i b, s’ha de substituir per dues temperatures reals obtingudes mitjançant interpolació lineal uniforme:\[u = a + \frac{b-a}{3}, \qquad v = a + \frac{2(b-a)}{3}\]Els valors obtinguts s’han d’arrodonir a un decimal.
Si un
'*'apareix al principi de la sèrie, s’ha de substituir per una repetició del segon element.Si un
'*'apareix al final de la sèrie, s’ha de substituir per una repetició del penúltim element.
Dissenya la funció següent i desa-la al mòdul temperatures
(fitxer temperatures.py):
- temperatures.reconstrueix(it)¶
- Paràmetres:
it – iterador sobre una sèrie no buida T de temperatures reals amb un decimal i el símbol
'*'- Retorna:
iterador sobre la sèrie T” amb els valors perduts reconstruïts
Per exemple,
>>> it = iter([10.4, '*', 19.6, '*', 25.6])
>>> it2 = reconstrueix(it)
>>> next(it2)
10.4
>>> next(it2)
13.5
>>> next(it2)
16.5
>>> for x in it2:
... print(x, end=',')
19.6,21.6,23.6,25.6,
>>> for x in reconstrueix(iter(['*', 5.8, '*', 2.2])):
... print(x, end=',')
5.8,5.8,4.6,3.4,2.2,
Disposes d’un joc de proves més complet al fitxer tests-temperatures.txt.