Pensions

Les despeses d’un conjunt de pensionistes s’emmagatzemen en una llista de llistes on cada subllista representa la informació d’un pensionista i està formada per l’identificador del pensionista (string), un enter que indica l’edat i una sèrie de despeses mensuals enregistrades (enters). En el següent exemple, la persona amb identificador “1111A” té 68 anys i tres despeses mensuals de 640, 589 i 573.

[['1111A',68,640,589,573], ['2222D',69,710,550,570,698,645,512]]

Desa totes les funcions al fitxer pensions.py.

  1. Dissenya la funció despesa_mitjana que donada una llista amb la informació d’un sol pensionista, retorna la despesa mitjana mensual.

    La funció ha de passar el següent doctest:

    >>> p = ['1111A',68,640,589,573]
    >>> d = despesa_mitjana(p)
    >>> round(d, 2)
    600.67
    
    >>> p = ['2222D',69,710,550,570,698,645,512]
    >>> d = despesa_mitjana(p)
    >>> round(d, 2)
    614.17
    

    Nota

    Podeu descarregar el fitxer amb tests test-despesa-mitjana.txt

  2. Dissenya la funció llista_desp_mitjanes que donada una llista de pensionistes retorna una altra llista amb la despesa mitjana mensual de cada persona arrodonida a dos decimals. La llista ha d’estar ordenada de forma ascendent.

    La funció ha de passar el següent doctest:

    >>> l = [['1111A',68,640,589,573],['2222D',69,710,550,570,698,645,512],
    ... ['3333J',72,530,534],['4444N',75,770,645,630,650,590,481,602]]
    >>> ld = llista_desp_mitjanes(l)
    >>> ld
    [532.0, 600.67, 614.17, 624.0]
    

    Nota

    Podeu descarregar el fitxer amb tests test-llista-desp-mitjanes.txt

  3. Dissenya la funció desp_mitjana_sup que donada una llista de pensionistes i una despesa d retorna una altra llista amb l’identificador i l’edat de la primera persona que tingui una mitjana de despesa superior a d. En cas de que no n’hi hagi cap, la funció retornarà la llista buida.

    La funció ha de passar el següent doctest:

    >>> l = [['1111A',68,640,589,573],['2222D',69,710,580,600,698,605,572],\
    ... ['3333J',72,530,534],['4444N',75,770,655,630,650,610,491,632]]
    
    >>> desp_mitjana_sup(l, 625)
    ['2222D', 69]
    
    >>> desp_mitjana_sup(l, 1000)
    []
    

    Nota

    Podeu descarregar el fitxer amb tests test-desp-mitjana-sup.txt

  4. Dissenya la funció despesa_superior que donada una llista amb la informació d’un sol pensionista i una despesa d, retorna True si hi ha alguna despesa superior a d i False altrament.

    La funció ha de passar el següent doctest:

    >>> l = ['1111A',68,640,589,573]
    >>> despesa_superior(l,580)
    True
    >>> despesa_superior(l,641)
    False
    

    Nota

    Podeu descarregar el fitxer amb tests test-despesa-superior.txt

  5. Dissenya la funció llista_desp_sup que donada una llista de pensionistes i una despesa d retorna una llista de tuples amb les persones que tenen alguna de les seves despeses mensuals superior a d. Cada tupla tindrà dos elements, l’identificador de la persona i la seva despesa mijana arrodonida a un decimal. Si no n’hi ha cap, la funció retornarà la llista buida. La llista haurà d’estar ordenada ascendentment segons la mitjana.

    La funció ha de passar el següent doctest:

    >>> l = [['1111A',68,640,589,573],['2222D',69,710,580,600,698,705,572],
    ... ['3333J',72,530,534],['4444N',75,770,655,630,650,610,591,632],
    ... ['5555L',68,598,672,612]]
    
    >>> llista_desp_sup(l,650)
    [('5555L', 627.3), ('2222D', 644.2), ('4444N', 648.3)]
    
    >>> llista_desp_sup(l,700)
    [('2222D', 644.2), ('4444N', 648.3)]
    

    Nota

    Podeu descarregar el fitxer amb tests test-llista-desp-sup.txt

  6. Dissenya la funció no_arriba que donada una llista de pensionistes i una despesa d, retorna l’identificador de la primera persona que té alguna despesa mensual superior a d. Si no n’hi ha cap, la funció retornarà un string buit.

    La funció ha de passar el següent doctest:

    >>> l = [['1111A',68,640,589,573], ['2222D',69,710,580,600,698,705,572],
    ... ['3333J',72,530,534],['4444N',75,770,655,630,650,610,491,632]]
    
    >>> no_arriba(l,650)
    '2222D'
    
    >>> no_arriba(l,850)
    ''
    

    Nota

    Podeu descarregar el fitxer amb tests test-no-arriba.txt

  7. Dissenya la funció simula_inflacio que donada una llista amb la informació d’un sol pensionista i un percentatge, modifiqui la llista de manera que incrementi cada despesa mensual amb el percentatge donat i arrodonida a un decimal.

    La funció ha de passar el següent doctest:

    >>> l = ['1111A',68,640,589,573]
    >>> simula_inflacio(l,0.5)
    >>> l
    ['1111A', 68, 643.2, 591.9, 575.9]
    
    >>> l2 = ['2222A',68,640,589,573]
    >>> simula_inflacio(l2,1.3)
    >>> l2
    ['2222A', 68, 648.3, 596.7, 580.4]
    

    Nota

    Podeu descarregar el fitxer amb tests test-simula-inflacio.txt

  8. Dissenya la funció llista_sim_inflacio que donada una llista de pensionistes i un percentatge, modifiqui la llista de manera que les despeses mensuals de cada pensionista s’incrementin amb el percentatge donat i queden arrodonides a un decimal.

    La funció ha de passar el següent doctest:

    >>> l = [['1111A',68,640,589,573], ['2222D',69,710,580,600,698,705,572],
    ... ['3333J',72,530,534],['4444N',75,770,655,630,650,610,491,632]]
    >>> llista_sim_inflacio(l,2)
    >>> l
    [['1111A', 68, 652.8, 600.8, 584.5], ['2222D', 69, 724.2, 591.6, 612.0, 712.0, 719.1, 583.4], ['3333J', 72, 540.6, 544.7], ['4444N', 75, 785.4, 668.1, 642.6, 663.0, 622.2, 500.8, 644.6]]
    

    Nota

    Podeu descarregar el fitxer amb tests test-llista-sim-inflacio.txt

Solució

Disposeu de solucions al fitxer pensions.py