Frage von Jonaschecker123, 45

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 :-)

Antwort
von registrierte, 45

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 :)

Kommentar von Jonaschecker123 ,

könntest du bitte den Coe oben kopieren und (teilweise) neu schreiben? (ich kann mir nicht so richtig vorstellen was du damit meinst:)

Kommentar von registrierte ,

So meine ich das ungefähr. Ich dachte, du wolltest nur den Fehler wissen ;) :

Kommentar von registrierte ,

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) 

Kommentar von Jonaschecker123 ,

vielen Dank!

Kommentar von Jonaschecker123 ,

Funktioniert in der Praxis nicht!

Kommentar von registrierte ,

Warum nicht? Was passiert denn?

Kommentar von Jonaschecker123 ,

ich gebe ein:

primzahlen(10)

Ergebnis:

2

also eigentlich gar nichts!

(Die Zwei wird ja durch eine If-abfrage ausgegeben)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten