1. Compres (4 punts)

  1. Representem una compra com un string que conté, separat per :, el nom d’un producte, el preu unitari acabat en i el nombre d’unitats. El preu unitari és un nombre real amb coma decimal. Per exemple, a la compra

    'Poma:0,70€:3'
    

    el producte és Poma, el preu unitari és 0,70€ i s’han comprat 3 unitats.

    Dissenya la funció extreu_dades que donat un string amb el format anterior, retorna una tupla amb el preu unitari sense el símbol com a float i el nombre d’unitats com a enter.

    Si el string no conté exactament dos caràcters :, la funció ha de retornar la tupla buida.

    Desa la funció al fitxer compres.py:

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> extreu_dades('Poma:0,70€:3')
    (0.7, 3)
    >>> extreu_dades('Poma:0,70€')
    ()
    

    Disposes de més tests al fitxer test-extreu-dades.txt

  2. Dissenya la funció compara_compres que donats dos strings que representen compres amb el format anterior i una tolerància (float), determina si hi ha algun error o si són iguals o diferents. Concretament, retorna un string segons les regles següents:

    • Retorna 'error' si alguna de les dues compres no conté exactament dues vegades el caràcter :.

    • Retorna 'igual' si els imports totals de les dues compres són iguals amb la tolerància donada.

    • Altrament, retorna 'diferent'.

    Aquesta funció ha de cridar a la funció extreu_dades.

    Desa la funció al fitxer compres.py:

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> compara_compres('Poma:0,70€:3', 'Pera:2,10€:1', 0.000001)
    'igual'
    >>> compara_compres('Iogurt:2,00€:2', 'Formatge:2,30€:3', 0.01)
    'diferent'
    >>> compara_compres('Poma:0,70€', 'Pera:2,10€:1', 0.000001)
    'error'
    

    Disposes de més tests al fitxer test-compara-compres.txt

  3. Dissenya la funció transforma_compres que donada una llista de compres amb el format anterior, una compra de referència (string) i una tolerància (numèrica), modifica la llista de manera que cada compra es substitueix segons les regles següents:

    • Si la comparació amb la referència determina que hi ha error, s’ha de substituir per 'error'.

    • Si la comparació amb la referència determina que són iguals, s’ha de substituir pel string original seguit de *.

    Si no es compleix cap d’aquestes condicions, la compra no es modifica.

    Aquesta funció ha de cridar la funció compara_compres.

    Desa la funció al fitxer compres.py:

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> ls = ['Poma:0,70€:3', 'Pera:1,50€:2', 'Poma:2,10€:1']
    >>> transforma_compres(ls, 'Poma:2,10€:1', 0.000001)
    >>> ls
    ['Poma:0,70€:3*', 'Pera:1,50€:2', 'Poma:2,10€:1*']
    
    >>> ls = ['Suc:0,10€:3', 'Aigua:0,30€:1', 'Aigua:0,30€']
    >>> transforma_compres(ls, 'Ref:0,30€:1', 0.001)
    >>> ls
    ['Suc:0,10€:3*', 'Aigua:0,30€:1*', 'error']
    

    Disposes de més tests al fitxer test-transforma-compres.txt

    Disposes de solucions al fitxer compres.py.