Eine Liste durchlaufen
Bisher hast du Indizes als Zahlen geschrieben: pflanzen[1], pflanzen[2]. Ein Index kann aber auch eine Variable sein. Wenn i gleich 2 ist, ist pflanzen[i] dasselbe wie pflanzen[2]. Und eine for-Schleife kann i durch alle Indizes führen, von 1 bis zur Länge der Liste:
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
for i = 1, #pflanzen do
print(i .. ". " .. pflanzen[i])
endDas gibt Folgendes aus:
1. Karotte
2. Kartoffel
3. KürbisIm ersten Durchlauf ist i gleich 1, und die Schleife gibt pflanzen[1] aus. Im zweiten Durchlauf gibt sie pflanzen[2] aus und so weiter bis #pflanzen, dem letzten Index. Die Schleife funktioniert für eine Liste beliebiger Länge: Bei hundert Pflanzen läuft sie hundertmal, und bei einer leeren Liste läuft sie gar nicht, weil for i = 1, 0 null Mal läuft.
Da Lua ab 1 zählt, geht die Schleife von 1 bis #pflanzen. Zwei Fehler sind häufig. Wenn du bei 0 beginnst, bekommst du am Anfang einen zusätzlichen Durchlauf, in dem das Element nil ist:
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
for i = 0, #pflanzen do
print(i, pflanzen[i])
endDas gibt Folgendes aus:
0 nil
1 Karotte
2 Kartoffel
3 KürbisWenn du bis #pflanzen + 1 gehst, bekommst du am Ende einen zusätzlichen Durchlauf. Mit .. gibt das Programm alle Pflanzen aus und hält dann an:
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
for i = 1, #pflanzen + 1 do
print("Pflanze: " .. pflanzen[i])
endPflanze: Karotte
Pflanze: Kartoffel
Pflanze: Kürbis
main.lua:3: attempt to concatenate a nil value (field '?')Mit dem Index in einer Variablen kann eine Schleife mehr, als die Elemente der Reihe nach auszugeben. Sie kann mit der Schrittweite -1 rückwärts gehen, vom letzten Index zum ersten:
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
for i = #pflanzen, 1, -1 do
print(pflanzen[i])
endDas gibt Folgendes aus:
Kürbis
Kartoffel
KarotteSie kann mit zwei Listen gleichzeitig arbeiten. Wenn zusammengehörige Werte in beiden Listen denselben Index haben, liest ein i beide. Hier ist tage[i], wie viele Tage pflanzen[i] zum Wachsen braucht:
local pflanzen = {"Karotte", "Kartoffel", "Kürbis"}
local tage = {3, 4, 7}
for i = 1, #pflanzen do
print(pflanzen[i] .. " braucht " .. tage[i] .. " Tage")
endDas gibt Folgendes aus:
Karotte braucht 3 Tage
Kartoffel braucht 4 Tage
Kürbis braucht 7 TageUnd sie kann die Elemente ändern, denn eier[i] = … funktioniert auch mit einem Variablen-Index. Diese Schleife verdoppelt jede Zahl der Liste:
local eier = {4, 6, 5}
for i = 1, #eier do
eier[i] = eier[i] * 2
end
print(eier[1], eier[2], eier[3])Das gibt Folgendes aus:
8 12 10So schreibst du es:
Anweisungen
- 1
Schreibe eine
for-Schleife, deren Variable die Indizes vonsamendurchläuft, von 1 bis#samen. - 2
Gib in der Schleife jede Samensorte mit ihrem Preis aus
preiseaus:Karotte: 2 Münzen Kartoffel: 3 Münzen Kürbis: 5 Münzen Erdbeere: 4 Münzen - 3
Hugo hat jeden Preis um 1 Münze erhöht. Schreibe unter der Schleife eine zweite Schleife, die zu jedem Element von
preise1 addiert. - 4
Gib darunter die Samen mit ihren Preisen noch einmal aus, genauso wie in der ersten Schleife. Die Ausgabe zeigt jetzt die Preise vor und nach der Änderung und endet mit:
Karotte: 3 Münzen Kartoffel: 4 Münzen Kürbis: 6 Münzen Erdbeere: 5 Münzen