'''Scrivere una funzione parole(txt,A) che, presa una stringa di testo txt ed un intero A, ritorna una lista di liste contenente tanti elementi quante sono le linee nella stringa di testo txt. In posizione i di questa nuova lista c'e' una lista contenente tutte le parole di lunghezza A presenti nella riga i di txt. Le parole occorrono nella lista nello stesso ordine con cui occorrono nella linea di testo. Se la linea non ha parole di lunghezza a, la lista corrispondente nella lista di output e' la lista vuota. Per parola si intende una sequenza di caratteri alfabetici (maiuscoli o minuscoli) di lunghezza massimale. ad esempio, per txt =Sempre caro mi fu quest'ermo colle, E questa siepe, che da tanta parte Dell'ultimo orizzonte il guardo esclude. Ma sedendo e mirando, interminati Spazi di là da quella, e sovrumani Silenzi, e profondissima quiete Io nel pensier mi fingo; ove per poco Il cor non si spaura. E come il vento Odo stormir tra queste piante, io quello Infinito silenzio a questa voce Vo comparando: e mi sovvien l'eterno, E le morte stagioni, e la presente E viva, e il suon di lei. Così tra questa Immensità s'annega il pensier mio: E il naufragar m'è dolce in questo mare. parole(txt,4) restituisce la lista [[caro, ermo], [], [Dell], [], [], [], [poco], [come], [], [voce], [], [], [viva, suon, Così], [], [mare]] mentre parole(txt,6) restituisce la lista [[Sempre], [questa], [ultimo, guardo], [], [quella], [quiete], [], [spaura], [queste, piante, quello], [questa], [eterno], [], [questa], [annega], [questo]] infine: parole(txt,8) restituisce la lista [[], [], [], [], [], [], [], [], [], [Infinito, silenzio], [], [stagioni, presente], [], [], []] ''' # spezziamo il testo in righe # costruiamo una lista in cui ogni elemento contiene le parole della linea corrispondente # tornare solo le parole della lunghezza A def parole(txt,a): '''Implementare qui la funzione''' return [ [ parola for parola in estrai_parole_da_riga(riga) if len(parola) == a ] for riga in txt.split("\n") ] def parole2(txt,a): '''Implementare qui la funzione''' lista_liste = [] for riga in txt.split("\n"): lista = [] for parola in estrai_parole_da_riga(riga): if len(parola) == a: lista.append(parola) lista_liste.append(lista) return lista_liste # usiamo filter per tenere le sole parole della lunghezza giusta def parole3(txt,a): '''Implementare qui la funzione''' righe = txt.split("\n") ris = [] for riga in righe: lista = filter(lambda parola: len(parola)==a, estrai_parole_da_riga(riga)) ris.append(list(lista)) return ris # data una linea ed una linghezza A per tornare la lista di parole di quella lunghezza # spezziamo la lista in corrispondenza dei caratteri non alfabetici def estrai_parole_da_riga(riga): parole = [] parola = '' for carattere in riga: if carattere.isalpha(): parola += carattere else: if parola: # se la parola non è la stringa '' parole.append(parola) parola = '' # potrebbe esserci una parola in fondo alla riga, # non seguita da caratteri non alfabetici, se c'è l'aggiungiamo if parola: # se la parola non è la stringa '' parole.append(parola) return parole if __name__ == '__main__': txt ='''Sempre caro mi fu quest'ermo colle, E questa siepe, che da tanta parte Dell'ultimo orizzonte il guardo esclude. Ma sedendo e mirando, interminati Spazi di là da quella, e sovrumani Silenzi, e profondissima quiete Io nel pensier mi fingo; ove per poco Il cor non si spaura. E come il vento Odo stormir tra queste piante, io quello Infinito silenzio a questa voce Vo comparando: e mi sovvien l'eterno, E le morte stagioni, e la presente E viva, e il suon di lei. Così tra questa Immensità s'annega il pensier mio: E il naufragar m'è dolce in questo mare.''' ris = parole3(txt, 4) print(ris)