"for" nicht ganz vestanden

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
nuhakan
User
Beiträge: 51
Registriert: Donnerstag 11. August 2016, 11:42

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.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

`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
the more they change the more they stay the same
nuhakan
User
Beiträge: 51
Registriert: Donnerstag 11. August 2016, 11:42

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!!
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

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.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
BlackJack

@nuhakan: Randbemerkung: Nicht ”Linie” sondern ”Zeile”.
nuhakan
User
Beiträge: 51
Registriert: Donnerstag 11. August 2016, 11:42

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!!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

nuhakan hat geschrieben:Nicht gut!
Um sicher zu gehen: Warum hältst du die zweite Variante für "Nicht gut"?
nuhakan
User
Beiträge: 51
Registriert: Donnerstag 11. August 2016, 11:42

@/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?
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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
nuhakan
User
Beiträge: 51
Registriert: Donnerstag 11. August 2016, 11:42

Schön! Eure Antworten sind hilfreicher als codecademy.

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