Botiga de roba

Una empresa de fabricació de roba utilitza un diccionari per cada botiga on emmagatzema informació sobre l’estoc disponible. Concretament cada clau és una tupla formada pel codi del model, la talla i el color (tots tres strings) i el valor associat és el nombre de peces d’aquest model, talla i color que hi ha a la botiga.

Guarda totes les funcions en un mateix fitxer amb el nom botigaroba.py.

  1. Dissenya la funció incrementa_estoc() que donat un diccionari amb l’estoc d’una botiga, tres strings que indiquen un model, una talla i un color, respectivament, i un enter que especifica una quantitat de peces, modifica el diccionari afegint aquesta quantitat de peces per al model, talla i color indicat.

    >>> d = {('Pan85', 'XS','negre'):100,('Pan85','S','negre'):300,
    ... ('Pan85','XS','blau'):6,('Pan87','S','blau'):5,
    ... ('Pan87','L','blau'):12}
    >>> incrementa_estoc(d,'Pan85','S','negre',10)
    >>> d == {('Pan85', 'XS','negre'):100,('Pan85','S','negre'):310,
    ... ('Pan85','XS','blau'):6,('Pan87','S','blau'):5,
    ... ('Pan87','L','blau'):12}
    True
    >>> incrementa_estoc(d,'Pan85','M','negre',10)
    >>> d == {('Pan85', 'XS','negre'):100,('Pan85','S','negre'):310,
    ... ('Pan85','XS','blau'):6,('Pan87','S','blau'):5,
    ... ('Pan87','L','blau'):12,('Pan85','M','negre'):10}
    True
    

    Nota

    Podeu baixar el fitxer amb tests botiga1.txt

  2. Dissenya la funció decrementa_estoc que donat un diccionari amb l’estoc d’una botiga, tres strings que indiquen un model, una talla i un color, respectivament, i un enter que especifica una quantitat de peces, modifica el diccionari treient aquesta quantitat de peces per al model, talla i color indicat. Suposarem que al diccionari sempre hi ha peces suficients per restar la quantitat indicada.

    >>> d = {('Pan85', 'XS','negre'):100,('Pan85','S','negre'):300,
    ... ('Pan85','XS','blau'):6,('Pan87','S','blau'):5,
    ... ('Pan87','L','blau'):12}
    >>> decrementa_estoc(d,'Pan85','XS','blau',2)
    >>> d == {('Pan85', 'XS','negre'):100,('Pan85','S','negre'):300,
    ... ('Pan85','XS','blau'):4,('Pan87','S','blau'):5,
    ... ('Pan87','L','blau'):12}
    True
    

    Nota

    Podeu baixar el fitxer amb tests botiga2.txt

  3. Dissenya la funció estoc_baix que donat un diccionari amb l’estoc d’una botiga i un enter n, retorna una llista amb les peces amb un estoc menor que n. Cada model estarà representat per una tupla amb el model, la talla i el color.

    >>> d = {('Pan85', 'XS','negre'):100,('Pan85','S','negre'):300,
    ... ('Pan85','XS','blau'):6,('Pan87','S','blau'):5,
    ... ('Pan87','L','blau'):12,('Pan85','M','blanc'):6,
    ... ('Pan85','L','blanc'):5,('Cam23','XL','blanc'):12}
    >>> lresultat = estoc_baix(d,10)
    >>> lresultat.sort()
    >>> lresultat == [('Pan85','L','blanc'), ('Pan85','M','blanc'),
    ... ('Pan85','XS','blau'), ('Pan87','S','blau')]
    True
    

    Nota

    Podeu baixar el fitxer amb tests botiga3.txt

  4. Dissenya la funció actualitza_estoc que donat un diccionari amb l’estoc d’una botiga, una llista de vendes, i una llista de reposició, modifica el diccionari restant les vendes de la primera llista i sumant els afegits de la segona. A les dues llistes cada element és una altra llista que conté tres strings indicant un model, un color i una talla, respectivament, i un enter que indica la quantitat venuda o afegida a l’estoc. Aquesta funció ha d’utilitzar les funcions incrementa_estoc i decrementa_estocs dissenyades als apartats anteriors.

    >>> d = {('Pan85', 'XS','negre'):100,('Pan85','S','negre'):300,
    ... ('Pan85','XS','blau'):6,('Pan87','S','blau'):5,
    ... ('Pan87','L','blau'):12,('Pan85','M','blanc'):6,
    ... ('Pan85','L','blanc'):5,('Cam23','XL','blanc'):12}
    >>> lvendes = [['Pan87','S','blau',3],['Cam23','XL','blanc',9],
    ... ['Pan87','L','blau',1]]
    >>> lrepo = [['Pan87','L','blau',5],['Cam23','S','blau',5]]
    >>> actualitza_estoc(d,lvendes,lrepo)
    >>> d == {('Pan85', 'XS','negre'):100,('Pan85','S','negre'):300,
    ... ('Pan85','XS','blau'):6,('Pan87','S','blau'):2,
    ... ('Pan87','L','blau'):16,('Pan85','M','blanc'):6,
    ... ('Pan85','L','blanc'):5,('Cam23','XL','blanc'):3,
    ... ('Cam23','S','blau'):5}
    True
    
    

    Nota

    Podeu baixar el fitxer amb tests botiga4.txt

Solució

Disposeu de solucions al fitxer botigaroba.py.