Operácie

Rýchlokurz micro:bit/07 Podmienka if-else

Zo stránky SensorWiki

← Predchádzajúca lekcia | ⌂ Obsah kurzu | Nasledujúca lekcia →

Čo sa naučíte

  • rozhodovať v programe pomocou podmieneného príkazu if-else,
  • reťaziť viac podmienok (else if),
  • spájať podmienky logickými operátormi and, or, not,
  • rozdiel medzi udalosťou a stavom.

Vysvetlenie: vetvenie programu

Doteraz program vykonával vždy tie isté príkazy. Skutočné programy sa však musia rozhodovať: ak je teplota nízka, zapni kúrenie, inak ho vypni. Na to slúži podmienený príkaz if (ak).

Konštrukcia Význam
if podmienka Ak podmienka platí, vykonaj telo. Inak ho preskoč.
if ... else Ak podmienka platí, vykonaj prvú vetvu, inak vykonaj druhú. Vykoná sa vždy práve jedna z nich.
if ... else if ... else Podmienky sa testujú postupne zhora. Vykoná sa vetva prvej podmienky, ktorá platí, ostatné sa preskočia. Ak neplatí žiadna, vykoná sa else.

Podmienky sú rovnaké logické výrazy ako pri cykle while. Zložitejšie podmienky vytvoríme logickými operátormi:

Bloky JavaScript Python Platí, keď...
and && and platia obe podmienky
or || or platí aspoň jedna z podmienok
not ! not podmienka neplatí

Udalosť alebo stav?

V minulej lekcii sme reagovali na udalosť on button A pressed: okamih, keď bolo tlačidlo stlačené. Teraz budeme zisťovať stav button A is pressed: či je tlačidlo stlačené práve teraz. Stav musíme zisťovať opakovane, preto test umiestnime do cyklu forever. Oba prístupy sú správne a každý sa hodí na niečo iné:

  • udalosť – keď treba zareagovať raz na každé stlačenie (počítanie stlačení, prepnutie režimu),
  • stav – keď má program niečo robiť, kým je tlačidlo držané (napr. plyn v hre, pohyb robota).

Program: visačka inak

Rovnaká visačka ako v minulej lekcii, ale riešená testovaním stavu tlačidiel. Navyše pridáme vetvu else: keď nie je stlačené žiadne tlačidlo, visačka „spí“. Blok if-else je v kategórii Logic. Ďalšiu vetvu else if pridáte kliknutím na ikonu ⊕ v spodnej časti bloku.

basic.forever(function () {
    if (input.buttonIsPressed(Button.A) && input.buttonIsPressed(Button.B)) {
        basic.showIcon(IconNames.Heart)
    } else if (input.buttonIsPressed(Button.A)) {
        basic.showIcon(IconNames.Happy)
    } else if (input.buttonIsPressed(Button.B)) {
        basic.showIcon(IconNames.Sad)
    } else {
        basic.showIcon(IconNames.Asleep)
    }
})
def on_forever():
    if input.button_is_pressed(Button.A) and input.button_is_pressed(Button.B):
        basic.show_icon(IconNames.HEART)
    elif input.button_is_pressed(Button.A):
        basic.show_icon(IconNames.HAPPY)
    elif input.button_is_pressed(Button.B):
        basic.show_icon(IconNames.SAD)
    else:
        basic.show_icon(IconNames.ASLEEP)
basic.forever(on_forever)

Ako to funguje

Cyklus forever neustále opakuje jedno rozhodnutie so štyrmi vetvami. Pri každom opakovaní sa podmienky testujú zhora nadol a vykoná sa vetva prvej, ktorá platí.

Na poradí podmienok záleží. Keď držíte obe tlačidlá, platí aj druhá podmienka („A je stlačené“). Keby bola prvá, zobrazil by sa veselý smajlík a k srdcu by program nikdy nedošiel. Preto musí byť najšpecifickejšia podmienka (obe tlačidlá) na začiatku.

Všimnite si rozdiel v správaní oproti minulej lekcii: keď tlačidlo pustíte, visačka zaspí. Ikona sa tu nezobrazí raz po stlačení, ale neustále podľa toho, čo je stlačené práve teraz.

V Pythone sa else if skracuje na elif. V JavaScripte je telo každej vetvy v zložených zátvorkách, v Pythone opäť rozhoduje odsadenie a za každou podmienkou nasleduje dvojbodka.

Časté chyby

  • Zlé poradie podmienok – všeobecnejšia podmienka „zakryje“ špecifickejšiu.
  • Samostatné if-y namiesto reťaze else if. Tri samostatné príkazy if za sebou sa otestujú všetky tri a pri držaní oboch tlačidiel sa vykoná viac vetiev naraz. Reťaz if – else if zaručí, že sa vykoná najviac jedna.
  • Zabudnutá dvojbodka za podmienkou v Pythone.

Úlohy

  1. Vymeňte poradie podmienok tak, aby test oboch tlačidiel bol posledný. Overte v simulátore, že srdce sa už nikdy nezobrazí, a vysvetlite prečo.
  2. Pomocou operátora or upravte program tak, aby sa pri stlačení ktoréhokoľvek tlačidla zobrazila šípka a inak prázdny displej.
  3. Micro:bit meria teplotu (blok temperature (°C) v kategórii Input). Napíšte „teplomer“: ak je teplota nad 25 °C, zobrazí slnko (vlastný obrázok), ak pod 18 °C, snehovú vločku, inak fajku. V simulátore môžete teplotu meniť posuvníkom.
  4. (len V2) Doplňte do visačky ďalšiu vetvu, ktorá pri dotyku loga (blok logo is pressed) zobrazí ikonu Surprised. Kam v reťazi podmienok ju treba umiestniť?

← Predchádzajúca lekcia | ⌂ Obsah kurzu | Nasledujúca lekcia →