Cyklus while
Ema každý večer sbírá vejce od slepic. Program, který by vypsal její plán na týden, by mohl mít sedm skoro stejných řádků s print. Na celou sezónu by jich potřeboval stovku. Programy takovou opakovanou práci dělají pořád: projdou každý den sezóny, každý záhon na poli nebo 60krát za sekundu překreslí obrazovku hry. K tomu slouží cykly. Cyklus je část kódu, která se provádí znovu a znovu.
Nejjednodušší cyklus v Lua je while (dokud). Opakuje blok kódu, dokud platí jeho podmínka:
local den = 1
while den <= 5 do
print("Den " .. den)
den = den + 1
endVypíše:
Den 1
Den 2
Den 3
Den 4
Den 5Cyklus while vypadá podobně jako if: klíčové slovo, podmínka a blok kódu, který končí slovem end. Jen místo then má do. Rozdíl je v tom, že if provede svůj blok nejvýše jednou, kdežto while se k podmínce stále vrací. Krok za krokem:
- Program vytvoří proměnnou
dens hodnotou1. - Zkontroluje podmínku
den <= 5. Platí, takže provede blok: vypíšeDen 1aden = den + 1zvýšídenna2. - Vrátí se k podmínce.
2 <= 5stále platí, takže vypíšeDen 2a zvýšídenna3. - A tak dále, dokud nebude
denrovno6. Pak podmínka neplatí, cyklus skončí a program pokračuje za jehoend.
Jednomu provedení bloku se říká průchod cyklem (také iterace). Tento cyklus má pět průchodů. Pro sezónu o 100 dnech by stačilo změnit 5 na 100.
Blok odsazujte o 4 mezery, stejně jako u if. Na první pohled pak uvidíte, co se opakuje. Kód za end se provede jen jednou, až cyklus skončí:
local zahon = 1
while zahon <= 3 do
print("Zalévám záhon " .. zahon)
zahon = zahon + 1
end
print("Všechny záhony jsou zalité.")Zalévám záhon 1
Zalévám záhon 2
Zalévám záhon 3
Všechny záhony jsou zalité.Všimněte si řádku zahon = zahon + 1. Lua nemá += ani ++, takže zvětšení proměnné musíte napsat celé. Něco v bloku musí měnit proměnnou z podmínky, aby podmínka jednou přestala platit. Bez toho by cyklus nikdy neskončil. Co se pak stane, uvidíte v dalším cvičení.
Na začátku vás nejspíš potkají dvě chyby. Když napíšete then jako u if, program se vůbec nespustí:
local den = 1
while den <= 3 then
print("Den " .. den)
den = den + 1
endmain.lua:2: 'do' expected near 'then'A když zapomenete end, Lua vám dokonce prozradí, ke kterému cyklu chybí:
local den = 1
while den <= 3 do
print("Den " .. den)
den = den + 1main.lua:4: 'end' expected (to close 'while' at line 2) near <eof><eof> znamená „end of file“, konec souboru: Lua došla na konec programu a pořád čekala na end.
Jak psát:
Pokyny
Smažte tři řádky s print. Místo nich vytvořte lokální proměnnou den s hodnotou 1. Cyklus s ní bude počítat dny.
Pod ni napište cyklus while, který poběží, dokud bude den menší nebo rovno 7. V cyklu vypište den stejně jako smazané řádky a potom den zvyšte o 1. Program vypíše:
Den 1: sběr vajec
Den 2: sběr vajec
Den 3: sběr vajec
Den 4: sběr vajec
Den 5: sběr vajec
Den 6: sběr vajec
Den 7: sběr vajecZa cyklem, pod jeho end, vypište Po cyklu je den a hodnotu proměnné den. Výpis skončí takto:
Den 7: sběr vajec
Po cyklu je den 8Proměnná skončí na 8, a ne na 7, protože se cyklus zastaví, až když podmínka neplatí.
Začněte programovat zdarma
1/10