Python codieren(Primzahlen)?

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.

Bild zum Beitrag

Woher ich das weiß:Berufserfahrung – Software Entwickler
 - (Webseite, programmieren, Informatik)

Thobias771 
Beitragsersteller
 19.11.2024, 15:43

Danke

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



TUrabbIT  19.11.2024, 15:36

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.

Thobias771 
Beitragsersteller
 19.11.2024, 15:05

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 ?

evtldocha  19.11.2024, 15:10
@Thobias771

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.