Tento cyklus sa na rozdieľ od cyklu FOR opakuje v vázislosti od nejakej podmienky. Kým je podmienka splnená, vykonáva sa. (V cykle FOR sme vždy vopred špecifikovali koľkokrát sa cyklus zopakuje, prípadne aké hodnoty bude nadobúdať iteračná premenná, tu iteračná premenná neexistuje.)
while x < 5:
print("hello")
Všimnite si podobnosť s konštrukciou IF. Cyklus definujeme použitím kľúčového slova while, za ktorým špecifikujeme podmienku nasledovanú dvojbodkou. Podmienka je v úplne rovnakom formáte ako v podmienenom príkaze IF a tiež sa rovnako vyhodnocuje. V podmienke používame čísla, text, premenné, a hlavne logické operátory <, >, <=, >=, ==, !=, ale aj logické spojky or a and, ktoré fungujú ako disjunkcia a konjunkcia výrokov ktoré dôverne poznáte z matematiky :).
Ak sa v kóde nachádza cyklus WHILE, Python spraví nasledovné:
Čo sa dá napísať s použitím cyklu FOR, dá sa prepísať bez FOR, iba s WHILE.
Napríklad vypísanie čísel od 1 po 20 a ich druhých mocnín môžeme zapísať nasledovne:
for i in range(1, 21):
print(i, "na druhu je", i*i)
Ten istý program s použitím WHILE:
i = 1
while i < 21:
print(i, "na druhu je", i*i)
i = i + 1
Pozor! V cykle while sme museli definovať podmienku - chceme len čísla menšie ako 20. Premennú reprezentujúcu mocnené číslo sme museli najprv pred cyklom nastaviť (i = 1) a potom vnútri cyklu zvyšovať tak, aby postupne nadobúdala hodnoty vždy o 1 vačšie ako v predošlej iterácii (i = i + 1). Túto réžiu za nás v cykle FOR robil sám cyklus a príkaz range().
V ukážke vyššie (s mocninami čísel) sa zdá, že nám while len komplikuje prácu - to, čo za nás robil FOR a range() musíme teraz robiť pracne sami. Nie vždy sa nám hodí práve cyklus WHILE a v ukážke hore je vážne jednoduchšie a prehľadnejšie použiť FOR. Skutočná krása cyklu WHILE je v tom, že v kóde nemusíme definovať presný počet jeho vykonaní (iterácií), čo nám umožňuje lepšie reagovať na meniace sa hodnoty (napríklad vstup od používateľa).
Napríklad
Aj taký sa môže hodiť a viac o ňom si povieme nabudúce, do vtedy naň však pozor! :P Ak podmienku v cykle WHILE nastavíme na stále platnú (niečo čo vždy platí matematici označujú tiež ako "tautológia"), tak sa cyklus nikdy nezastaví. Príklady tautológií: 3 < 5; 0 == 0; "Janko" != "Hrasko"; atd. V Pythone môžete tiež použiť konštantu pravdivostnej hodnoty True alebo False
i = 0
while i < 10:
i -= 1
Ak nekonečný cyklus spustíte, môžete vykonávanie programu zastaviť stlačením Ctrl + C
Načítame číslo a chceme vypísať jeho odmocninu. Postupne mocníme čísla 1, 2, 3... a zisťujeme či sme náhodou neprekrečoli načítané číslo.
cislo = int(input('zadaj číslo:'))
x = 0
while x**2 < cislo:
x += 1
print('odmocnina z', cislo, 'je', x)
Toto riešenie nie je idálne, pre mocniny celých čísel síce funguje, ale pre 26 napríklad vypíše ako odpoveď 6. Vylepšením by mohlo byť použitie desatinných čísel a postupné zvyšovanie x o napríklad jednu tisícinu. Ak chceme povoliť desatinné číslo aj ako vstup, namiesto funkcie int() musíme použiť float().
cislo = float(input('zadaj číslo:'))
x = 0
while x**2 < cislo:
x += 0.001
print('odmocnina', cislo, 'je', x)
Na odmocnenie máme v Pythone samozrejme funkciu a nerobíme zakaždým takýto while, vypočíta ju math.sqrt(cislo) alebo aj mocnenie správnym číslom (viete z matematiky :)
Pre fajnšmekrov: Tento spôsob hľadania odmocniny je stále ďaleko od ideálneho. Predstavte si, že by mal Python takto hľadať odmocninu z čísla 1 000 000, pričom musí postupne zvyšovať hodnotu v x o 0.001. Koľkokrát musí zvýšiť x a koľkokrát vyhodnotiť podmienku? Skúste vyhľadávanie prepísať s použitím myšlienky binárneho vyhľadávania.
coming soon :)
Viac o cykloch a špeciálnych slovíčkach break a continue sa dá dočítať na teclado.com. Actually, na tejto stránke je rozumne vyzerajúci 30 dňový tutorial Pythonu, ktorý pekne rozširuje znalosti, ktoré by ste mali mať z našich hodín, odporúčam sa doň pozrieť.