Tarifa plana 2

Les dades dels clients d’una companyia de telefonia mòbil s’emmagatzemen en un fitxer de consums en què cada línia representa un client i està formada per un identificador de client, un enter que indica el nombre de MB (Megabytes) de tarifa plana que te assignats i una sèrie d’enters que representen diferents consums en MB d’aquest client. Per exemple, algunes línies del fitxer podria ser:

444B, 200, 70, 40, 120
333A, 200, 35, 50
555C, 100, 30, 23, 30, 60

a on el primer client, amb identificador 444B te una tarifa plana fins a 200MB i ha enregistrat tres consums, un de 70MB, un de 40MB i un de 120MB.

Desa totes les funcions següents al fitxer tarifa_plana2.py.

tarifa_plana2.extreu_client_tarifa_consums(linia)

linia és un string amb el format de les línies d’un fitxer de consums.

Retorna l’identificador del client, la tarifa (int) i la llista de consums (int) que hi ha a linia.

Per exemple:


>>> ic, tf, cn = extreu_client_tarifa_consums('444B, 200, 70, 40, 120')
>>> ic
'444B'
>>> tf
200
>>> cn
[70, 40, 120]

Trobaràs més tests al fitxer test-extreu_client_tarifa_consums.txt.

Aquesta funció et resultarà útil per dissenyar les tres funcions següents.

  1. Dissenya la funció total_tarifa que donat el nom d’un fitxer de consums i un enter t, retorna el total de consums de tots els clients que tenen assignada una tarifa plana de t MB.

    Aquests son exemples de tests que ha de passar la funció:

    >>> total_tarifa('consums.txt',200)
    315
    >>> total_tarifa('consums.txt',100)
    265
    

    Trobaràs més tests al fitxer test-total_tarifa.txt. Abans de passar els tests, descarrega el fitxer consums.txt.

  2. Dissenya la funció despesa_forta que donat el nom d’un fitxer de consums, retorna una llista amb els identificadors dels clients que hagin enregistrat algun consum individual superior al límit assignat. La llista tindrà el mateix ordre en que apareixen els identificadors al fitxer.

    Aquest és un exemple de test que ha de passar la funció:

    >>> despesa_forta('consums2.txt')
    ['555C', '111D', '777W']
    

    Trobaràs més tests al fitxer test-despesa_forta.txt. Abans de passar els tests, descarrega el fitxer consums2.txt.

  3. Dissenya la funció llistat que, donats els noms d’un fitxer de consums, el nom d’un segon fitxer i un preu (float), escriu al segon fitxer els clients que tenen un consum total superior a l’assignat de manera que aparegui un client per línia amb el seu identificador, un espai en blanc i la quantitat en euros extra que ha de pagar arrodonida a un decimal. Aquesta quantitat és el resultat de multiplicar el nombre de MB que el client ha gastat de més respecte dels que té assignats a la seva tarifa plana pel preu donat. Aquells clients que no han superat els MB assignats no han d’aparèixer al fitxer.

    Per exemple, si fem la crida

    >>> llistat('consums.txt','resultat1.txt',0.12)
    

    amb el fitxer consums.txt del primer apartat, s’hauria de crear el fitxer resultat1.txt amb el següent contingut:

    444B 3.6
    555C 5.2
    777W 0.1
    

    Trobaràs tests al fitxer test-llistat.txt. Aquests tests usen els fitxers consums.txt i consums2.txt que has descarregat abans.

Solució

Disposes de solucions al fitxer tarifa_plana2.py