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")
end

Vypíše:

Ema jede na trh

and (a zároveň), or (nebo) a not (ne) jsou logické operátory. Pracují s podmínkami:

  • a and b je pravda, jen když jsou pravdivé obě části;
  • a or b je pravda, když je pravdivá aspoň jedna část;
  • not a obrací 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")
end

Vypíše:

Děda Josef přijde pomáhat

Kaž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")
end

Vypíše:

Ema zalévá pole

not 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")
end
main.lua:2: attempt to compare number with boolean

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

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 farmu

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

5/10