1. Transformar una seqüència de valors¶
Avís
Per a resoldre aquest exercici no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements d’un iterador.
Volem transformar una seqüeǹcia de valors numèrics de la següent manera:
Si dos valors consecutius són iguals, s’elimina un dels dos.
Si la diferència, en valor absolut, entre dos valors consecutius és més grans que un paràmetre maxv, s’intercala entre ells la mitjana d’aquests dos valors.
1.1. Funció transforma_seq (4 punts)¶
Es demana que, en un fitxer anomenat valors.py, hi deseu la següent funció generadora:
- valors.transforma_seq(it, maxv)¶
- Paràmetres:
it – iterador sobre una seqüència no buida d’enters
- Retorna:
iterador sobre la seqüència transformada, tal com queda especificat més amunt
Per exemple:
>>> import valors
>>> it1 = iter([2, 3, 3, 4, 6, 11, 9, 6])
>>> it2 = valors.transforma_seq(it1, 3)
>>> next(it2)
2
>>> next(it2)
3
>>> next(it2)
4
>>> for v in it2:
... print(v, end=";")
6;8.5;11;9;6;
>>> it2 = valors.transforma_seq(iter([1, 2, 2, 2, 5, 6, 9, 2, 2, 10]), 2)
>>> for v in it2:
... print(v, end=";")
1;2;3.5;5;6;7.5;9;5.5;2;6.0;10;
Disposeu d’un joc de proves més complet en el fitxer tests-valors.txt