Perfums

L’empresa FLAIRES S.A. disposa d’informació sobre els perfums que fabrica emmagatzemada en una llista de llistes on a cada subllista hi ha informació sobre un perfum: nom del perfum (string), nom del tipus de perfum (un string que pot ser 'PARFUM', 'EAU_PARFUM', 'EAU_TOILETTE' o bé 'EAU_COLOGNE'), contingut en ml (enter) i preu en euros (numèric). Es demana que dissenyeu un seguit de funcions, que haureu de desar al fitxer perfums.py

perfums.creaperfums1(lperfums)

Donada una llista de perfums com la descrita, retorna un diccionari a on cada clau és un contingut en ml i cada valor una llista amb els noms dels perfums amb aquest contingut:

>>> l = [['Rochis1', 'EAU_TOILETTE',100,78],['Rochis2','EAU_TOILETTE',50,42],
... ['Challenge','EAU_PARFUM',100,78],['Gege','EAU_COLOGNE',200,43]]
>>> d = creaperfums1(l)
>>> d == {100:['Rochis1','Challenge'], 50:['Rochis2'], 200:['Gege']}
True

Nota

Podeu descarregar el fitxer amb tests test_creaperfums1.txt.

perfums.creaperfums2(lperfums)

Donada una llista de perfums com la descrita, retorna un diccionari a on cada clau és un contingut en ml i cada valor una llista de llistes amb els noms dels perfums amb aquest contingut i el seu preu:

>>> l = [['Rochis1', 'EAU_TOILETTE',100,78],['Rochis2','EAU_TOILETTE',50,42],
... ['Challenge','EAU_PARFUM',100,82],['Gege','EAU_COLOGNE',200,43]]
>>> d = creaperfums2(l)
>>> d == {100:[['Rochis1',78],['Challenge',82]], 50:[['Rochis2',42]],
... 200:[['Gege',43]]}
True


Nota

Podeu descarregar el fitxer amb tests test_creaperfums2.txt.

perfums.espotcomprar1(perfums, euros)

Donat un diccionari com el retornat per la funció crea_perfums2 i una quantitat d’euros, volem saber si hi ha algun perfum al diccionari que es pugui comprar amb aquesta quantitat.

Per fer-ho, es demana en primer lloc una funció hi_ha_perfum(), que donada una llista de subllistes de dos elements (un string i un enter que representen respectivament, el nom del perfum i el preu) i un enter anomemat quant retorna True si hi ha algun perfum en la llista amb un preu inferior a quant i False en cas contrari.

Utilitzant aquesta funció, implementa espotcomprar1() que retorna True si al diccionari donat hi ha algun perfum que es pugui comprar amb aquesta quantitat i False en cas contrari:

>>> l=[['Rochis1',73],['Challenge',82], ['Rochis2',42],['Gege',43]]
>>> hi_ha_perfum(l, 50)
True
>>> hi_ha_perfum(l, 40)
False
>>> d = {100:[['Rochis1',78],['Challenge',82]],
... 50:[['Rochis2',42]],200:[['Gege',43]]}
>>> espotcomprar1(d,50)
True
>>> espotcomprar1(d,25)
False

Nota

Podeu descarregar el fitxer amb tests test_espotcomprar1.txt.

perfums.espotcomprar2()

Donat un diccionari com el retornat per la funció crea_perfums2 i una quantitat en euros, retorna una llista amb els noms dels perfums que tenen un preu que no supera aquesta quantitat. La llista ha d’estar ordenada alfabèticament.

En aquest cas, implementa una funció hi_ha_perfum2() que a partir d’una llista de subllistes de dos elements (nom i preu dels perfums) i d’un enter retorna la llista de tots els perfums que tenen un preu inferior a aquesta quantitat. Igual que en l’apartat anterior, fes servir aquest funció per implementar crea_perfums2. La llista ha d’estar ordenada alfabèticament:

>>> l=[['Rochis1',73],['Challenge',82], ['Rochis2',42],['Gege',43]]
>>> hi_ha_perfum2(l, 50)
['Gege', 'Rochis2']
>>> hi_ha_perfum2(l, 80)
['Gege', 'Rochis1', 'Rochis2']
>>> hi_ha_perfum2(l, 40)
[]

>>> d = {100:[['Rochis1',78],['Challenge',82]],
... 50:[['Rochis2',42]],200:[['Gege',43]]}
>>> espotcomprar2(d,50)
['Gege', 'Rochis2']
>>> espotcomprar2(d,25)
[]

Nota

Podeu descarregar el fitxer amb tests test_espotcomprar2.txt.

Solució

Disposeu d’una solució al fitxer perfums.py.