Zdroje:
Potřebné vstupní znalosti a dovednosti
Oborové
Digitální dovednosti
Vzdělávací cíle:
Přínos využití digitálnícg technologií
Logické operátory a pravdivostní hodnoty jsou základní operace, které můžeme použít při práci s daty. Díky skládání algoritmu nemusíme vypisovat stále se opakující informace, které tak necháváme generovat program automaticky.
Tato aktivita navazuje na sérii Python v hudbě 04 – Určení intervalu podle podmínek. V této aktivitě studenti vylepšují již funkční algoritmus, přičemž předpokládají různé scénáře, jakými se program může ubírat. Pomocí if a else tak rozhodují, jak bude program v různých scénářích postupovat. Díky if-else náš celý skript zjednodušíme a zkrátíme a tak se přiblížíme zase víc k přehlednému a logickému kódu.
Výklad
Program je především naprogramován tak, aby reagoval na uživatelské vstupy. Ty můžou mít různou podobu. V našem předchozím skriptu jsme pracovali s funkcí input(), do které mohl uživatel zadat nějaké hodnoty, které se uložily do proměnné x.
Jenže co když uživatel nepochopí, že má do pole input zadávat pouze tóny pro evropskou hudbu, a bude chtít určit např. interval mezi tóny z a s, které nemáme nadefinované v proměnné scale?
Jestliže dovolíme uživateli s programem interagovat, měli bychom také zajistit, aby každý vstup byl nějakým způsobem ošetřený pro případ, že uživatel zadá hodnoty, se kterými program nepočítá. Existuje několik zavedených metod, jak ošetřovat vstupy, a jeden z nejjednodušších je ošetřit je podmínkou. Normálně se používají v Pythonu tzv. „výjimky“. Na ty bychom ovšem museli umět tvořit funkce, které v této sérii probereme později. Proto to v tuto chvíli zjednodušíme, ale princip zachováme. Použijeme totiž již známé if a dnes k němu přidáme i else.
Každá podmínka v programování má totiž i druhou část. Program musí vědět, že pokud se v programu děje „něco“, tak se podle toho „něčeho“ program zachová. Programu ale také musíme říct, co má dělat, když se to „něco“ nestane. K tomu slouží právě ta druhá část podmínky: else. Pojďme si to ukázat na pseudokódu.
If (hudebnik = bubenik)
Noty = false
Else:
noty = true
Kód nám říká, že když se objeví v proměnné hudebnik hodnota bubeníka, program bude vědět, že noty se nestanou skutečností. V každém jiném případě, kdy hudebníka bude představovat kdokoliv jiný, budou noty potřeba. Můžeme přidat ještě rozšiřující podmínku, kterou již známe z minula: elif. Může se totiž objevit ještě nějaká jiná skutečnost, která by mohla nastat.
If (hudebnik = bubenik)
Noty = false
Elif (hudebnik = violista)
Program end
Else:
noty = true
Ve skutečnosti takových situací může nastat nespočet. Taková zkouška muzikantů může mít mnoho dalších nevyzpytatelných proměnných.
If (hudebnik = bubenik)
Noty = false
Rytmus = true
Elif (hudebnik = zpevak)
Noty = false
Rytmus = false
Zkouska = zpozdeni
Elif (hudebnik = basak)
Noty = true
Rytmus = true
Komunikace = false
Elif (hudebnik = kytarista)
Problem = true
Elif (hudebnik = violista)
Program end
Else:
noty = true
Pomocí podmínek if, elif a else můžeme program rozvětvit do několika možných situací. Pojďme tedy zkusit ošetřit první vstup uživatele, kde zajistíme, že v případě, že do vstupu zadáme něco, co tam nepatří, program začne „nadávat“ a upozorní nás, že takové vstupy zadávat nelze. Nejdříve si pojďme nakopírovat začátek kódu z minula.
Uživatel teď může vložit nějakou hodnotu do proměnné x a y. Pojďme si ukázat, jak bychom mohli uživatele upozornit na to, že takovou interakci, kterou se právě rozhodl použít, jsme nepředpokládali.
Všimněme si, že jsme přidali do podmínky logický operátor not in. Python je v tomto ohledu velmi přívětivý a spoustu věcí nám takto ulehčuje. Logický operátor not in porovná hodnoty v proměnné scale s proměnnou x a vrátí True, pakliže ji najde. Podmínka se tedy vyhodnotí buď jako True, nebo False a podle toho pokračuje program dále. Rovnou přidáme podmínku, která bude takto hlídat i druhý vstup uživatele, a také přidáme kus kódu, takže v případě, že program najde shodu, rovnou vstupy převede na čísla, abychom mohli s proměnnými dále pracovat. Celý kód tedy zatím vypadá nějak takto:
Kód má stále spoustu závažných trhlin a nedostatků. Interakce je zde velmi omezená a v reálném nasazení by takováto validace nestačila. Jelikož kód nám slouží pouze jako demonstrace a my víme, jak s tímto naším programem máme interagovat, můžeme se posunout na další část programu a zkusit zase o něco zpříjemnit celkovou interakci.
Minule jsme vytvořili i výpočet, který nám sdělí, jaká je vzdálenost mezi dvěma tóny. Pojďme si ho připomenout a znovu si ho nakopírujeme do našeho současného řešení. V tomto řešení se ale nachází jeden závažný nedostatek. V případě, že zadáme první tón, který je v proměnné scale výše než druhý tón neboli má větší hodnotu, program začne vracet špatné hodnoty. Pojďme tedy vytvořit podmínku, že v případě, že bude první tón větší než ten druhý, program výpočet obrátí:
Máme tedy základně ošetřené vstupy uživatele, máme výpočet pro vzdálenost dvou tónů směrem nahoru i dolů. Jediné, co nám zbývá, je nějakým způsobem všechny výpočty zobrazit a přeložit do naší řeči. Možná vás již napadlo, že bychom nemuseli pracně vypisovat opět všechno větvení spjaté s tím, jaké číslo je jaký interval. Existuje jednodušší řešení, kterým si výrazně zkrátíme náš kód.
Když už zjistíme, o kolik tónů jsou od sebe jednotlivé tóny vzdálené, mohli bychom pak jednoduše toto číslo použít jako hledací index v nově vytvořené proměnné, která bude obsahovat na jednotlivých indexech jména intervalů. Abychom je nemuseli vypisovat, zde je seznam intervalů.
Pojďme tedy zkusit utvořit kus našeho kódu a poskládat jednotlivá řešení do sebe.
Zadání
print(intervals[vypocet], " směrem dolů.")
Nebo:
print(intervals[vypocet], " směrem nahoru.")
Pokud bychom chtěli tento program rozšířit, mohli bychom například přidat další možnosti chyb, třeba pokud uživatel zadá neplatnou kombinaci tónů nebo více než dva tóny. Také bychom mohli přidat možnost zobrazit uživateli seznam platných tónů, aby si mohl vybrat z nabídky.
Řešení:
Úloha 1: Zadejte dva tóny a program vypočte vzdálenost mezi nimi a vypíše odpovídající hudební interval. Program kontroluje, zda jsou zadané tóny platné, a v případě neplatného vstupu vypíše chybovou zprávu.
Zkušenosti s použitím materiálu
V praxi se ukázalo, že tento materiál je vynikajícím samostatným cvičením. Studenti, kteří jsou napřed, zkouší vymyslet svá invenční řešení a vylepšují tak předešlé skripty. Se studenty, kteří plně nechápou podmínky, je to skvělá příležitost k opakování předešlé látky a jejímu upevnění v novém kontextu. Učitel může postupně odkrývat řešení či studentům připravit různé nápovědy, předpřipravit syntaxi apod.
Č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