Die repeat-Schleife
Die while-Schleife prüft ihre Bedingung vor jedem Durchlauf. Wenn die Bedingung gleich am Anfang falsch ist, läuft der Block gar nicht. Lua hat noch eine Schleife, repeat … until, die ihre Bedingung nach jedem Durchlauf prüft:
local wasser = 0
repeat
wasser = wasser + 8
print("Wasser im Trog: " .. wasser)
until wasser >= 20Wasser im Trog: 8
Wasser im Trog: 16
Wasser im Trog: 24Der Block steht zwischen repeat und until, und die Bedingung kommt ganz am Ende. Es gibt kein do und kein end: until mit seiner Bedingung schließt die Schleife. Achte darauf, was die Bedingung bedeutet: while läuft, solange die Bedingung wahr ist, aber repeat läuft, bis die Bedingung wahr ist. Sobald wasser >= 20 wahr ist, endet die Schleife.
Den Unterschied siehst du, wenn der Trog schon am Anfang voll ist:
local wasser = 30
repeat
wasser = wasser + 8
print("Wasser im Trog: " .. wasser)
until wasser >= 20Wasser im Trog: 38Der Block läuft einmal, und erst dann findet die Schleife heraus, dass sie aufhören soll. Der Trog läuft über. while wasser < 20 do würde gar kein Wasser einfüllen. Nimm repeat also nur, wenn der Block mindestens einmal laufen muss.
Wann ist das so? Zum Beispiel, wenn du die Ziffern einer Zahl zählst. Die Ganzzahldivision durch 10 entfernt die letzte Ziffer (1250 // 10 ist 125), du kannst also so lange teilen, bis nichts mehr übrig ist: 1250, 125, 12, 1, 0. Das sind vier Divisionen, also hat 1250 vier Ziffern. Auch die Zahl 0 wird mit einer Ziffer geschrieben, und repeat sorgt dafür, dass sie ihre eine Division bekommt. Das probierst du in der Übung aus.
Noch etwas kann nur repeat: Die Bedingung nach until kann eine lokale Variable benutzen, die im Block erzeugt wurde. Emmas Hühner legen 4 Eier am Tag. Wie viele Tage dauert es, bis es mindestens 10 Eier sind?
local tag = 0
repeat
tag = tag + 1
local eier = tag * 4
print("Tag " .. tag .. ": " .. eier .. " Eier")
until eier >= 10Tag 1: 4 Eier
Tag 2: 8 Eier
Tag 3: 12 EierIn einer while-Schleife geht das nicht: Ihre Bedingung steht vor dem Block, wo es eier noch nicht gibt.
So schreibst du es:
Anweisungen
- 1
Das Programm zählt die Ziffern von
muenzen. Führe es aus: Es gibtZiffern: 0aus, aber die 0 wird mit einer Ziffer geschrieben. Schreibe diewhile-Schleife alsrepeat-Schleife um, die wiederholt, bismuenzenden Wert0hat. Dann gibt das ProgrammZiffern: 1aus. - 2
Prüfe, ob die Schleife auch bei anderen Zahlen funktioniert: Ändere den Wert von
muenzenauf1250. Das Programm gibt Folgendes aus:Ziffern: 4