[Python] Ordinare per lunghezza una serie di parole

Messaggioda Patterson » 17/02/2019, 19:23

Ciao a tutti :) .

Ho bisogno di una mano per un esercizietto in Python.

Ho una serie di parole , devo trovare quelle ripetute almeno 20 volte (che siano più lunghe di 7 lettere) e ordinarle in base alla lunghezza(ordine crescente). Mi viene richiesto di usare un dizionario.

Pensavo a questo:

Codice:
def OrdinamentoParole(Parole):
                if len(Parole)==0:
                raise RunTimeError        #ho letto che raise solleva eccezioni -> genera un errore in esecuzione quando qualche condizione non è verificata

                dizionario={}        #creo il dizionario come mi è stato richiesto
               
                 for parola in Parole:        #scorro parola per parola
                 if len(parola)>7:
                          if parola not in dizionario:  #se la parola non è contenuta nel dizionario

                              dizionario[parola]=1

                          else:
 
                               dizionario[parola]+=1



Fin qui può andare?

:arrow: Poi , per prendere quelle ripetute più di 20 volte e ordinarle , pensavo di creare una lista; visto che potrei usufruire di sort per ordinare il tutto. Avrei comunque bisogno di usare il metodo items dei dizionari che potrebbe restituirmi una lista contenente chiave e valore, e forse anche il metodo values che mi restituisce una lista dei valori.

Codice:
a=[]      #mi creo una lista


a.sort()   #uso sort per ordinarla in maniera crescente




Ho qualche problema in questa ultima parte di codice. Qualcuno mi da una mano?

Grazie infinite
Patterson
Starting Member
Starting Member
 
Messaggio: 9 di 22
Iscritto il: 12/02/2019, 02:14

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda Raptorista » 17/02/2019, 22:04

La prima parte mi sembra corretta: costruisci un dizionario di parole di almeno sette lettere, il cui valore è il numero di occorrenze.
Usare sort va bene, ricorda che però devi anche specificare come fare l'ordinamento visto che di default Python usa l'ordinamento lessicografico per le stringhe. Manca anche la parte in cui riempi la lista con le parole ripetute almeno venti volte, sai fare questo?
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5203 di 9616
Iscritto il: 28/09/2008, 19:58

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda Patterson » 17/02/2019, 23:09

Ciao e grazie per avermi risposto.

Manca anche la parte in cui riempi la lista con le parole ripetute almeno venti volte, sai fare questo?

Purtroppo no, sto provando a ragionarci, ma non mi viene in mente nulla.

Ragionando teoricamente, pensavo di creare la lista, fare il controllo se la condizione è verificata(cioè appunto un if con la condizione che il numero della parola presente sia maggiore di 20), e in quel caso "appenderla" alla lista tramite il metodo append, poi fare l'ordinamento con sort(cosa dovrei specificare?mi sfugge qualcosa?) e poi ritornare la lista.

Mi viene difficile tradurla in codice... Sono agli inizi con Python :oops:
Patterson
Starting Member
Starting Member
 
Messaggio: 10 di 22
Iscritto il: 12/02/2019, 02:14

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda Raptorista » 17/02/2019, 23:17

Sei sulla strada giusta!

Nella prima parte del codice hai fatto questo:
Codice:
per ogni parola nella lista
  se ha una lunghezza maggiore di 7
    la aggiungo al dizionario


Adesso vuoi fare questo:
Codice:
per ogni parola nel dizionario
  se ha più di 20 occorrenze
    la aggiungo alla lista


Tenendo conto di come parole e occorrenze corrispondono a valori e chiavi nel dizionario, dovresti riuscire a scriverlo.

Patterson ha scritto:poi fare l'ordinamento con sort(cosa dovrei specificare?mi sfugge qualcosa?)

Ti sfugge qualcosa riguardo sort, te ne accorgerai quando ci sbatterai il naso.
Patterson ha scritto: e poi ritornare la lista.

Restituire [transitivo], non ritornare [intransitivo].
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5206 di 9616
Iscritto il: 28/09/2008, 19:58

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda Patterson » 17/02/2019, 23:49

Penso che potrei usare un contatore per le occorrenze (count), e procedere come prima.

Restituire [transitivo], non ritornare [intransitivo].

Lo so, è che lo sento dire così spesso(anche da prof) che ormai lo uso(errando) anch'io.
Patterson
Starting Member
Starting Member
 
Messaggio: 11 di 22
Iscritto il: 12/02/2019, 02:14

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda anonymous_be1147 » 18/02/2019, 00:01

In realtà, ritornare è sia intransitivo che transitivo (nel senso di rendere, restituire): http://www.treccani.it/vocabolario/ritornare/
anonymous_be1147
Cannot live without
Cannot live without
 
Messaggio: 1796 di 3226
Iscritto il: 02/03/2006, 20:20

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda Raptorista » 18/02/2019, 00:12

Nella pagina che hai riportato, quest'uso è marcato come "significato proprio di alcuni usi regionali", il che significa che è una forma di uso dialettale, non di italiano standard.
Lo Zingarelli, poi, marca quest'uso come "meridionale".
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5207 di 9616
Iscritto il: 28/09/2008, 19:58

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda axpgn » 18/02/2019, 00:22

Se noti, nel riquadro a destra scrive "non comune" e "familiare" quindi si può usare :-D … peraltro ti assicuro che non è solo meridionale :wink:
axpgn
Cannot live without
Cannot live without
 
Messaggio: 13006 di 40640
Iscritto il: 20/11/2013, 22:03

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda axpgn » 18/02/2019, 00:36

Sul sito della Crusca
axpgn
Cannot live without
Cannot live without
 
Messaggio: 13008 di 40640
Iscritto il: 20/11/2013, 22:03

Re: [Python] Ordinare per lunghezza una serie di parole

Messaggioda Raptorista » 18/02/2019, 00:53

"Sul sito della Crusca" è un po' ingannevole, visto che hai citato un passaggio da un forum, che potrebbe essere stato scritto da chiunque.
Allora: se bisogna trasformare una minuzia grammaticale in una guerra di trincea per mancanza di passatempi, mi metto l'anima in pace e abbandono subito la discussione, perché questioni come queste si possono volutamente trascinare all'infinito nemmeno fossero cause contro Berlusconi.
Nello stesso link che hai discusso, nel resto della discussione, sono riportate solo occorrenze letterarie di tale uso, mentre è riportato che Duro/Treccani e De Mauro lo etichettano come regionalismo meridionale, proprio come fa Zingarelli. Se ne sai più di tutta questa gente, ti faccio i miei complimenti e hai la mia benedizione per ritornare a ritornare cose.
In ogni caso, questa discussione riguarda [Python] e mi piacerebbe che continuasse ad essere così.

@Patterson: per piacere, ignora questi battibecchi e continua col tuo pezzo di codice.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5208 di 9616
Iscritto il: 28/09/2008, 19:58


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite