Dies ist eine Frage von codeacademy.com, wo ich Python lerne. Also was ich will, ist eine Funktion zu definieren, die überprüft, ob eine Zahl prim ist. Wenn dies der Fall ist, geben Sie True zurück. Wenn nicht, gib False zurück.Funktion is_prime - Fehler
Hier ist mein Code:
def is_prime(x):
lst = [] # empty list to put strings 'False' and 'True'
for i in range(2,x): # starting at 2 and not including x (number 1 is a divisor of all numbers
if x <= 2: # [1] see bellow the explanation
lst.append('False')
break
elif x % i == 0: # if x is divisible by i(number between 2 and not including x)
lst.append('False')
break # break, because we already know x is not prime
elif x % i > 0:
lst.append('True') # x is not divisible by i
if 'False' in lst:
return False # x is not prime - return False
else:
return True # 'True' is in lst, so x is prime - return True
print is_prime(-2) # [2] I get an error here. See below
[1] - ich diese Bedingung gemacht, weil in Codecademy es sagt: "Hint Denken Sie daran: alle Zahlen kleiner als 2 sind nicht Primzahlen"
[2] - Wenn ich zum Beispiel 'print is_prime (11)' oder 'is_prime (6)' starte, funktioniert es einwandfrei. Also reiche ich die Antwort ein, aber die Codeacademy akzeptiert sie nicht. Es heißt: "Ihre Funktion schlägt auf is_prime (-2) fehl. Es gibt True zurück, wenn es False zurückgeben soll."
Hallo und willkommen zu Stackoverflow schreiben. Eigentlich ist das eine sehr gute Frage, und Sie haben alle notwendigen Informationen zur Verfügung gestellt, um Ihr Problem zu reproduzieren - dies ist sehr selten für StackOverflow-Erstplakate. Also herzlichen Glückwunsch dazu (und auch auf dein Englisch). Freut mich, Sie hier zu haben! –
Ich empfehle http://pythontutor.com für die Visualisierung der Ausführung: Wenn Sie dorthin gehen, und fügen Sie Ihren Code in das Ausführungsfenster, werden Sie sehen, warum Sie 'True' für' is_prime (-2) 'erhalten. –
Außerdem müssen Sie nicht alle Zahlen zwischen '2' und' x' überprüfen, wenn Sie Primzahlen finden wollen - 'int (math.sqrt (x))' ist eine ausreichend hohe obere Grenze. –