Zdroje:
Potřebné vstupní znalosti a dovednosti
Oborové
Digitální dovednosti
Vzdělávací cíle:
Přínos využití digitálních technologií
Cykly jsou základním stavebním kamenem každého programu. Ulehčují nám práci a díky nim nemusíme opakovat určité kusy kódu, které se neustále opakují podle nějakého pravidla, podobně jako např. repetice či stupnice v hudbě.
Tato aktivita navazuje na sérii Python v hudbě 05 – Podmínky podruhé. V této aktivitě studenti objevují smysl cyklů, díky kterým mohou výrazně zkrátit délku celého kódu. Na konci si studenti zkusí pomocí smyček ošetřit uživatelské vstupy tak, aby data ze vstupů neházela v programu chyby. Tato aktivita je myšlena převážně jako výklad; studenti dostanou úlohu jako domácí úkol a pokusí se přijít na správné řešení problému.
Výklad
Cyklus v programování lze přirovnat k opakování stejného úkonu tak dlouho, dokud nenastane nějaká podmínka. Můžeme si to představit jako hudební riff, což je krátká melodie nebo rytmus, který se opakuje v průběhu skladby. V programování si tedy cyklus představíme jako opakování určitého kódu, který se bude provádět, dokud nenastane podmínka pro jeho ukončení.
Když programátor zadá cyklus, bude se program opakovat, dokud nebude dosažena určitá podmínka nebo dokud nevyprší určitý časový limit. Podobné je to v hudbě, když se opakující riff opakuje po určitou dobu nebo dokud nenastane určitý signál, aby skončil.
Při použití cyklu v programování se využívají podmínky, které umožňují programu přerušit cyklus a pokračovat v dalších krocích. V hudbě to tudíž nemusí být pouze opakující se riff, ale také např. stupnice. Když je splněna určitá podmínka, tón pokračuje směrem nahoru, dokud není v řadě 8 tónů. Ty upřesňují podmínky, podle kterých cyklus běží.
Cykly jsou velmi užitečné v programování, protože umožňují programu provádět stejné úkony mnohokrát, aniž by programátor musel kód ručně opakovat. Stejně jako v hudbě, kdy se opakuje riff podle určitého tzv. „patternu“ (vzorce), umožňuje cyklus programu udržet určitý rytmus a opakování určitých kroků.
Je důležité věnovat pozornost podmínkám, které určují, kdy cyklus skončí. Pokud podmínka není správně definována, cyklus může způsobit nekonečné opakování, respektive zaseknutí programu. Opět stejně jako v hudbě, pokud by kytarista riff hrál příliš dlouho a znudil tím posluchače.
Cykly nám šetří čas i práci, jelikož díky nim se zbavíme repetitivních částí, které tak budeme delegovat na stroj. My si popíšeme dva základní cykly For a While.
For
Cyklus for v Pythonu slouží k opakování určitého kódu pro každý prvek v nějaké posloupnosti, jako je například seznam, řetězec nebo rozsah čísel.
Syntaxe cyklu for v Pythonu je následující:
for proměnná in posloupnost:
kód, který se má opakovat pro každý prvek posloupnosti
Pojďme si to zkusit představit např. na nácviku těžkého místa v partituře. Hudebník musí stále dokola opakovat jedno místo a jeho učitel říká stále znova tu samou poučku. V jednu chvíli si už začne náš fiktivní učitel připadat jako papoušek a napadne ho: „Co kdyby to za mě říkal stroj?“
Třikrát se zopakuje kód, který je uvnitř cyklu for. V tomto případě to znamená, že program vypíše třikrát proměnnou poucka. Jenže třikrát to většinou nestačí. Šlo by to i stokrát? Zkusme změnit „range“ na 100 a uvidíme, co se stane. Kód nám to všechno vypíše stokrát. Jestli nás zajímá, jak vysoké číslo náš počítač zvládne, doporučuji uložit si před experimentem rozdělanou práci. Napočítat po jedné do miliardy trvá opravdu dlouho, sám jsem si to musel vyzkoušet.
Určitě některé napadlo, že takovéto počítadlo by šlo využít různě. Šlo by podmínku nastavit tak, aby cyklus načetl všechny hodnoty v proměnné? Samozřejmě že ano. Pojďme si to ukázat na naší tónové řadě.
K čemu je to ale všechno dobré? Vypsat obsah proměnných už jsme se přece naučili. Metoda for nám totiž slouží tehdy, chceme-li např. v nějakém seznamu najít určitou hodnotu. Cyklus for projede všechna pole a porovná je s hledaným výrazem. Poslouží nám k tomu i podmínky, které jsme se již naučili v minulých dílech. Podmínka totiž nemusí být stanovena pouze na začátku cyklu. Můžeme ji vnořit i do cyklu samotného.
V tomto případě, pakliže tedy zadáme user_input, kde nám cyklus for nenajde shodu se seznamem proměnné scale, vypíše, že zadaný user_input nenašel. Všimněme si f-zápisu ve funkci print.
F-řetězce jsou způsob, jak do řetězce vložit proměnnou nebo výraz pomocí zápisu {} uvnitř řetězce a následného použití klíčového slova f před řetězcem, abychom si usnadnili zápis proměnných.
Je v pořádku, že nám program oznámí, že tón w nenašel. My ale přece víme, že žádný tón w neexistuje! Co s tím tedy dál? Zkusme kód opět trochu pozměnit. Co kdybychom místo obyčejného vypisování hlášek uložili do proměnné pravdivostní hodnotu, a zároveň z user_input udělali opravdový input?
Vidíme, že zde již začíná opravdová interakce s programem. Najednou máme pod kontrolou, co do programu zadáváme a co s tím program udělá. Pojďme si ukázat ještě další cyklus, a to cyklus while.
While
Cyklus while je další možností, jak donutíme program opakovat nějakou akci stále dokola. Na rozdíl od for trvá akce while tak dlouho, dokud platí určitá podmínka. Můžeme tak vytvořit i nekonečnou smyčku, což nedoporučuji zkoušet. Zapisujeme ho následujícím způsobem:
Tento kus kódu se nezastaví, dokud bude proudit elektřina do našeho stroje. Je to způsobeno tím, že proměnná chyba má pravdivostní hodnotu, a dokud tomu tak bude, tak program bude vypisovat: „Cvičení dělá mistra.“ A jakmile smyčka while v tomto případě začne, už proměnnou chyba nic nezmění, a proto bude pokračovat donekonečna.
Mohli bychom to zkusit na validaci (ošetření) uživatelských vstupů. Např. když hned na začátek skriptu umístíme cyklus while, který bude stále načítat user_input, pokud uživatel nezadá tóny, které se nachází v proměnné scale.
Jelikož je toto téma dost rozsáhlé, zkusíme ho procvičit na domácí úloze. Tato úloha bude trochu náročná, ale v praxi si ověříme, zda rozumíme tomu, co jsme zatím probrali. Úloha nemá jedno správné řešení. K výsledku můžeme dojít několika způsoby. Důležité je, abychom pomocí kódu vyřešili problém, který spočívá v nevyzpytatelnosti uživatelských vstupů.
Zadání
Uprav celý kód tak, aby uživatel neměl možnost zadat na vstupu jiný typ dat než ta, která jsou uložena v proměnné scale. Pomocí cyklů while a for budeme větvit celý algoritmus tak, aby uživatel musel zadat pouze nadefinované tóny. Můžeš zvolit tento postup:
1.Definice proměnných:
2. Vstup uživatele:
3. Vytvoř cyklus while:
4. Do cyklu while vnoř další cyklus for:
5. Podmínka if:
6. Druhý cyklus while:
7. Druhý cyklus for:
8. Podmínka if:
9. Příkaz break:
Celkově by mohl být postup popsán takto:
Řešení
Úloha 1: Uprav kód z předešlého cvičení tak, aby ošetřil uživatelské vstupy. V případě, že uživatel zadá tón, který není v seznamu scale, program jej nepustí dál a bude ve smyčce opakovat zadání správného uživatelského vstupu.
Zkušenosti s použitím materiálu
Tento materiál je výklad cyklů v jazyce Python. Má sloužit k objasnění a upevnění všech termínů, které je potřeba ke zvládnutí základní konstrukce jazyka Python. Jelikož se jedná o rozsáhlé téma a způsobů, jak tento problém vyřešit, je několik, ukázalo se jako optimální řešení zadat studentům tento úkol jako domácí úlohu, kdy si každý student vyhradí čas na své vlastní kreativní řešení.
Článek je publikován pod licencí Creative Commons - Uveďte původ-Neužívejte komerčně-Nezpracovávejte 4.0 .
Článek nebyl prozatím komentován.
Pro vložení komentáře je nutné se nejprve přihlásit.
Tento článek je zařazen do seriálu Python v hudbě.
Ostatní články seriálu:
Materiály s klíčovým slovem NPO 3.1 DIGI vytvořil tým metodiků v projektu Podpora škol v kontextu digitalizace (Národní plán obnovy 3.1 DIGI) pro podporu pedagogů při ICT revizích.
Další informace, metodické materiály i inspiraci do výuky jednotlivých předmětů i napříč předměty najdete na webu https://digitalizace.rvp.cz/

Národní pedagogický institut České republiky © 2025