#! /usr/bin/env python
def leggere_dati(nome_di_file) :
""" Legge il file e restituice una lista con i dati. Ogni
elemento della lista e un dizionario che corresponde con una
riga del file. La prima parola della riga viene salvato nel
dizionario sotto parolachiave 'Cognome', le altre fino a
penultima sotto 'Nomi' e la ultima parola viene intepretato
come una cifra e salvato sotto 'Stipendio'."""
import fileinput
import re
dati = []
file = fileinput.input(nome_di_file)
parole = re.split('\W+',file.readline())
while (parole != ['']) :if len(parole) > 1 and » re.match("\d+(\.\d+)?", parole[-2]) != None and » re.match("[\d\w\s-]+", reduce(lambda a,b: a+b, » parole[0:-2])) != None :
dati.append(
{'Cognome' : parole[0],
'Nomi' : parole[1:-2],
'Stipendio' : float(parole[-2])})else :
print "Carattere invalido nel input in leggere_dati"
print parole
return Noneparole = re.split('\s',file.readline())
return dati
def calcolare_tasse(limiti, stipendio) :
""" Calcola tasse secondo i limiti progressivi e stipendio.
Restituice il risultato come float. I limiti devono essere dati
come una lista di coppie di limite e percentuale. I limiti
devono essere progressivi. Limite 'None' corrisponde alla tassa
generale."""
tasse = 0.0
limite_basso = 0.0
if stipendio < 0 :print 'Stipendio invalidio in calcolare_tasse'
return None
for limite_alto, percentuale in limiti :
if limite_alto != None and limite_basso >= limite_alto :print "Limiti invalidi in calcolare_tasse"
return None
if limite_alto == None or stipendio <= limite_alto :tasse = tasse + (stipendio - limite_basso) »> * percentuale
return tassetasse = tasse + (limite_alto-limite_basso) * percentuale
limite_basso = limite_altoreturn tasse
import sys
limiti = [(1234, 0.1), (2345, 0.2), (3456, 0.3), (4567, 0.4),
(5678,0.5), (6789, 0.6), (None, 0.8)]
if len(sys.argv) > 1 :
dati = leggere_dati(sys.argv[1])
else :
dati = leggere_dati(None)
if dati != None :
for x in dati :
print x['Cognome'], x['Nomi'], ', ', x['Stipendio']
for y in range(len(limiti)-1) :print 'Fino a : ',
print limiti[y],
print ' : ',
print calcolare_tasse(limiti[0:y+1], x['Stipendio'])print 'Totale ( resto a', limiti[-1][1], ') : ',
print calcolare_tasse(limiti, x['Stipendio'])
print '—- '