Seite 1 von 1

"for" nicht ganz vestanden

Verfasst: Freitag 2. September 2016, 18:51
von nuhakan
Hallo,

ich lese euch seit mehrere Monaten, aber ich habe noch nicht geschrieben. Als erster Schritt mache ich die Übungen von codecademy.com und es gibt mehrere Dinge, die ich nicht ganz gut verstehe. Teilweise weil mein Englisch nicht gut ist -auch nicht mein Deutsch-. :oops:

Code: Alles auswählen

n = [3, 5, 7]

def total(numbers):
    result = 0
    for i in numbers:
        result = result + i
    return result
print total(n)
Ich kapiere bis "for i in numbers:". Das ist ein loop. Aber wie wird das gemacht? Welcher Wert hat numbers am Anfang?
Wenn man in Loop reinkommen, wie läuft das?
1. 0 = 0 + 1
2. 1 = 1 + 1
3. 2 = 2 + 1
4. ...

Grüße.

Re: "for" nicht ganz vestanden

Verfasst: Freitag 2. September 2016, 18:57
von Dav1d
`numbers` ist das Argument dass an deine Funktion übergeben wird, in deinem Fall ist das `n` also `[3, 5, 7]`. Die `for` Schleife geht dann durch die ganze Liste und hat bei jeder Iteration (Schleifendurchlauf) einen neuen Wert aus der Liste, um bei `[3, 5, 7]` zu bleiben, im ersten Durchlauf 3, dann 5 und zum Schluss 7.

result = 0
result = 0, i = 3
result = 3, i = 5
result = 8, i = 7
result = 15

Re: "for" nicht ganz vestanden

Verfasst: Freitag 2. September 2016, 22:18
von nuhakan
Danke für die Antwort.

Und warum nimmt das Argument die Liste "n"? Einfach weil drauf steht? Verstehe ich gut, und die Funktion nimmt einfach, was in der vorigen Linie steht?

Danke!!

Re: "for" nicht ganz vestanden

Verfasst: Freitag 2. September 2016, 23:02
von Kebap
Den Code kann man auch so schreiben, vielleicht wird das leichter verständlich?

Code: Alles auswählen

def total(numbers):
    result = 0
    for i in numbers:
        result = result + i
    return result

n = [3, 5, 7]
print total(n)
Unten wird eine Liste namens n erstellt und an die Funktion total übergeben. Die wurde ja oben beschrieben. Innerhalb der Funktion wird eine Liste empfangen und durch die for-Schleife bearbeitet. Nur heißt die Liste da numbers. Der Listeninhalt ist der gleiche.

Re: "for" nicht ganz vestanden

Verfasst: Freitag 2. September 2016, 23:56
von BlackJack
@nuhakan: Randbemerkung: Nicht ”Linie” sondern ”Zeile”.

Re: "for" nicht ganz vestanden

Verfasst: Samstag 3. September 2016, 16:31
von nuhakan
Hallo,

danke @BlackJack. Ich übe gleichzeitig Python, Deutsch und Englisch. :lol:

Ich glaube, dass ich den Code verstanden habe. Zur Probe habe ich ein bisschen umgeschrieben und mir ist klar geworden, wie das läuft.

Code: Alles auswählen

m = [2, 3, 4]
def total(numbers):
	result = 0
	for i in numbers:
		result = result + i
	return result
n = [3, 5, 7]
print total(m)
print total(n)
Gut!

Code: Alles auswählen

def total(numbers):
m = [2, 3, 4]
	result = 0
	for i in numbers:
		result = result + i
	return result
print total(m)
print total(n)
n = [3, 5, 7]
Nicht gut!

Danke!!

Re: "for" nicht ganz vestanden

Verfasst: Samstag 3. September 2016, 17:06
von /me
nuhakan hat geschrieben:Nicht gut!
Um sicher zu gehen: Warum hältst du die zweite Variante für "Nicht gut"?

Re: "for" nicht ganz vestanden

Verfasst: Samstag 3. September 2016, 18:09
von nuhakan
@/me, es funktioniert nicht! Aber gute Frage. :K

Ich würde sagen, dass die Liste "m" nicht nach dem Anfang der Funktion sein kann, beziehungsweise nicht in der Funktion. Sucht die Funktion einen Wert, aber sie findet es nicht?

Und etwas ähnlich mit "n". Die Liste wird gerufen, aber sie ist außen.

Grundsätzlich macht das mit der Syntax zu tun, oder?

Re: "for" nicht ganz vestanden

Verfasst: Samstag 3. September 2016, 19:10
von BlackJack
@nuhakan: Das hat Grundsätzlich mit Syntax zu tun dass Du da einen `SyntaxError` vom Compiler bekommst. Die Funktion sucht dar gar nichts, weil es keine Funktion gibt. Das Programm wird ja gar nicht erst ausgeführt.

Re: "for" nicht ganz vestanden

Verfasst: Samstag 3. September 2016, 19:34
von /me
nuhakan hat geschrieben:Ich würde sagen, dass die Liste "m" nicht nach dem Anfang der Funktion sein kann, beziehungsweise nicht in der Funktion. Sucht die Funktion einen Wert, aber sie findet es nicht?
Du hast die richtige Idee. Dinge müssen definiert sein bevor man sie verwenden kann.

In deinem Beispiel hast du aber die Liste gar nicht in der Funktion. Du beginnst mit der def-Zeile eine Funktionsdefinition, hast dann aber gar keinen Funktionskörper, da die Zeile mit der Definition von m nicht eingerückt ist. Das Programm wird gar nicht erst laufen, da du einen IndentationError bekommst.

Wenn du jetzt die Einrückung so korrigierst, dass m im Funktionsblock steht, dann bekommst du später beim Aufruf von total(m) tatsächlich einen NameError und das ist der Fehler den du richtigerweise erwartet hast. Du verwendest in diesem Fall nämlich m, allerdings ist dieser Bezeichner dort nicht bekannt.

Re: "for" nicht ganz vestanden

Verfasst: Samstag 3. September 2016, 21:32
von nuhakan
Schön! Eure Antworten sind hilfreicher als codecademy.

Danke. Ich werde hier öfter fragen. :wink: