Операторы сравнения
Символы > и < — это операторы сравнения: они сравнивают два значения. В Lua их шесть:
==равно:5 == 5~=не равно:5 ~= 3>больше:5 > 3<меньше:3 < 5>=больше или равно:5 >= 5<=меньше или равно:3 <= 5
Все примеры в списке истинны. Следите за границей: 12 > 12 — ложь, а 12 >= 12 — истина. Поэтому «дюжина яиц или больше» записывается как eggs >= 12.
Каждое сравнение даёт логическое значение, true или false, которое вы знаете по прошлому уроку. Его можно вывести или сохранить в переменную:
local eggs = 12
print(eggs > 12, eggs >= 12)
local isDozen = eggs == 12
print("Дюжина:", isDozen)Программа выведет:
false true
Дюжина: trueВ local isDozen = eggs == 12 Lua сначала сравнивает, а потом сохраняет результат. «Равно» записывается двумя знаками равенства, потому что у одного уже есть другая работа: eggs = 12 присваивает (кладёт 12 в eggs), а eggs == 12 сравнивает (спрашивает, равно ли eggs 12, и ничего не меняет). Одиночный = в условии — синтаксическая ошибка: if eggs = 12 then заканчивается сообщением 'then' expected near '='.
«Не равно» в Lua записывается как ~=: тильда и знак равенства. Во многих других языках пишут !=, но Lua такой оператор не знает:
local day = "понедельник"
if day != "суббота" then
print("Сегодня рынка нет")
endmain.lua:2: 'then' expected near '!'Сравнивать можно и строки. Две строки равны, только если совпадают точно, символ в символ: "Морковь" == "морковь" — ложь, потому что заглавная буква — это другой символ. Операторы < и > сравнивают строки по алфавиту: "арбуз" < "банан" — истина. Но все заглавные буквы идут раньше всех строчных, поэтому "Яблоко" < "арбуз" тоже истина.
Число и строка никогда не равны, так что 12 == "12" — ложь, хотя Lua сам превращает "10" + 5 в число. А <, >, <= или >= между числом и строкой заканчиваются ошибкой:
local eggs = "14"
if eggs < 12 then
print("Яиц мало")
endmain.lua:2: attempt to compare string with numberЕсли число пришло в виде строки, сначала преобразуйте его с помощью tonumber.
Задание
- 1
Запустите программу: она завершается с ошибкой. Исправьте условие, поставив оператор, которым в Lua записывается «не равно». Тогда программа выведет:
Рынок открыт только по субботам Морковок: 15 - 2
Торговец Гуго покупает морковь дюжинами. В конце программы напишите инструкцию
if, которая выводитГуго покупает дюжину морковок, еслиcarrotsне меньше 12. Программа выведет:Рынок открыт только по субботам Морковок: 15 Гуго покупает дюжину морковок - 3
Замените
carrotsна12. Дюжина — это ровно 12, так что Гуго всё равно купит морковь, и программа выведет:Рынок открыт только по субботам Морковок: 12 Гуго покупает дюжину морковокЕсли последней строки нет, проверьте оператор сравнения.