Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Problema lista numeri primi

e
edoardo.dematteis (570 points)
6 10 16
in Es1 by (570 points)
closed by
Ciao a tutti!

Ho un piccolo problema nel rimuovere elementi dalla lista ls: ho utilizzato due cicli for dove il secondo è annidato nel primo e serve a scorrere i numeri da dividere ad un elemento qualsiasi della lista e grazie ad un if verifico se questo numero possa essere primo o meno. Il problema sorge nell'eliminazione del singolo elemento dalla lista originaria: infatti se il numero in questione ha più di un divisore mi dà errore altrimenti mi ritorna la lista corretta contenente solo primi. Grazie in anticipo
663 views
closed with the note: La risposta è stata data

3 Answers

Best answer
francesco.dev (33560 points)
21 51 129
by (33.6k points)
selected by

Ciao edoardo!

A quanto ho capito il tuo problema sta nel rimuovere un elemento della lista perché, nel caso in cui questa avesse più di un divisore, ti inizia a dare errori.
L'approccio peggiore che possiamo consigliarti è quello di uscire di forza dal ciclo attraverso il comando break.

Quindi prima di utilizzarlo, inizia a farci capire meglio il problema, inizia a comprendere meglio ciò che vuoi fare e capire come fare in modo di poter effettuare il ciclo fino ad una determinata condizione.

Consiglio:
Potresti mettere una variabile booleana che diventa True se si verifica tale condizione, cosicché tu possa uscire in maniera pulita dal ciclo senza utilizzare il break!

Se abbiamo frainteso la tua domanda, cerca di farci capire al meglio il tuo problema.

- Francesco Pio Scognamiglio

e
edoardo.dematteis (570 points)
6 10 16
by (570 points)
Grazie mille ho risolto inserendo una variabile booleana e un if. Ora fa quel che deve fare anche se devo ottimizzarlo perchè è abbastanza lento
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)

Ciao!

Non ho chiarissimo il quadro della situazione da te descritto però proverò ad aiutarti con le informazioni di cui dispongo!

Praticamente tu hai costrutuito un ciclo for annidato in un altro ciclo for e attraverso un if verifichi la presenza di tale numero, è corretto?

Beh l'idea in questi casi è che se vuoi fermarti a trovare solo il primo una volta che lo hai trovato, dunque dopo la condizione di if, esci dal ciclo con un break. Altrimenti il ciclo dovrebbe continuare fino ad esaurire il range  (n, n-1). di numeri. Hai provato a considerare l'opzione di utilizzare il continue?

In attesa di tue maggiori informazioni, ti auguro una buona serata

Leonardo Emili

e
edoardo.dematteis (570 points)
6 10 16
by (570 points)
Sì esatto hai capito perfettamente ciò che ho fatto. Il problema essenzialmente è che il ciclo continua anche dopo aver eliminato l'elemento della lista (tramite un remove) visto che ha più divisori e mi dà errore non trovandolo più
split (8700 points)
21 59 79
by (8.7k points)
non so che tipo di errore ti dia, dipende dalle condizioni che hai messo forse, o forse da problemi di interi o numeri con la virgola. in questo caso ti consiglio di usare il modulo per queste operazioni, e di dividere solo quando questo è 0.

in ogni caso ti consiglio di NON eliminare elementi dalla lista mentre sei in un ciclo che usa quella stessa lista, il ciclo verrà fuori sballato quasi sicuramente. ti conviene "conservare" le cose da cancellare e farlo in un altro momento. il professore tempo fa lo sconsigliò esplicitamente a lezione
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
Quoto split, anzi se devi iterare un una lista l e rimuoverne gli elementi una soluzione potrebbe essere sicuramente quella creare una lista l2 equivalente alla prima e iterando su ls2 cancellare gli elementi di ls! :)
split (8700 points)
21 59 79
by (8.7k points)
se anche tu hai fatto così il mio codice non lo tocco...ho fatto esattamente così e sono due giorni che cerco una soluzione migliore di questa ma non mi viene :/