1. Suavitzar una sèrie (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.

Volem suavitzar una sèrie S de nombres enters, de manera que la diferència en valor absolut de dos nombres consecutius no superi la unitat. Per aconseguir-ho, introduirem tants nombres com calgui entre cada parella de nombres consecutius de S. Per exemple, si la sèrie original és

1 3 4 7 8 7 3 1 1 8 12

la sèrie suavitzada serà

1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12

Nota: per claredat, els nombres introduïts estan en negreta.

Dissenya la funció següent i desa-la al mòdul suavitza (fitxer suavitza.py):

suavitza.suavitza_serie(it)
Paràmetres:

it – iterador sobre una sèrie no buida S de nombres enters

Retorna:

iterador sobre la sèrie S suavitzada

Per exemple,


>>> it = iter([3, 5, 1])
>>> it2 = suavitza_serie(it)
>>> next(it2)
3
>>> next(it2)
4
>>> next(it2)
5
>>> for x in it2:
...    print(x, end=',')
4,3,2,1,

>>> for x in suavitza_serie(iter([1, 3, 4, 7, 8, 7, 3, 1, 1, 8, 12])):
...    print(x, end=',')
1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9,10,11,12,

Disposes d’un joc de proves més complet al fitxer tests-suavitza.txt.