Smyčky, cykly

Další důležitou koponentou programovacích jazyků jsou tzv. smyčky nebo cykly. Jsou to opakující se části kódu a pomáhají programátorovi vytvořit konstrukci typu „pro každý prvek z množiny prvků vykonej …“ nebo „opakuj … dokud není splněna podmínka, že …“.

Smyčka for

Zkusme si v praxi následující příklady:

for cislo in range(5):
    print(cislo)

a

for pozdrav in 'Ahoj', 'Hello', 'Hola', 'Hei', 'SYN':
    print(pozdrav + '!')

Nová užitečná funkce range() vrátí pole indexů, které velikostně odpovídá zadanému číslu. range(5)() vrátí pole [0, 1, 2, 3, 4].

Pomocí smyčky for vytvoříme novou loklání proměnnou cislo nebo pozdrav, do které budou postupně ukládány hodnoty prvků ze vstupního pole a v těle smyčky se bude s touto proměnnou dále pracovat (v našem případě se pouze zavolá funkce print().

Oblast platnosti proměnných

Vidíme, že proměnná cislo nebo pozdrav je definována při vzniku smyčky. Její oblast platnosti (… je definována pro …) platí pouze v těle smyčky. Můžeme ale vzít jinou proměnnou definovanou výše a přistupovat k její hodnotě

suma = 0

for i in range(10):
    suma = suma + i

print(suma)

Smyčka typu while

Na rozdíl od smyčky for, která pracuje s prvky z existujícího pole, smyčka typu while provádí blok kódu, dokud není splněna nějaká podmínka:

dny = ['pondeli', 'utery', 'streda', 'cvrtek', 'patek', 'sobota', 'nedele']

den = 0

while den < 5:
    print(dny[den] + ': Musim do Kolbenky :-(')
    den = den + 1

print('Vikend!')

Brzda break

Smyčka while může být zrádná v tom, že pokud není podmínka splněna, může běžet i nekonečně dlouho

from random import randrange

while True:
        print('Číslo je', randrange(10000))
        print('(Počkej, než se počítač unaví...)')

Tento cyklus musíme přerušit uměle (např. klávesovou zkratkou Ctrl+C).

Pokud chceme z nějaké smyčky (for nebo while) náhle vyskočit, použijeme brzdu break. V následující ukázce uvidíme, jak zajistit, že vstup od uživatele bude opravdu správný:

while True:
        odpoved = input('Řekni Ááá! ')
        if odpoved == 'Ááá':
            break
        print('Špatně, zkus to znovu')

 print('Hotovo, ani to nebolelo.')