Odborné články Gymnaziální vzdělávání Python v hudbě: cykly v jazyce Python, cyklus For
Odborný článek

Python v hudbě: cykly v jazyce Python, cyklus For

10. 3. 2026
Gymnaziální vzdělávání
Autor
Pavel Konrád

Anotace

Pomocí programovacího jazyka Python prozkoumáme možnosti, jak přenášet a kódovat informace, které budeme demonstrovat na hudebních analogiích. V šesté aktivitě ze série Python v hudbě si ukážeme, k čemu slouží v programování cykly. V tomto cvičení upravíme kód z minulé aktivity, který bude sloužit k hledání dvou hudebních tónů v určitém předem definovaném seznamu tónů (scale). Uživatel bude vyzván k zadání prvního tónu a poté k zadání druhého tónu. Pokud budou oba tóny obsaženy v seznamu tónů, kód je uživateli vypíše. Pokud uživatel zadá tón, který v seznamu není, zobrazí se uživateli chybová hláška a seznam všech dostupných tónů.
  • Typ materiálu: cvičení 
  • Škola: gymnázium
  • Ročník: kvarta
  • Metody: cvičení
  • Vzdělávací obor: informatika
  • Tematický okruh: algoritmizace a programování
  • Očekávané výstupy: Vytvoří přehledný program pro vyřešení konkrétního problému s ohledem na jeho možné důsledky a svou odpovědnost za ně; používá opakování, větvení programu se složenými podmínkami, proměnné, seznamy, podprogramy s parametry a návratovými hodnotami; ve snaze o vyšší efektivitu navrhuje, řídí a hodnotí souběh procesů.
  • Časová dotace:
    • Výuka: 45 minut
    • Příprava: 30 minut
  • Pomůcky, hardware a software
    • Učitel: dataprojektor, výpočetní zařízení (PC, notebook, tablet)
    • Žák: výpočetní zařízení (PC, notebook, tablet)

Zdroje:

  • https://www.w3schools.com/python

Potřebné vstupní znalosti a dovednosti

Oborové

  • Základní orientace v programovacím jazyku Python
  • Znalost proměnných a datových typů

Digitální dovednosti

  • Pokročilé ovládání počítače
  • Schopnost postupovat podle návodu
  • Orientace v základní terminologii algoritmizace a programování

Vzdělávací cíle:

  • Žák pomocí smyček a podmínek vytvoří jednoduchý algoritmus, který bude hlídat uživatelovy vstupy.
  • Žák použije prakticky cyklus for k usnadnění práce a kratšímu zápisu kódu.

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ě.

Metodická poznámka

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:

  • scale: seznam tónů
  • nasel_jsem: logická proměnná, která určuje, zda byl nalezen hledaný tón.

2. Vstup uživatele:

  • Vstup uživatele se načítá pomocí funkce input().
  • Uživatel zadává první tón.

3. Vytvoř cyklus while:

  • Dokud hodnota proměnné nasel_jsem není true, program bude opakovat cyklus while.
  • Tento cyklus se používá k nalezení prvního tónu, který uživatel zadává.

4. Do cyklu while vnoř další cyklus for:

  • Cyklus for prochází všechny hodnoty v seznamu scale.
  • Pokud hodnota v seznamu scale odpovídá vstupu uživatele, nastaví se proměnná nasel_jsem na True.

5. Podmínka if:

  • Pokud byl nalezen první tón, program pokračuje v hledání druhého tónu.
  • Pokud nebyl nalezen první tón, vypíše se chybová hláška a seznam všech dostupných tónů a cyklus while se opakuje.

6. Druhý cyklus while:

  • Pokud byl nalezen první tón, program začne hledat druhý tón. Nový cyklus while je stále vnořený do původního cyklu.
  • Cyklus while se používá k nalezení druhého tónu, který uživatel zadává.

7. Druhý cyklus for:

  • Cyklus for opět projde všechny hodnoty v seznamu scale.
  • Pokud hodnota v seznamu scale odpovídá vstupu uživatele, nastaví se proměnná nasel_jsem opět na true.

8. Podmínka if:

  • Pokud byly nalezeny oba tóny, program vypíše hodnoty prvního a druhého tónu.
  • Pokud nebyl nalezen druhý tón, vypíše se chybová hláška a seznam všech dostupných tónů a druhý cyklus while jde zase od začátku.

9. Příkaz break:

  • Pokud byly nalezeny oba tóny, je nutné ukončit cyklus for pomocí příkazu break.

Celkově by mohl být postup popsán takto:

  1. Definice proměnných.
  2. Načtení vstupu od uživatele pro první tón.
  3. Cyklus while pro hledání prvního tónu.
  4. Cyklus for pro hledání prvního tónu.
  5. Podmínka if pro ověření, zda byl nalezen první tón.
  6. Cyklus while pro hledání druhého tónu.
  7. Cyklus for pro hledání druhého tónu.
  8. Podmínka if pro ověření.

Ř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í.

Autor
Pavel Konrád

Hodnocení uživatelů

Článek nebyl prozatím komentován.

Váš komentář

Pro vložení komentáře je nutné se nejprve přihlásit.

RVP do 2024

Očekávané výstupy:

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/