Python codieren(Primzahlen)?
Hallo! Ich lerne Python und dachte ich mache mir eine challangea einen Algorithmus zu bauen der mir alle Primzahlen bis zu einer Nummer Z generiert, aber aus irgend einen Grund überspringt er Nummern bsp:3 und ich verstehe nicht warum ... Könnt ihr den Fehler finden ?
2 Antworten
Das Problem liegt darin, dass range am Anfang der Schleife immer neu ausgewertet wird und nicht fix ist.
So ist am Ende der Schleife für i=2 a=3. Damit geht die range aber bis 3 und i wird für 3 nochmal ausgewertet. Dann wird an b[0]=3 geschrieben, da du vorher b[0] und b[1] gelöscht hast. Dann endet die Schleife da mit i=3 die range zu ende ist.
Die einfachste Lösungsmöglichkeit ist ein "break" am Ende von if len(b)==2 oder die range nur bis a laufen lassen.
Hier die Debug Ausgabe und der problematische Teil hervorgehoben.

Damit beginnst Du offensichtlich mit 4, da a mit 2 initialisiert ist (a+1) dann 3 ist und i+ nochmal vor dem ersten Durchlauf hochgezählt wird:
for i in range (a+1):
i+=1
Schreibe ich hier:
for i in range (a):
i+=1
Dann bekomme ich:
user@system:~> python Primenumbers.py
Limit z = 100
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
Deine Lösung ist zwar gut, aber die Problemanalyse nicht ganz richtig. Tatsächlich ist das Problem, dass range am Beginn jeder Schleife neu ausgewertet wird und wenn a einen Schritt macht am Ende der Schleife so ein extra durchlauf für i=a gemacht wird, aber das Array schon geleert ist.
Ich habe Dir geschrieben, wie er für mich funktioniert und wie ich mir das beim Draufsehen sofort erklärt habe, dass i = ... a+1 und dann noch ein i+=1 eins zu viel ist. Mehr Gedanken dazu habe ich mir erstmal nicht gemacht.
Interessant, das verwirrt mich jetzt ein bisschen weil for i in range(3-als beispiel): 0-1-2 durchgeht somit wird wird 3 nie angefasst.(Mit i+=1 wird es gelöst)1-2-3 und mit i+=1 und a+=1 1-2-3-4 , aber das sollte kein Problem sein weil eine a(Modulo)i und i>a immer a ergibt und somit=! 0 # c==0
Also warum funktioniert dein Code und meiner nicht ?