2016-08-02 20 views
0

Ich bin neu in der Programmierung und ich habe ein Problem, während ich versuche, ein Programm zu schreiben, um die Primzahl herauszufinden. Hier ist mein Code: „. Ihre Funktion auf is_prime fehlschlägt (3) Es gibt keine, wenn es sollte return true“Warum funktioniert meine Primzahlfunktion nicht?

def is_prime(x): 
    if x < 2: 
     return False 
    elif x == 2: 
     return True 
    else: 
     for n in range (2,x-1): 
      if x % n == 0: 
       return False 
      else: 
       return True 

ich einen Fehler erhalten unter Angabe

Kann jemand bitte den Fehler in diesem Code erklären?

Vielen Dank!

+1

Ihre Schleife gibt in der ersten Iteration immer "True" oder "False" zurück (und nichts, wenn keine Iterationen vorhanden sind). Sie sollten nur "True" zurückgeben, wenn die * ganze Schleife * beendet ist, ohne einen Faktor zu finden. – khelwood

Antwort

3

range() hat eine exclusive upper bound, so versucht es, den Bereich zwischen 2 und 2 (3 - 1) zu bekommen, was keine Elemente ist. Da Sie nicht über nichts iterieren können, wird die for-Schleife nie ausgeführt, daher wird None zurückgegeben (dies ist der Standardrückgabetyp einer Funktion, wenn keine angegeben ist).

Die Lösung für Ihr unmittelbares Problem wäre range(2, x) anstatt range(2, x - 1) zu verwenden. Sie werden feststellen, dass Sie Probleme bei x> 3 haben, denn wie @khelwood sagte, geben Sie sofort True oder False zurück, nachdem Sie den ersten Wert überprüft haben. Geben Sie stattdessen nur True zurück, nachdem Sie alle Werte im Bereich überprüft haben.

+1

Könnte es wert sein, explizit darauf hinzuweisen, dass die Lösung 'range (x)' wäre. – Holloway

+0

Ja, das ist ein guter Punkt. – Aurora0001

0
def is_prime(x): 
    if x < 2: 
     return False 
    elif x == 2: 
     return True 
    else: 
     for n in range (2,x): # range function will iterate till x-1 
      if x % n == 0: 
       return False 
     # return true only at the end after making sure it is not divisible by any number in the middle 
     return True 
Verwandte Themen