1. Quantitats consumides

Volem calcular un resum del consum de materials a partir d’una llista de materials consumits on un mateix material pot aparèixer més d’un cop amb la quantitat consumida expressada en unitats diferents. Els elements d’una llista de materials consumits són tuples de tres elements: el nom del material, la quantitat consumida i les unitats en què s’expressa la quantitat consumida. Per exemple, la llista de materials consumits següent indica que s’han consumit 100 grams de sal i que d’amoníac hi ha hagut dos consums: un de 2 centilitres i un altre de 5 decilitres.


>>> consum = [
...   ('sal', 100, 'dg'),
...   ('amoníac', 2, 'cl'),
...   ('òxid de plom', 0.3, 'kg'),
...   ('aigua', 200, 'l'),
...   ('amoníac', 5, 'dl'),
...   ('aigua', 1, 'dm³'),
...   ('sal', 4, 'lb'),
... ]

Per tal de calcular el resum, cal tenir en compte les unitats de referència en què s’expressaran les quantitats totals. A l’exemple següent, el volum s’expressarà en cm³ i la massa en grams. El canvi d’unitats es farà amb l’ajuda d’un diccionari de canvi d’unitats on les claus són noms d’unitats i el valor corresponent és el factor de conversió a la unitat. Per exemple, al diccionari de canvi d’unitats següent, el factor de conversió de centilitres a centímetres cúbics és 10 i els de kilograms a grams de 1000.


>>> canvi_unitats = {
...   'cm³': 1,
...   'cl': 10,
...   'dl': 100,
...   'l': 1000,
...   'kg': 1000,
...   'g': 1,
...   'lb': 453.59237,
... }

Dissenya la funció següent i desa-la al mòdul quantitats (fitxer quantitats.py).

quantitats.resumeix_quantitats(consum, canvi_unitats)

consum és una llista de materials consumits.

canvi_unitats és un diccionari de canvi d’unitats.

Retorna un diccionari de materials consumits i una llista de materials consumits.

Les claus del diccionari de materials consumits són noms de materials i el valor és la quantitat consumida d’aquest material. La quantitat consumida d’un material es calcula sumant les quantitats del material a consum havent-les convertit a la unitat de referència segons canvi_unitats.

La llista de materials consumits que retorna conté els elements de consum que no s’han pogut convertir a les unitats de referència perquè la unitat del consum no té associat un factor de conversió en canvi_unitats.

Per exemple:


>>> r, n = resumeix_quantitats(consum, canvi_unitats)

>>> if r != {
...   'amoníac': 520,
...   'òxid de plom': 300,
...   'aigua': 200000,
...   'sal': 1814.36948,
... }: print(r)
>>> n
[('sal', 100, 'dg'), ('aigua', 1, 'dm³')]

Trobaràs més tests al fitxer test-resumeix_quantitas.txt.