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.')