Könnt ihr mit mal in Python3 helfen?
Hallo erstmal. Ich habe eine Funktion in Python3 programmiert die mir alle Primzahlen von 2 bis n ausgibt. Bis 7 hat es geklappt:
primzahlen(7)
2
3
5
7
aber dann kam das:
primzahlen(10)
2
3
5
7
9
9? Könnt ihr mir bitte sagen welchen Fehler ich gemacht habe. Hier ist der Programmcode den ich geschrieben hab:
def primzahlen(ende):
if ende > 2:
print(2)
for Zahl in range(2, ende):
for Teiler in range(2, ende-1):
if Zahl % Teiler == 0:
break
else:
print(Zahl)
break
Danke schonmal :-)
1 Antwort
Das sieht eigentlich schon gut aus.
Was mir jedoch sofort auffällt ist, dass bei primzahlen(2) keine 2 ausgegeben wird, da du für die Bedingungen ende>2 verwendest.
Der Rest müsste aber vom Ansatz her hinkommen, da du für jede Zahl von 2 bis n überprüfst, ob sie durch eine Zahl, die nicht sie selbst oder 1 ist teilbar ist.
Was mir auffällt ist, dass nur gerade Zahlen "herausfallen" die 9 ist die erste Zahl, deren Ausschlusskriterium nicht die Teilbarkeit durch 2 ist.
Das legt die Vermutung nahe, dass der Fehler irgendwo bei Teiler liegt.
Es wird es so nicht Funktionieren, da die Zahl immer dann ausgibst, wenn sie nicht durch 2 teilbar ist, da du schon beim ersten Durchgang (also Teilbarkeit durch 2) entscheidest, ob ausgegeben wird oder nicht und die Schleife für den Teiler dann abbrichst.
Ich würde das gefragte Problem so lösen :
1.) Die Schleife für den Teiler nur dann abbrechen, wenn du eine Teilbarkeit festgestellt hast. Sonst weiterlaufen lassen.
2.) Die Zahl erst dann ausgeben, wenn die Schleife im Prinzip durch ist. (z.B. Erst im letzten Schleifendurchgang die Zahl ausgeben)
Ich hoffe ich konnte helfen :)
Sorry. Hier mit code:
def primzahlen(ende):
if ende >= 2:
print(2)
for Zahl in range(2, ende):
for Teiler in range(2, ende-1):
if Zahl % Teiler == 0:
break
if Teiler == ende-1:
print(Zahl)
ich gebe ein:
primzahlen(10)
Ergebnis:
2
also eigentlich gar nichts!
(Die Zwei wird ja durch eine If-abfrage ausgegeben)
könntest du bitte den Coe oben kopieren und (teilweise) neu schreiben? (ich kann mir nicht so richtig vorstellen was du damit meinst:)