Anfänger - "for i in range" erklären

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jimbos_username
User
Beiträge: 3
Registriert: Montag 28. Juni 2021, 16:36

Hey Leute,

Ich versuche gerade Python zu lernen. Bei Übungen bin Ich auf folgenden Code gestoßen:

def check_prime(n):
if n == 0 or n == 1:
return False
for i in range(2, n):
if(n % i == 0):
return False
return True

def prime_numbers(n):
totalPrime = 0
num = 0
while(totalPrime < n):
if(check_prime(num)):
totalPrime += 1
print(num)
num += 1

Der Code ist dafür die ersten n Primzahlen auszugeben. Ich versteh Ihn auch an sich und die einzelnen Bestandteile. Der Punkt an dem Ich hängen bleibe und den ich nicht verstehe ist:

for i in range(2, n):
if(n % i == 0):
return False

Ich verstehe das so:
für jedes Element i in der range von z.B.: (2, 15) soll n % i == 0 gecheckt werden.
Aber welche genauen Zahlen nimmt der Code dann?
Steht für n immer 15 und es überprüft 15 % 2 == 0, 15 % 3 == 0, 15 % 4 == 0 usw...??
Da fehlt mir leider noch das Verständnis was genau da passiert.

Vielen dank schonmal im voraus :D
valentinks
User
Beiträge: 20
Registriert: Sonntag 27. Juni 2021, 10:31
Wohnort: Kassel

Hallo,
n steht hier für alle natürlichen Zahlen (ohne Komma) zwischen 2 und 15 [range(2,15)]
if(n%i==0) teilt also jede natürliche Zahl durch i und erwartet 0

Wenn n keine Primzahl ist, ist das Ergebnis = 0, also false

Code: Alles auswählen

for i in range(2, n):
	if n % i == 0:
		return False
% ist der Rechenoperator der den Rest einer Division ausgibt.
Benutzeravatar
noisefloor
User
Beiträge: 4195
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

`range` ist eine Build-In Funktion von Python, die ist auch (ausführlich) in der Doku erklärt.

Kurzfassung: `range(start, ende)` liefert alle Zahlen zwischen `start` bis `ende-1` zurück, wenn man darüber iteriert. `start` und `ende` müssen Integer-Werte sein.

Gruß, noisefloor
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Der Code hat einige Defizite.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 2.
if und while sind keine Funktionen, die Klammern um die Bedingungen sind alle überflüssig.
Variablennamen werden wie Funktionen komplett klein geschrieben.

Code: Alles auswählen

def check_prime(n):
    if n == 0 or n == 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True
 
def prime_numbers(n):
    total_prime = 0
    num = 0
    while totalPrime < n:
        if check_prime(num):
            total_prime += 1
            print(num)
        num += 1
Jimbos_username
User
Beiträge: 3
Registriert: Montag 28. Juni 2021, 16:36

Vielen dank für die schnellen Antworten :)

"Hallo,
n steht hier für alle natürlichen Zahlen (ohne Komma) zwischen 2 und 15 [range(2,15)]
if(n%i==0) teilt also jede natürliche Zahl durch i und erwartet 0"

Soweit versteh Ich das. Aber könnt Ihr mir einen Wert für "i" geben?
Also als Bsp.:

if(3 % ? == 0)
if(4 % ? == 0)

Das würde ja so weiter gehen bis ich bei 15 angekommen bin. Aber Ich versteh nicht welchen Wert für "i" eingesetzt wird.

Es tut mir leid falls das total offensichtlich ist oder Ich etwas grundlegendes noch nicht verstanden habe, aber Ich kann es mir leider auch nicht herleiten.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Schleife wird für jeden Wert von i einmal durchlaufen.
Nufnus
User
Beiträge: 18
Registriert: Sonntag 29. November 2020, 21:40

Schau dir mal ein simpleres Konstrukt mit einer for Schleife und range() an um das Prinzip zu verstehen.

Code: Alles auswählen

n = 10
for i in range(1, n):
    print("Wert i: " + str(i))
    print("Wert n: " + str(n))

Code: Alles auswählen

Wert i: 1
Wert n: 10
Wert i: 2
Wert n: 10
Wert i: 3
Wert n: 10
Wert i: 4
Wert n: 10
Wert i: 5
Wert n: 10
Wert i: 6
Wert n: 10
Wert i: 7
Wert n: 10
Wert i: 8
Wert n: 10
Wert i: 9
Wert n: 10
Dein "i" erhöht sich mit jedem Schleifendurchlauf in dem bereich (range) von 1 bis 10 (exklusive, also nur 9)


Dein Beispiel ist etwas verwirrend, weil checkprime() da mehrmals aufgerufen wird und sich die Obergrenze von der range Funktion immer ändert.
Jimbos_username
User
Beiträge: 3
Registriert: Montag 28. Juni 2021, 16:36

Alles klar,

jetzt hab Ich es verstanden. Okay vielen dank an alle. :)
Antworten