Lekcie
Cyklus while
Počítače sú skvelé v opakovaní nudných úloh. Zistíš, ako nechať kód bežať dokola, kým sa nesplní tvoja podmienka.
Čo je to cyklus?
Doteraz sa náš kód spúšťal len raz — riadok po riadku, zhora nadol. Čo ak ale chceme, aby sa nejaká časť kódu opakovala? Na to slúžia cykly. Cyklus ti umožní spustiť rovnaký blok kódu viackrát, bez toho, aby si ho musel kopírovať. Napríklad, keď chceme vypísať čísla od 1 do 100, nebudeme písať 100 riadkov. Namiesto toho napíšeme cyklus, ktorý to spraví za nás stokrát.
V Pythone poznáme dva základné cykly: while a for. V tejto lekcii sa pozrieme na while. Cyklus for si preberieme neskôr.
Cyklus while
Cyklus while funguje na podobnom princípe ako podmienka if. Rozdiel je v tom, že if vykoná blok kódu raz, ak je podmienka splnená. Cyklus while ho bude vykonávať stále, pokiaľ podmienka platí. Takýto cyklus sa nazýva cyklus s neznámym počtom opakovaní, nakoľko nevieme, koľkokrát sa zopakuje. Môže sa zopakovať raz, tri razy, nekonečne veľakrát alebo ani raz.
Syntax cyklu while vyzerá takto:
while podmienka:
# Kód, ktorý sa bude opakovať, kým je podmienka pravdivá
Cyklus sa opakuje, kým je podmienka True. Akonáhle prestane platiť, cyklus sa ukončí a program pokračuje ďalej.
heslo = input("Zadaj heslo: ")
while heslo != "python123":
print("Nesprávne heslo, skús znova.")
heslo = input("Zadaj heslo: ")
print("Prihlásenie úspešné!")
Všimni si, že podmienka vo while je rovnaká, akú by si napísal v if. Môžeš používať rovnaké operátory porovnávania (==, !=, >, <, ...) aj logické operátory (and, or, not).
Ak podmienka nikdy neprestane platiť, cyklus pobeží donekonečna! Toto sa nazýva nekonečný cyklus (z angl. infinite loop). Zväčša sa kvôli takémuto cyklus program zasekne a predčasne ukončí.
pocitadlo = 5
# Blok kódu, ktorý patrí while sa bude opakovať, kým premenná pocitadlo
# je viac ako 0. Keď dosiahne hodnotu 0, podmienka prestane platiť a
# cyklus sa ukončí.
while pocitadlo > 0:
print(pocitadlo)
pocitadlo -= 1
print("Štart!")
Prerušenie cyklu - break
Niekedy chceme cyklus ukončiť skôr, ako podmienka prestane platiť. Na to slúži príkaz break. Keď ho program vykoná, okamžite ukončí cyklus a pokračuje kódom pod ním.
Tento príkaz sa využíva väčšinou v "nekonečných cykloch", ktoré avšak vieme, že raz ukončíme. Zväčša to býva while True cyklus. Tento cyklus by prakticky nemal nikdy skončiť, jeho podmienka bude vždy platiť (True je vždy pravdivý), ale niekde v našom while bloku zavoláme break, ktorý tento cyklus ukončí.
pismeno = input("Zadaj písmeno: ")
while pismeno != "x":
print("To nie je správne písmeno.")
pismeno = input("Zadaj písmeno: ")
print("Uhádol si!")
Tento príklad by sme mohli prepísať aj s využitím break. V tomto prípade s cyklom while True, čo je cyklus, ktorý by bežal donekonečna — ibaže my ho sami prerušíme pomocou break, keď je splnená naša podmienka správneho písmena.
while True:
pismeno = input("Zadaj písmeno: ")
if pismeno == "x":
print("Uhádol si!")
break
print("To nie je správne písmeno.")
Všimni si!
- Oba kódy robia to isté, len sú napísané inak.
- V programovaní väčšinou existuje viacero správnych spôsobov, ako dosiahnuť rovnaký výsledok.
Kedy použiť while?
Cyklus while je ideálny vtedy, keď nevieš vopred, koľkokrát sa má niečo opakovať. Napríklad:
- Čakáš na nejakú udalosť (napr. kým súbor prestane byť zamknutý).
- Hráš hru, kým hráč neprehrá alebo nevyhrá.
- Spúšťaš nejaký proces, pokým nevráti správny/očakávaný výsledok.
Zopakuj si!
- Cyklus while opakuje blok kódu, kým platí jeho podmienka.
- Používa sa vtedy, keď nevieme vopred, koľkokrát sa má cyklus opakovať.
- Pomocou premennej (počítadla) vieme riadiť, koľkokrát sa cyklus vykoná.
- Príkaz break ukončí cyklus okamžite, odkiaľkoľvek vo vnútri.
- while True tvorí cyklus, ktorý sa dá ukončiť len pomocou break.
Do premennej cislo načítaj vstup od používateľa a pretypuj ho na int.
Ak cislo je menej ako 1 alebo viac ako 10, vypíš „Číslo nie je v rozsahu.“ a cyklus nechaj opakovať.
Skontroluj, či sa zadané číslo rovná tajne_cislo.
Ak áno, vypíš "Vyhrávaš!" a ukonči cyklus.
Ak nie, vypíš "Nesprávne, skús znova." a opakuj.