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čí.
while je odpočítavanie alebo počítanie. Na to si vytvoríme premennú, ktorú budeme v každom cykle meniť, kým nedosiahne nejakú hodnotu. Napríklad, program, ktorý odpočítava od 5 do 1:
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čí.
break. V tomto kóde si vypýtame od používateľa písmeno a skontrolujeme, či sa rovná "x", ak nie, musí skúsiť hádať znova, pokým sa pismeno nerovná "x".
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 používateľ zadá správne heslo.)
- Generovanie dát, kým sa nedosiahne cieľ (napr. náhodné meno súboru, ktoré ešte neexistuje.)
- Opakovanie pokusov, napr. o pripojenie, stiahnutie, a pod. Limitujeme počet pokusov, aby to nebol nekonečný cyklus.
Zopakuj si!
- Cyklus
whileopakuje 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
breakukončí cyklus okamžite, odkiaľkoľvek vo vnútriwhilebloku. while Truetvorí nekonečný cyklus, ktorý sa dá ukončiť len pomocoubreak.
while (podmienka) { }
while podmienka:
loop while podmienka:
while podmienka do:
False).
True).
True).
True, cyklus pokračuje, ak je False, cyklus sa ukončí a program ide ďalej.
while je ideálny vtedy, keď nevieš vopred, koľkokrát sa má niečo opakovať. Ak vieš, že chceš prejsť konkrétnym zoznamom alebo skontrolovať dáta jednorazovo, na to sú lepšie napríklad cyklus for alebo jednoduchá podmienka.
False.
break.
stop.
while a vstupom od používateľa v tomto cvičení.
Zadefinuj premennú tajne_cislo s hodnotou 4.Do premennej
cislo načítaj vstup od používateľa a pretypuj ho na int.Ak zadané
cislo je menej ako 1 alebo viac ako 10, vypíš „Číslo nie je v rozsahu.“ a žiadaj nové číslo, kým nebude v rozsahu 1 až 10. Skontroluj, či sa zadané číslo rovná hodnote premennej
tajne_cislo: Ak nie, vypíš "Nesprávne, skús znova." a znova si vypýtaj nové číslo.
Ak áno, vypíš "Vyhrávaš!".