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.
-
Program v blokoch...
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
- 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.
- Pomocou operátora or upravte program tak, aby sa pri stlačení ktoréhokoľvek tlačidla zobrazila šípka a inak prázdny displej.
- 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.
- (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 →