Vai al contenuto

[PYTHON] bloccare errore


housed93

Messaggi raccomandati

Ciao ragazzi, stò sviluppando un programmino stupidissimo, con Python, (serve ad identificare i numeri primi).

def NumeriPrimi(x):
   if x==0:
       print "Stop!"
   elif x==2 or x==3 or x==5 or x==7 or x==11 or x==13 or x==17 or x==19 or x==23 or x==29 or x==31 or x==37 or x==41 or x==43 or x==47 or x==53 or x==59 or x==61 or x==71:
       print x
       NumeriPrimi(x-1)
   elif x%2==0 or x%3==0 or x%5==0 or x%7==0 or x%11==0 or x%13==0 or x%17==0 or x%19==0 or x%23==0 or x%29==0 or x%31==0 or x%37==0 or x%41==0 or x%43==0 or x%47==0 or x%53==0 or x%59==0 or x%61==0 or x%71==0:        NumeriPrimi(x-1)
   else:
       print x
       NumeriPrimi(x-1)
numero=input("Dammi il numero: ")
NumeriPrimi(numero)
input("Premi invio per uscire!")

in pratica di quando si apre il programma, viene chiesto di digitare un numero es.500 e il programma ti da in automatico, tutti i numeri primi da 500 a 1

fin qui il tutto funziona. Poi però, quando decido di inserire un numero più grande di 997, mi da una lista di errori e il programma si chiude. credo che questo sia legato al fatto che python tende a gestire la ram come gli pare. C'è un modo per infrangere questa limitazione?

Link al commento
Condividi su altri siti

Può darsi che Python semplicemente termini il programma se dopo un certo numero di chiamate a se stessa la funzione non ha ancora finito. Per esempio, se provi con questo:


def ricorsione(n):
   print n
   ricorsione(n + 1)

ricorsione(1)

Noterai che si ferma dopo esattamente 999 chiamate.

PS Non sono sicuro ma la cosa di certo è sospetta

Link al commento
Condividi su altri siti

Si ti quoto.

La cosa è molto sospetta.

Python dovrebbe calcolare fino all infinito (ovvero fino alla fine della memoria disponibile, cosa praticamente impossibile sui nostri calcolatori)

Link al commento
Condividi su altri siti

quindi cosa mi consigliereste di fare? ho provato a googlare ma non si trova niente!

Per tabulare i numeri primi? Magari limita la funzione a un certo intervallo. Per esempio puoi modificare la tua funzione in modo che prenda due argomenti interi (non troppo distanti) e stampi tutti i primi contenuti nell'intervallo.

Link al commento
Condividi su altri siti

quoto, è una ottima soluzione.

Oppure metti un limite. Nel senso che passi un valore alla funzione (fisso oppure dell'utente che decida fino a che numero di intervallo mostrare i primi)

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...