Estels

Els observatoris astronómics permeten mesurar amb precisió la distància i la magnitud (brillantor aparent) dels estels. La distància a un estel es mesura en anys llum i la magnitud és un real que té sentit invers a la brillantor: és petit quan l’estel brilla molt, i gran quan brilla poc. Per exemple, la magnitud del Sol és -26.73, i la de Polaris (Estel Polar) +2.01.

Per guardar la informació de alguns estels coneguts es fa servir un diccionari on la clau és el nom de l’estel (un string), i el valor és una tupla de dos reals: la magnitud i la distància a la Terra.

  1. Dissenya la funció magnitud_semblant() que donat un diccionari com el descrit abans, el nom d’un estel s (un string) i una tolerància epsilon (un real), retorna la llista de noms d’estels que tenen una magnitud igual a la de l’estel s, tenint en compte la tolerància epsilon. La llista no ha contenir l’estel s, i ha d’estar ordenada alfabéticament. Podeu suposar que s sempre serà al diccionari.

    Avís

    Recorda que la comparació de la igualtat de dos reals r1 i r2 no es fa amb l’operador == sino que s’ha de tenir en compte una tolerància epsilon: abs(r1-r2) < epsilon

    Desa la funció al fitxer estels.py. La funció ha de passar el següent doctest:

    >>> d1 = { 'Sol': (-26.73, 0.000016),          'Artur': (-0.04, 37),
    ...        'Sirio': (-1.47, 8.6),              'Vega': (0.03, 25),
    ...        'Canopus': (-0.72, 310),            'Rígel': (0.12, 770),
    ...        'Rigil Kentaurus A': (-0.27, 4.4),  'Procyon': (0.34, 11) }
    >>> magnitud_semblant(d1, 'Vega', 0.05)
    []
    >>> magnitud_semblant(d1, 'Vega', 0.1)
    ['Artur', 'Rígel']
    >>> magnitud_semblant(d1, 'Vega', 1.0)
    ['Artur', 'Canopus', 'Procyon', 'Rigil Kentaurus A', 'Rígel']
    

    Nota

    Pots descarregar el fitxer complet amb tests estels1.txt

  2. Dissenya la funció mes_propera_de_magnitud() que donat un diccionari com el descrit abans, un valor de magnitud magn (un real) i una tolerància epsilon (un altre real), retorna el nom de l’estel de magnitud magn (amb la tolerància epsilon donada) que està més a prop de la Terra. Si no hagués cap estel de magnitud magn retorna l’string buit.

    Nota

    Podeu suposar que les distàncies dels estels de magnitud magn seran totes diferents.

    Desa la funció al fitxer estels.py. La funció ha de passar el següent doctest:

    >>> d1 = { 'Sol': (-26.73, 0.000016),  'Nunki': (2.06, 220),
    ...        'Sirio': (-1.47, 8.6),      'Menkent': ((0.1+0.1+0.1)*6+0.26, 61),
    ...        'Canopus': (-0.72, 310),    'Alpheratz': (2.06, 97),
    ...        'Saiph': (2.05, 720),       'Alderamin': (2.44, 49) }
    >>> mes_propera_de_magnitud(d1, 2.05, 0.005)    # només 'Saiph'
    'Saiph'
    >>> mes_propera_de_magnitud(d1, 2.05, 0.02)     # 'Saiph', 'Nunki', 'Menkent', 'Alpheratz'
    'Menkent'
    >>> mes_propera_de_magnitud(d1, 2.06, 0.005)    # 'Nunki', 'Menkent', 'Alpheratz'
    'Menkent'
    >>> mes_propera_de_magnitud(d1, 2.06, 0.0000000000000001)   # 'Nunki', 'Alpheratz'
    'Alpheratz'
    >>> mes_propera_de_magnitud(d1, -1, 0.2)        # cap estel
    ''
    

    Nota

    Pots descarregar el fitxer complet amb tests estels2.txt

Solució

Disposeu de solucions al fitxer estels.py