4. Avaluació de caixes de petards

Una empresa fabrica caixes de petards amb diferents tipus segons la categoria de soroll que fan: baix, mig o alt. Les quantitats de cada categoria que hi ha dins una caixa es representen amb un inventari de caixa que és un diccionari a on les claus son categories i els valors son el nombre de petards de cadascuna a la caixa. Per exemple:

{'baix': 40, 'mig': 70, 'alt': 20}

A més, existeix un diccionari de màxims que té la mateixa estructura que l’anterior però amb els valors representant els màxims de soroll permesos per a cada categoria:

{'baix': 50, 'mig': 80, 'alt': 100}

Dissenya la següent funció i desa-la al fitxer soroll.py:

soroll.supera_soroll(d, dmaxims)

Comprova si alguna categoria de soroll ha superat el màxim permès.

Paràmetres:
  • d (dict) – Diccionari inventari de caixa amb el nombre d’unitats per categoria de soroll.

  • dmaxims (dict) – Diccionari de màxims amb el màxim permès per categoria.

Tipus de retorn:

bool

Retorna:

True si alguna categoria supera el seu màxim; altrament, False.

Per exemple:

>>> supera_soroll({'baix': 40, 'mig': 90, 'alt': 20}, {'baix': 50, 'mig': 80, 'alt': 100})
True
>>> supera_soroll({'baix': 40, 'mig': 70, 'alt': 20}, {'baix': 50, 'mig': 80, 'alt': 100})
False

Nota

Disposes de més tests al fitxer test-supera-soroll.txt.


Per valorar si una caixa és adequada, s’utilitza una puntuació de control que és més alta segons es compleixen menys criteris. Aquesta puntuació es calcula sumant punts segons els següents criteris:

  • 1 punt si la caixa conté 200 unitats o més (excés de càrrega)

  • 2 punts si la caixa té menys de dos petards de tipus baix o menys de dos de tipus mig o ambdues coses.

  • 3 punts si es supera el límit de soroll en alguna categoria

Dissenya la següent funció i desa-la al fitxer soroll.py:

soroll.avalua_caixa(d, dmaxims)

Avalua una caixa de petards a partir del seu resum per categoria de soroll.

Paràmetres:
  • d (dict) – Diccionari amb unitats totals per categoria (baix, mig, alt).

  • dmaxims (dict) – Diccionari amb màxims per categoria.

Retorna:

Un nombre enter que representa la puntuació de la caixa segons els criteris descrits.

Tipus de retorn:

int

Per exemple:

>>> avalua_caixa({'baix': 1, 'mig': 10, 'alt': 190}, {'baix': 50, 'mig': 80, 'alt': 100})
6
>>> avalua_caixa({'baix': 10, 'mig': 10, 'alt': 50}, {'baix': 50, 'mig': 80, 'alt': 100})
0

Nota

Disposes de més tests al fitxer test-avalua-caixa.txt.


Una caixa de petards es representa com una llista de tuples on cada tupla conté el nom d’un petard i el nombre d’unitats. Per exemple:

[('bombeta', 10), ('xino', 20), ('follonero', 60)]

Un catàleg de petards és un diccionari que associa cada nom de petard amb el seu nivell de soroll:

{'bombeta': 'baix', 'xino': 'mig', 'follonero': 'alt'}

Dissenya la següent funció i desa-la al fitxer soroll.py:

soroll.calcula_soroll(lcaixa, cataleg, dmaxims)

Calcula la puntuació de validació de la caixa lcaixa segons els criteris definits.

param list lcaixa:

Llista de tuples (nom_petard, unitats) que defineixen la composició de la caixa.

param dict cataleg:

Diccionari que associa cada nom de petard amb el nivell de soroll (baix, mig o alt).

param dict dmaxims:

Diccionari amb els màxims permesos per cada categoria de soroll.

return:

La puntuació total de la caixa segons les condicions de seguretat i composició.

rtype:

int

Aquesta funció ha de cridar a la funció avalua_caixa().

Per exemple:

>>> caixa = [('bombeta', 1), ('xino', 20), ('follonero', 180)]
>>> cataleg = {'bombeta': 'baix', 'xino': 'mig', 'follonero': 'alt'}
>>> dmaxims = {'baix': 50, 'mig': 80, 'alt': 100}
>>> calcula_soroll(caixa, cataleg, dmaxims)
6
>>> caixa = [('bombeta', 10), ('xino', 20), ('follonero', 60)]
>>> calcula_soroll(caixa, cataleg, dmaxims)
0

Nota

Disposes de més tests al fitxer test-calcula-soroll.txt.

Disposes de solucions al fitxer soroll.py.