2. Lleure [6p]

L’objectiu és fer un recomanador d’activitat a fer fora de la feina en funció del dia de la setmana i de l’estat d’ànim. Amb aquest objectiu es demana que al mòdul lleure (fitxer lleure.py) facis les següents funcions (es recomana que les facis en aquest ordre).

La primera funció a fer és:

calc_anim(n_sero)
donat el float n_sero que indica el nivell de serotonina mesurat en ng/ml
retorna
  • un bool que val True si el valor n_sero està dins l’interval 101.0 - 283.0 inclosos i False altrament.

  • un str que val 'baix' si n_sero està entre 101.0 i 150.0 inclosos, 'mig' si està entre 150.0 i 230.0 (exclosos), 'alt' si val 230.0 o més, i '' (string buit) si el valor anterior és False.

Per exemple:


>>> calc_anim(101.0)
(True, 'baix')
>>> calc_anim(150.1)
(True, 'mig')
>>> calc_anim(230.0)
(True, 'alt')
>>> calc_anim(0.0)
(False, '')
>>> calc_anim(300.0)
(False, '')

Disposes dels tests al fitxer calc_anim-test.txt.

Seguidament es demana la funció:

tria_act(dia, plou, anim):
donats
  • un str dia

  • un bool plou

  • un str anim que val 'baix', 'mig' o 'alt'

retorna un str que val, o bé 'error' si dia no és un str que representa un dia ('dl', 'dm', 'dx', 'dj', 'dv', 'ds', 'dg'), o bé una activitat ('ball', 'copa', 'casa', 'teatre' o 'festa') determinat segons les regles següents:
  • Si és un dia entre setmana excepte dijous aleshores: si l’ànim és mig o alt i no plou aleshores anar a ballar sinó o bé anar al teatre si no plou o be quedar-se a casa si ho fa.

  • Si és dijous aleshores si l’anim es baix anar a prendre una copa i sinó anar a ballar.

  • Si es cap de setmana aleshores: si no plou i l’anim és mig o alt s’ha de sortir de festa i sinó el millor és quedar-se a casa.

Per exemple:


>>> tria_act('dl', False, 'baix')
'teatre'
>>> tria_act('dl', True, 'baix')
'casa'

>>> tria_act('dj', False, 'mig')
'ball'
>>> tria_act('dj', True, 'baix')
'copa'

>>> tria_act('dv', True, 'mig')
'casa'
>>> tria_act('dv', False, 'mig')
'festa'

Disposes de:

  • Les funcions es_capde() (True si rep un dia del cap de setmana) i es_diari() (True si rep un dia entre setmana) que estan fetes al fitxer dies.py. Si les vols aprofitar només les has de copiar en el teu mòdul lleure.py.

  • Els tests al fitxer tria_act-test.txt.

Finalment, la funció principal (es demana que la facis fent ús de les funcions anteriors):

recomana(dia, plou, n_sero, n_mov_acc):
que donats
  • un str dia

  • un bool plou

  • un float n_sero que indica el nivell de serotonina mesurat en ng/ml

  • un float n_mov_acc tal que n_mov_acc \(>= 0.0\) i que indica el nombre d’activitats que són físiques (que són 'ball' i 'festa') fetes fins ara.

retorna dos valors:
  • un str que indica:

    • o bé l’activitat recomanada segons les regles indicades a la funció anterior

    • o bé 'metge' si n_sero no es troba dins l’interval 101 - 283 (no es dona que \(101.0 <= n\_sero <= 283.0\))

    • o bé dia_erroni si dia no és un str que representa un dia ('dl', 'dm', 'dx', 'dj', 'dv', 'ds', 'dg').

  • un int amb el nombre d’activitats de moviment acumulades. Aquest es calcula sumant 1 el valor rebut de n_mov_acc si l’activitat recomanada és 'ball' o 'festa'. En cas d”``”dia_erroni”`` o 'metge' retorna n_mov_acc inalterat.

Per exemple:


>>> recomana('dl', False, 200, 40)
('ball', 41)
>>> recomana('dl', False, 110, 40)
('teatre', 40)

>>> recomana('dj', False, 120, 40)
('copa', 40)
>>> recomana('dj', False, 100, 40)
('metge', 40)

>>> recomana('ds', False, 250, 40)
('festa', 41)
>>> recomana('ds', True, 250, 40)
('casa', 40)

>>> recomana('d_', False, 200, 40)
('error', 40)

Disposes dels tests al fitxer recomana-test.txt.

Nota

Has de lliurar totes aquestes funcions amb el nom exacte indicat, totes en el mateix fitxer lleure.py.

Solució

Disposes de d’una solució correcte al fitxer lleure.py.