Cyklus je základná programová štruktúra, ktorá umožňuje opakovanie príkazov bez toho, aby si ich musel písať znova a znova. Cyklus while opakuje blok kódu, kým platí určitá podmienka.
Syntax cyklu while
while podmienka:
# telo cyklu — vykoná sa, kým podmienka platí
Python najprv skontroluje podmienku. Ak je True, vykoná telo cyklu. Potom znova skontroluje podmienku. Takto to pokračuje, kým podmienka nie je False — vtedy sa cyklus ukončí a program pokračuje za cyklom.
Príklad — odpočítavanie
pocitadlo = 5
while pocitadlo > 0:
print(pocitadlo)
pocitadlo -= 1 # zmenšuj pocitadlo, aby sa cyklus raz skončil
print("Štart!")
Výstup:
5
4
3
2
1
Štart!
Premenná pocitadlo sa v každom opakovaní zmenší o 1. Keď dosiahne hodnotu 0, podmienka pocitadlo > 0 prestane platiť a cyklus sa ukončí.
Vstup od používateľa
Cyklus while je ideálny, keď čakáš na správny vstup:
heslo = ""
while heslo != "tajne123":
heslo = input("Zadaj heslo: ")
print("Prístup povolený!")
Cyklus sa opakuje, kým používateľ nezadá správne heslo. Nevieš vopred, koľko pokusov bude potrebovať — to je presne situácia pre while.
Nekonečný cyklus
Ak podmienka nikdy neprestane platiť, cyklus beží donekonečna. Toto je zvyčajne chyba:
# POZOR — nekonečný cyklus!
x = 1
while x > 0:
print(x)
x += 1 # x rastie, nikdy nebude <= 0
Nekonečné cykly zablokujú program. Vždy sa uisti, že v tele cyklu dochádza k zmene, ktorá raz spôsobí, že podmienka prestane platiť. V Pythone môžeš nekonečný cyklus prerušiť stlačením Ctrl+C.
Príkaz break
Niekedy chceš cyklus ukončiť predčasne, napríklad keď nájdeš hľadanú hodnotu:
while True: # zdanlivo nekonečný cyklus
odpoved = input("Hádaj číslo (1–10): ")
if odpoved == "7":
print("Správne!")
break # okamžite ukončí cyklus
else:
print("Skús znova.")
Príkaz break okamžite ukončí cyklus, aj keď podmienka stále platí.
Príkaz continue
continue preskočí zvyšok aktuálneho opakovania a prejde na ďalšie:
cislo = 0
while cislo < 10:
cislo += 1
if cislo % 2 == 0:
continue # preskočí párne čísla
print(cislo)
# Vypíše: 1 3 5 7 9
Používaj while vtedy, keď nevieš vopred, koľko opakovaní bude potrebných. Keď vieš presný počet opakovaní, zvyčajne je vhodnejší cyklus for.
Cvičné príklady
Koľkokrát sa vykoná telo nasledujúceho cyklu? n = 1; while n < 16: n = n * 2
Zobraziť odpoveď
Čo je nekonečný cyklus a ako mu predísť?