Magatzem ======== En una botiga es ven en exclusiva roba d'una prestigiosa marca. La botiga només té en estoc alguns models de la marca però disposa del catàleg de preus de tots els productes de la marca per si n'ha d'encarregar algun. Un producte s'identifica amb el seu nom que es representa amb un string. Tots els productes que la botiga té en estoc han de ser al catàleg però no a l'inrevés. 1. En un mòdul ``magatzem.py`` dissenyeu la classe :py:class:`Magatzem` que permet representar una botiga com la descrita: .. py:class:: Magatzem(catàleg = {}, estoc = {}) Atributs: .. py:attribute:: catàleg Diccionari que associa a cada producte del catàleg el seu preu .. py:attribute:: estoc Diccionari que associa a cada producte de la botiga el nombre d'unitats de què es disposa (un enter superior a 0). Mètodes: .. py:method:: producteEnCataleg(producte) Retorna True si el producte és al catàleg i False en cas contrari. .. py:method:: producteEnEstoc(producte) Retorna True si el producte és a l'estoc i False en cas contrari. .. py:method:: preuProducte(producte) Retorna el preu d'un producte del catàleg. Suposeu que el producte donat és al catàleg. .. py:method:: nombreUnitatsProducte(producte) Retorna el nombre d'unitats del producte que hi ha en estoc. Suposeu que el producte donat és a l'estoc. .. py:method:: eliminarProducteCataleg(producte) Elimina el producte donat del catàleg. Suposeu que el producte donat és al catàleg. Per tal de garantir la consistència de les dades, només es poden eliminar del catàleg els productes que no són a l'estoc. .. py:method:: afegirProducteCataleg(producte, preu) Afegeix un nou producte al catàleg. .. py:method:: eliminarProducteEstoc(producte) Elimina el producte donat de l'estoc. Suposeu que el producte donat és a l'estoc. .. py:method:: afegirProducteEstoc(producte, unitats) Afegeix un nou producte a l'estoc. Només s'hi afegirà si el producte és un dels del catàleg. .. py:method:: valorEstoc() Indica el valor total de l'estoc calculat com la suma dels preus de tots els productes que hi ha al magatzem. 2. En el mòdul ``lamevabotiga.py`` dissenyeu la funció `comanda(mag, lnoms)`, que donada una instància a la classe magatzem i una llista de noms de productes retorni el nombre de productes de la llista que són del catàleg però dels quals no n'hi ha en estoc, així com la suma dels preus unitaris d'aquests productes. 3. En el mateix modul ``lamevabotiga.py`` dissenyeu la funció `remesa(mag, lrem)` que actualitzi el magatzem a partir d'una llista de tuples representant una remesa de productes que arriba al magatzem. Els tuples tenen dos elements: el nom i el nombre d'unitats d'un producte. Aquesta funció ha de retornar una llista amb aquells productes equivocats, és a dir, aquells productes que la botiga no té en estoc. Aquesta llista ha d'estar ordenada alfabèticament. 4. Per aprofundir, penseu quins altres mètodes poden ser necessaris per a treballar amb la classe :py:class:`Magatzem`, com per exemple un que actualitzi l'estoc després que un client hagi comprat un cert nombre d'unitats d'un producte. .. note:: Disposeu de jocs de proves per a les funcions que heu de dissenyar al fitxer :download:`magatzem.txt`. .. note:: Disposeu de solucions als fitxers :download:`lamevabotiga.py` i :download:`magatzem.py`.