Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- '''
- Traccia
- Scrivere un programma python che analizzi il contenuto di un libro memorizzato in un file Libro.txt.
- Il programma deve :
- 1) leggere tutte le parole contenute nel file e caricarle su una struttura dati adeguata
- 2) Trovare tutte le parole ripetute piu` di 10 volte (escludendo le parole piu` corte di 5 caratteri) e stamparle
- ordinate per lunghezza.
- 3) Stampare, in ordine alfabetico, tutte le parole della stessa lunghezza (considerando solo parole di piu` di 8
- caratteri).
- Sara` apprezzato l'inserimento dei metodi all'interno di una classe AnalizzaLibro.
- '''
- import sys
- class AnalizzaLibro:
- """Esercizio"""
- def readFile(self, path):
- with open(path, "r") as libro:
- return libro.read().split()
- def less5Filter(self, parola):
- return len(parola) < 5
- def more8Filter(self, parola):
- return len(parola) > 8
- def conta(self, parole):
- ret = {}
- for parola in parole:
- parola = parola.lower()
- if parola not in ret:
- ret[parola] = 1
- else:
- ret[parola] = ret[parola] + 1
- return ret
- def rep10(self, parole):
- parole = self.conta(parole)
- ret = []
- for k,v in parole.iteritems():
- if v > 10:
- ret.append(k)
- return ret
- def indicizza_length(self, parole):
- ret = {}
- for k in parole:
- k = k.lower()
- if len(k) not in ret:
- ret[len(k)] = [k]
- else:
- ret[len(k)].append(k)
- return ret
- def same_length(self, parole):
- parole = self.indicizza_length(parole)
- for length in sorted(parole):
- print "Lunghezza {}".format(length)
- for p in sorted(parole[length]):
- print " " + p
- def main():
- if len(sys.argv) != 2:
- print "usage: " + sys.argv[0] + " <file>"
- sys.exit(1)
- analizzatore = AnalizzaLibro()
- parole = analizzatore.readFile(sys.argv[1])
- less5 = filter(analizzatore.less5Filter, parole)
- more8 = filter(analizzatore.more8Filter, parole)
- print analizzatore.rep10(less5)
- analizzatore.same_length(more8)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement