Omplert de dades que falten

Un aficionat a la meteorologia diàriament, a les 10 en punt, mesura la temperatura del poble on viu i enregistra la dada en un fitxer de text. No obstant, quan no ha pogut mesurar-la (sigui perquè no funcionen bé els instruments, sigui perquè aquell dia estava de vacances, etc), per indicar que manca una o més dades apunta un asterisc al fitxer. El fitxer doncs, consta d’una sèrie de dades numèriques amb asteriscs intercalats; en qualsevol cas, les anotacions sempre estan separades per espais en blanc i/o salts de línia. En cada línia no sempre hi ha el mateix nombre d’anotacions. Un exemple d’un fitxer d’anotacions podria ser aquest:

16.0 18.0 * 18.5
19.25 18.0 19.0 17.5 15.5 * * 13.0 * 12.0
* 14.0 17.5 16.0 * 14.0 10.0 * * * 13.0 * 17.0

Deseu en el fitxer omplertdades.py els generadors següents:

  1. Dissenyeu el generador següent:

    omplertdades.llegir_dades(f)

    Genera un iterador d’anotacions, que poden ser bé nombres reals bé strings '*', a partir de les anotacions contingudes en el fitxer f.

    f ha de ser un fitxer obert per lectura.

    Per exemple, els cinc primers elements d’un fitxer f amb el contingut de l’exemple anterior es podrien obtenir com segueix:

    >>> import omplertdades
    
    >>> it = omplertdades.llegir_dades(f)
    >>> for i in range(5):
    ...     next(it)
    16.0
    18.0
    '*'
    18.5
    19.25
    >>> f.close()  
    

    Disposeu de més jocs de proves al fitxer omplertdades-llegir_dades.txt.

  2. Escriviu el generador següent:

    omplertdades.omple_missings(it)

    Genera un iterador de nombres reals amb els nombres de l’iterador it i amb els asteriscs de it reemplaçats per la dada numèrica precedent.

    El primer element de l’iterador it sempre és un nombre.

    Per exemple:

    >>> import omplertdades
    
    >>> it = iter([1.0, '*', '*', 2.0, 3.0, '*', 4.0])
    >>> it2 = omplertdades.omple_missings(it)
    >>> for d in it2:
    ...     print(d)
    1.0
    1.0
    1.0
    2.0
    3.0
    3.0
    4.0
    

    Disposeu de més jocs de proves al fitxer omplertdades-omple_missings.txt.

  3. Escriviu el generador següent:

    omplertdades.omple_missings2(it)

    Genera un iterador de nombres reals amb els nombres de l’iterador it i amb els asteriscs de it reemplaçats per la mitjana entre les dades numèriques precedent i següent.

    El primer i el darrer elements de l’iterador it sempre són un nombre.

    Per exemple:

    >>> import omplertdades
    
    >>> it = iter([1.0, 2.0, 3.0, '*', 4.0])
    >>> it2 = omplertdades.omple_missings2(it)
    >>> for d in it2:
    ...     print(d)
    1.0
    2.0
    3.0
    3.5
    4.0
    

    Disposeu de més jocs de proves al fitxer omplertdades-omple_missings2.txt.

Solució

Disposeu d’una solució al fitxer omplertdades.py.