Forum
>>
Principianti
>>
list index out of range PERCHE'?
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da SalvCai |
2018-01-20 16:19:06 - list index out of range PERCHE'?
|
dopo aver popolato una lista con i numeri che vanno da 2 a 10000 devo eliminare da essa i multipli di 2, 3, 4, escludendo il 2, 3, 4, .... fino al numero 100
def popola(lista): for i in range(9998): lista.append(i+2) return (lista) def elimina(lista,n): for i in range(len(lista)): if lista%n==0: lista.remove(lista) return (lista) def main(): lista = [] lista = popola(lista) for n in range(2,101): lista = elimina(lista,n) for i in range(len(lista)): print (lista,end=" ") return main()il codice si blocca qui: if lista%n==0:penso di aver individuato il problema, aggiornamento della dimensione lista, ma come posso fare a risolverlo? Grazie a tutti e buon week end Salvatore |
|
Scritto da Daniele aka Palmux |
2018-01-20 22:33:54 - Re: list index out of range PERCHE'?
|
Ciao caro, ora non posso provare il tuo codice visto che sono in giro, ma credo sia facile capire che non puoi fare quell'operazione con una lista, non ha un gran senso non trovi?
Infatti immagino che ti trovi davanti ad un TypeError perché è proprio quello che succede se provi a "cercare" il resto della divisione (%) tra una lista ed un numero. Cya |
|
Scritto da SalvCai |
2018-01-21 10:29:15 - Re: list index out of range PERCHE'?
|
Buon giorno e buona domenica ...
ho commesso un errore nel postere il codice ecco quello corretto infatti l'errore che mi da in fase di run è quello indicato in oggetto def popola(lista): for i in range(9998): lista.append(i+2) return (lista) def elimina(lista,n): for i in range(len(lista)): if lista%n == 0: lista.remove(lista) else: continue return (lista) def main(): lista = [] lista = popola(lista) for n in range(2,101): lista = elimina(lista,n) print(len(lista)) for i in range(len(lista)): print (lista,end=" ") return main()il codice mi da errore in questo punto: if lista%n == 0: IndexError: list index out of range e capisco che il problema è nell'aggiornamento della dimensione, c'ho pensato un pò .... mi sono venute in mente delle soluzione alternative ma mi sembrano un pò farraginose. Sapresti consigliarmi su come correggere? Grazie infinite Salvatore PS: noto che nel copia e incolla non compaiono le parentesi quadre per indicizzare sulla lista è forse uin problema di editor? |
|
Scritto da Daniele aka Palmux |
2018-01-21 11:47:06 - Re: list index out of range PERCHE'?
|
Ciao Salvatore, ci sono alcune incongruenze, la più vistosa è che la funzione elimina() non va bene. Non ho eseguito il codice, ma forse vorresti una cosa del genere?
def elimina(lista,n): for i in range(len(lista)): if (i % n) == 0 and i in lista: lista.remove(i) else: continue return (lista)Inoltre attento a quei cicli for, come li hai scritti non ti fanno ottenere quello che desideri, ad occhio almeno uno è di troppo. Fammi sapere. Cya |
|
Scritto da SalvCai |
2018-01-21 13:43:38 - Re: list index out of range PERCHE'?
|
Ciao Daniele allora ho provato il tuo codice:
1. la def elimina che mi hai suggerito tu cicla lungo tutta la lista e se il numero rispetta la condizione viene rimosso con remove ma questo non aggiorna la dimensione della lista ad ogni rimozione? 2. nel main uso un ciclo for che chiama elimina per ogni valore del divisore n ( del quale devo vedere se gli elementi della lista sono multipli) 3. il secondo for è per stamapre ciò che resta della lista dopo la scrematura fatta da elimina sapresti dirmi perchè con la modalità adottata da me, incorrevo nell'errore list index out of range? per completezza ti riporto la traccia dell'esercizio: scrivere un programma che inserisca in una lista tutti i numeri da 2 a 10000, poi elimini da tale lista i multipli di 2(tranne 2), i multipli di 3 ( tranne 3) e cosi via, fino ai multipli di 100, visualizzando infinie i valori rimasti nella lista. Grazie infinite e buona domenica Salvatore |
|
Scritto da Daniele aka Palmux |
2018-01-21 15:54:58 - Re: list index out of range PERCHE'?
|
Salvatore scusami, ma non è mia consuetudine entrare nel merito dell'esercizio che devi/vuoi svolgere, altrimenti non impari nulla.
Non ho provato il tuo codice, quello che volevo farti notare è che la funzione elimina() fosse sbagliata ancor prima logicamente, perché non ha senso cercare il resto da una lista. Credo di avertelo scritto tre volte compreso questo messaggio, ma deve essere un problema mio che non riesco a farti capire che cosa sbagli. Sono ben felice di aiutarti, cercando di consigliarti nei punti critici, ma non di scrivere il codice al posto tuo. Resto in attesa degli sviluppi, sono qui se hai bisogno. Cya |
|
Scritto da SalvCai |
2018-01-21 16:33:11 - Re: list index out of range PERCHE'?
|
Non è mia consuetudine aspettare che altri facciano per me
Ho postato la traccia semplicemente per completezza di informazione tutto qui A presto buona serata S! |
|
Scritto da Daniele aka Palmux |
2018-01-21 17:45:22 - Re: list index out of range PERCHE'?
|
Perfetto Salvatore, non c'è nessun problema per me, ti volevo solo illustrare la mia posizione, magari ti potevo sembrare snob o saccente nel non volerti rispondere con dei codici di esempio, ma lo faccio per te, così mi hanno insegnato (ed ho patito).
Sono sicuro che sei un "volenteroso" programmatore, aspetto i tuoi risultati o un punto bloccante, come ad esempio è (era?) quello del resto da un lista. A presto e buona serata anche a te. --- Ultima modifica di Daniele aka Palmux in data 2018-01-21 17:45:40 --- |
Pagina: 1
Esegui il login per scrivere una risposta.