Ús de la classe Núvol de punts

Al fitxer nuvols.py disposeu de la classe NuvolPunts, que permet de representar la temperatura de diversos punts de l’espai 3D en un instant de temps donat. La seva especificació és la següent:

class nuvols.NuvolPunts(temps, punts)

Atributs:

temps

L’instant de temps corresponent a la mesura de temperatura en els punts del núvol (datetime). És el mateix per tots els punts i està inicialitzat amb el valor del paràmetre temps (datetime).

Aquesta classe ha de suportar les operacions següents:

Operació

Resultat

n[idpunt]

Retorna la temperatura del punt d’identificador idpunt del núvol n, o «Unknown» si idpunt no correspon a cada punt del núvol.

n[idpunt] = t

Assigna la temperatura t al punt d’identificador idpunt del núvol n. Si no hi ha cap punt amb l’identificador donat idpunt, l’afegeix al núvol.

La classe és iterable per identificadors de punts.

El paràmetre punts és una llista de tuples (idpunt, temp) essent idpunt l’identificador d’un punt (str) i temp la temperatura mesurada en aquest punt.

  1. Descarregueu el fitxer nuvols.py. En un interpret de python, intenteu crear una instància de la classe. Consulteu i modifiqueu la temperatura en un punt. Proveu els doctests tests-nuvol.txt

  2. En el mòdul usa_nuvol (fitxer usa_nuvol.py), implementeu la funció següent:

    iter_calents(nuvol, temp)
    Paràmetres:
    • nuvol – una instància de la classe NuvolPunts.

    • temp – un valor de temperatura float.

    Retorna:

    un iterador dels punts de nuvol que estan a un temperatura superior a temp.

Vegeu per exemple:


>>> data = datetime(2023, 2, 22, 10, 30)
>>> n = NuvolPunts(data, [('IP1', 34), ('IP44', 35), ('IP51', 35.3)])
>>> from usa_nuvol import iter_calents
>>> it = iter_calents(n, 35)
>>> next(it)
'IP51'
>>> next(it)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

Avís

Per a resoldre aquest exercici no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar els elements d’un iterador. Tampoc es poden utilitzar for ni while.

Disposeu de més tests al fitxer tests-usa_nuvol.txt i d’una solució usa_nuvol.py