Pagina 1 di 1

[Python] Ordinare per lunghezza una serie di parole

MessaggioInviato: 17/02/2019, 19:23
da Patterson
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

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

MessaggioInviato: 17/02/2019, 22:04
da Raptorista
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?

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

MessaggioInviato: 17/02/2019, 23:09
da Patterson
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:

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

MessaggioInviato: 17/02/2019, 23:17
da Raptorista
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].

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

MessaggioInviato: 17/02/2019, 23:49
da Patterson
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.

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

MessaggioInviato: 18/02/2019, 00:01
da anonymous_be1147
In realtà, ritornare è sia intransitivo che transitivo (nel senso di rendere, restituire): http://www.treccani.it/vocabolario/ritornare/

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

MessaggioInviato: 18/02/2019, 00:12
da Raptorista
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".

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

MessaggioInviato: 18/02/2019, 00:22
da axpgn
Se noti, nel riquadro a destra scrive "non comune" e "familiare" quindi si può usare :-D … peraltro ti assicuro che non è solo meridionale :wink:

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

MessaggioInviato: 18/02/2019, 00:36
da axpgn
Sul sito della Crusca

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

MessaggioInviato: 18/02/2019, 00:53
da Raptorista
"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.