Logické operátory
Někdy jedna podmínka nestačí. „Ema jede na trh, pokud má aspoň 12 vajec a je slunečno“ se skládá ze dvou podmínek spojených slovem „a“. Lua k tomu používá anglické slovo and:
local vejce = 18
local pocasi = "slunečno"
if vejce >= 12 and pocasi == "slunečno" then
print("Ema jede na trh")
endVypíše:
Ema jede na trhand (a zároveň), or (nebo) a not (ne) jsou logické operátory. Pracují s podmínkami:
a and bje pravda, jen když jsou pravdivé obě části;a or bje pravda, když je pravdivá aspoň jedna část;not aobrací pravdu na nepravdu a nepravdu na pravdu.
Lua je píše jako slova. Mnoho jiných jazyků používá &&, || a !, v Lua ale && skončí hláškou unexpected symbol near '&'.
„Děda Josef chodí pomáhat v sobotu nebo v neděli“:
local den = "neděle"
if den == "sobota" or den == "neděle" then
print("Děda Josef přijde pomáhat")
endVypíše:
Děda Josef přijde pomáhatKaždá část musí být celé porovnání. Když podmínku zkrátíte tak, jak mluvíme, na den == "sobota" or "neděle", je pravá část jen text "neděle" a text platí jako pravda (víc o tom v příštím cvičení). Podmínka je pak pravdivá každý den, i v pondělí, a Lua žádnou chybu neohlásí.
not se hodí k proměnným s pravdivostní hodnotou. not prsi čtěte jako „neprší“:
local prsi = false
if not prsi then
print("Ema zalévá pole")
endVypíše:
Ema zalévá polenot platí jen pro hodnotu hned za ním. not vejce > 10 neznamená „ne víc než 10 vajec“: Lua nejdřív spočítá not vejce, což je false, a pak porovnává false s 10:
local vejce = 8
if not vejce > 10 then
print("Vajec je málo")
endmain.lua:2: attempt to compare number with booleanDejte porovnání do závorek, not (vejce > 10), nebo prostě napište opačné porovnání, vejce <= 10. V delší podmínce má přednost not, pak and a nakonec or, podobně jako má násobení přednost před sčítáním. Co k sobě patří, seskupte závorkami: (den == "sobota" or den == "neděle") and not prsi.
Jak psát:
Pokyny
Ema veze vejce na trh, pokud jich má aspoň 12 a zároveň neprší. Pod poslední řádek napište příkaz if, který v takovém případě vypíše Ema jede na trh. Použijte and a not.
Přidejte větev else, která vypíše Ema zůstane na farmě. Pak změňte prsi na true. Stačí jedna nepravdivá část, aby byla nepravdivá celá podmínka s and, a program proto vypíše:
Vejce: 20
Ema zůstane na farměKdyž prší nebo když má Ema víc než 30 vajec, přijede pro ně na farmu obchodník Hugo. Pod end napište další příkaz if s or, který vypíše Hugo přijede na farmu. Program vypíše:
Vejce: 20
Ema zůstane na farmě
Hugo přijede na farmuZačněte programovat zdarma
5/10