Rückwärts und in Schritten zählen
Eine for-Schleife kann eine dritte Zahl haben, die Schrittweite: wie viel nach jedem Durchlauf zur Variablen addiert wird. Ohne sie beträgt die Schrittweite 1. Mit -1 zählt die Schleife rückwärts:
for tag = 3, 1, -1 do
print("Tage bis zur Ernte: " .. tag)
end
print("Ernte!")Tage bis zur Ernte: 3
Tage bis zur Ernte: 2
Tage bis zur Ernte: 1
Ernte!Wenn du rückwärts zählst, vergiss das -1 nicht. Ohne es zählt die Schleife von 3 aufwärts bis 1. Solche Zahlen gibt es nicht, also läuft die Schleife gar nicht. Für Lua ist das kein Fehler, die Schleife tut einfach nichts:
for tag = 3, 1 do
print("Tage bis zur Ernte: " .. tag)
end
print("Ernte!")Ernte!Dasselbe passiert immer, wenn der Start hinter dem Ende liegt: for i = 1, 0 do läuft null Mal. Oft ist das genau richtig: Bei for beet = 1, beete do und beete gleich 0 gibt es nichts zu gießen, und die Schleife tut nichts.
Mit der Schrittweite 2 nimmst du jede zweite Zahl:
for beet = 1, 7, 2 do
print("Beet " .. beet .. " wird gegossen")
endBeet 1 wird gegossen
Beet 3 wird gegossen
Beet 5 wird gegossen
Beet 7 wird gegossenDie Variable muss das Ende nicht genau treffen. Die Schleife endet, sobald die nächste Zahl darüber hinausgehen würde. Die Hühner bekommen jeden 4. Tag frisches Stroh. In 10 Tagen ist das so:
for tag = 4, 10, 4 do
print("Tag " .. tag .. ": frisches Stroh für die Hühner")
endTag 4: frisches Stroh für die Hühner
Tag 8: frisches Stroh für die HühnerNach der 8 käme die 12, die über 10 liegt, also endet die Schleife. Die Schrittweite darf aber nicht 0 sein: Die Variable käme nie voran, und Lua bricht mit 'for' step is zero ab.
Der häufigste Fehler bei Schleifen ist ein Fehler um eins (englisch „off by one“): Die Schleife läuft einmal öfter oder einmal weniger, als sie sollte. for i = 0, 3 do läuft 4-mal, für 0, 1, 2 und 3. In Lua zählst du fast immer ab 1, also läuft for i = 1, 3 do genau 3-mal. Wenn du nicht sicher bist, wie oft eine Schleife läuft, schreibe die Werte auf, die ihre Variable annimmt, und zähle sie.
So schreibst du es:
Anweisungen
- 1
Rex bellt viermal statt dreimal. Korrigiere die Schleife, sodass das Programm genau dreimal
Wuff!ausgibt:Wuff! Wuff! Wuff! - 2
Emmas Tomaten sind in 5 Tagen reif. Schreibe unter Rex' Schleife eine
for-Schleife, die von 5 bis 1 herunterzählt, jede Zahl in einer eigenen Zeile. Gib nach der SchleifeDie Tomaten sind reif!aus. Unter Rex' Gebell gibt das Programm Folgendes aus:5 4 3 2 1 Die Tomaten sind reif! - 3
In einem Monat mit 30 Tagen putzt Emma jeden 7. Tag die Scheune. Schreibe am Ende des Programms eine Schleife mit der Schrittweite 7, die Folgendes ausgibt:
Tag 7: Scheune putzen Tag 14: Scheune putzen Tag 21: Scheune putzen Tag 28: Scheune putzen