2. Fidelització (3,5 punts)

Una botiga fa una sèrie de descomptes als clients que estan inscrits en un programa de fidelització i, alhora, participa en una campanya de donatius a ONGs.

Dissenya la funció preu_punts que donat l’import de la compra (float), els punts de fidelització que té un client (int), un string que indica el tipus de client i un booleà que és True si el client vol participar en la campanya de donatius i False en cas contrari, retorna dos valors: un float amb l’import final a pagar i un int amb la nova quantitat de punts de fidelització del client.

Si l’import donat no és positiu, vol dir que correspon a una devolució i la funció retornarà 0.0 per l’import i 0 pels punts. Si no es compleix l’anterior:

  • El client guanyarà un punt més de fidelització per cada 10 euros de despesa, calculats a partir de l’import donat i abans de fer cap descompte.

  • Si els punts de fidelització (després d’incrementar-los si cal) estan entre 1000 i 2000 (inclòs), es descomptarà un 1% de l’import donat. Si estan entre 2000 i 3000 (inclòs), es descomptarà un 2%. I si son més de 3000, es descomptarà un 3%.

  • Un cop fet els descomptes anteriors i l’increment de punts, si el client és de tipus 'VIP' s’afegiran directament 10 punts més.

  • A l’import calculat amb els descomptes, si el client vol participar en la campanya de donatius, se li afegirà un 1%.

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

>>> imp,punts = preu_punts(53.0,800,'NORMAL',False)
>>> round(imp,2)
53.0
>>> punts
805

>>> imp,punts = preu_punts(-10.0,1100,'NORMAL',False)
>>> round(imp,2)
0.0
>>> punts
0

>>> imp,punts = preu_punts(53.0,2000,'VIP',True)
>>> round(imp,1)
52.5
>>> punts
2015

Disposeu de tests al fitxer test-fidel.txt.

Deseu la funció al fitxer fidelitzacio.py i pugeu-lo a Atenea.

Avís

Els tests proporcionats son només exemples per ajudar a entendre i resoldre el problema. Que la funció superi aquests tests no significa que la funció sigui correcta ni garanteix cap nota. La funció ha de resoldre totes les qüestions plantejades a l’enunciat surtin o no als tests.

Disposeu d’una solució al fitxer fidelitzacio.py