Логические операторы
Иногда одного условия мало. «Эмма едет на рынок, если у неё не меньше 12 яиц и погода солнечная» состоит из двух условий, соединённых союзом «и». Lua записывает этот союз по-английски:
local eggs = 18
local weather = "солнечно"
if eggs >= 12 and weather == "солнечно" then
print("Эмма идёт на рынок")
endПрограмма выведет:
Эмма идёт на рынокand, or и not — это логические операторы. Они работают с условиями:
a and bистинно, только если истинны обе части;a or bистинно, если истинна хотя бы одна часть;not aпревращает истину в ложь, а ложь в истину.
Lua записывает их словами. Во многих других языках используют &&, || и !, но в Lua && заканчивается сообщением unexpected symbol near '&'.
«Дедушка Джо приходит помогать в субботу или в воскресенье»:
local day = "воскресенье"
if day == "суббота" or day == "воскресенье" then
print("Дедушка Джо приходит помогать")
endПрограмма выведет:
Дедушка Джо приходит помогатьКаждая часть должна быть полным сравнением. Если сократить условие так, как мы говорим, до day == "суббота" or "воскресенье", то правая часть — это просто строка "воскресенье", а строка считается истинной (подробнее об этом в следующем упражнении). Тогда условие истинно каждый день, даже в понедельник, а Lua не сообщает ни о какой ошибке.
not удобно использовать с логическими переменными. Читайте not isRaining как «дождя нет»:
local isRaining = false
if not isRaining then
print("Эмма поливает поле")
endПрограмма выведет:
Эмма поливает полеnot относится только к значению сразу после него. not eggs > 10 не значит «яиц не больше 10»: Lua сначала вычисляет not eggs, получает false, а потом сравнивает false с 10:
local eggs = 8
if not eggs > 10 then
print("Яиц мало")
endmain.lua:2: attempt to compare number with booleanВозьмите сравнение в скобки, not (eggs > 10), или просто напишите противоположное сравнение, eggs <= 10. В длинном условии первым выполняется not, потом and, а or последним, как умножение выполняется раньше сложения. Скобками группируйте то, что относится друг к другу: (day == "суббота" or day == "воскресенье") and not isRaining.
Задание
- 1
Эмма везёт яйца на рынок, если у неё не меньше
12яиц и нет дождя. Под последней строкой напишите инструкциюif, которая в этом случае выводитЭмма идёт на рынок. Используйтеandиnot. - 2
Добавьте ветку
else, которая выводитЭмма остаётся на ферме. Затем заменитеisRainingнаtrue. Достаточно одной ложной части, чтобы всё условие сandстало ложным, поэтому программа выведет:Яиц: 20 Эмма остаётся на ферме - 3
В дождливые дни или когда у Эммы больше
30яиц, на ферму приезжает торговец Гуго и покупает их. Подendнапишите ещё одну инструкциюifсor, которая выводитГуго приезжает на ферму. Программа выведет:Яиц: 20 Эмма остаётся на ферме Гуго приезжает на ферму