Seite 1 von 1

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

Verfasst: Montag 28. Juni 2021, 16:54
von Jimbos_username
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

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

Verfasst: Montag 28. Juni 2021, 17:59
von valentinks
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.

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

Verfasst: Montag 28. Juni 2021, 18:09
von noisefloor
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

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

Verfasst: Montag 28. Juni 2021, 18:13
von Sirius3
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

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

Verfasst: Montag 28. Juni 2021, 18:28
von Jimbos_username
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.

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

Verfasst: Montag 28. Juni 2021, 18:35
von Sirius3
Die Schleife wird für jeden Wert von i einmal durchlaufen.

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

Verfasst: Montag 28. Juni 2021, 18:40
von Nufnus
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.

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

Verfasst: Montag 28. Juni 2021, 19:59
von Jimbos_username
Alles klar,

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