Advertisement
teknoraver

esercizio

May 3rd, 2017
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.98 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. '''
  4. Traccia
  5.  
  6. Scrivere un programma python che analizzi il contenuto di un libro memorizzato in un file Libro.txt.
  7. Il programma deve :
  8. 1) leggere tutte le parole contenute nel file e caricarle su una struttura dati adeguata
  9. 2) Trovare tutte le parole ripetute piu` di 10 volte (escludendo le parole piu` corte di 5 caratteri) e stamparle
  10. ordinate per lunghezza.
  11. 3) Stampare, in ordine alfabetico, tutte le parole della stessa lunghezza (considerando solo parole di piu` di 8
  12. caratteri).
  13. Sara` apprezzato l'inserimento dei metodi all'interno di una classe AnalizzaLibro.
  14. '''
  15.  
  16. import sys
  17.  
  18. class AnalizzaLibro:
  19.     """Esercizio"""
  20.  
  21.     def readFile(self, path):
  22.         with open(path, "r") as libro:
  23.             return libro.read().split()
  24.  
  25.     def less5Filter(self, parola):
  26.         return len(parola) < 5
  27.  
  28.     def more8Filter(self, parola):
  29.         return len(parola) > 8
  30.  
  31.     def conta(self, parole):
  32.         ret = {}
  33.         for parola in parole:
  34.             parola = parola.lower()
  35.             if parola not in ret:
  36.                 ret[parola] = 1
  37.             else:
  38.                 ret[parola] = ret[parola] + 1
  39.         return ret
  40.  
  41.     def rep10(self, parole):
  42.         parole = self.conta(parole)
  43.         ret = []
  44.         for k,v in parole.iteritems():
  45.             if v > 10:
  46.                 ret.append(k)
  47.  
  48.         return ret
  49.  
  50.     def indicizza_length(self, parole):
  51.         ret = {}
  52.         for k in parole:
  53.             k = k.lower()
  54.             if len(k) not in ret:
  55.                 ret[len(k)] = [k]
  56.             else:
  57.                 ret[len(k)].append(k)
  58.  
  59.         return ret
  60.  
  61.     def same_length(self, parole):
  62.         parole = self.indicizza_length(parole)
  63.  
  64.         for length in sorted(parole):
  65.             print "Lunghezza {}".format(length)
  66.             for p in sorted(parole[length]):
  67.                 print " " + p
  68.  
  69. def main():
  70.     if len(sys.argv) != 2:
  71.         print "usage: " + sys.argv[0] + " <file>"
  72.         sys.exit(1)
  73.  
  74.     analizzatore = AnalizzaLibro()
  75.  
  76.     parole = analizzatore.readFile(sys.argv[1])
  77.     less5 = filter(analizzatore.less5Filter, parole)
  78.     more8 = filter(analizzatore.more8Filter, parole)
  79.  
  80.     print analizzatore.rep10(less5)
  81.     analizzatore.same_length(more8)
  82.  
  83. if __name__ == "__main__":
  84.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement