Диапазоны
Во многих условиях спрашивают, попадает ли число в диапазон: между 10 и 25 градусами ли температура? Весит ли тыква от 4 до 8 кг? В математике вы написали бы 10 ≤ t ≤ 25. В Lua нужны два сравнения, соединённые с помощью and:
local temperature = 18
if temperature >= 10 and temperature <= 25 then
print("Курам комфортно")
endПрограмма выведет:
Курам комфортноКаждая часть — это полное сравнение с temperature. Математическая запись не работает, а её ошибка может озадачить:
local temperature = 18
if 10 <= temperature <= 25 then
print("Курам комфортно")
endmain.lua:2: attempt to compare boolean with numberLua сравнивает слева направо: 10 <= temperature даёт true, а потом он пытается выполнить true <= 25, то есть сравнить логическое значение с числом. Противоположное, «вне диапазона», требует or: temperature < 10 or temperature > 25. С and оно никогда не было бы истинным, потому что ни одно число не бывает одновременно меньше 10 и больше 25.
Когда вы делите числа на несколько диапазонов, используйте elseif. Каждая ветка elseif выполняется, только когда все условия выше неё были ложными, поэтому повторять их не нужно:
local weight = 6
if weight < 4 then
print("Маленькая тыква: 10 монет")
elseif weight <= 8 then
print("Средняя тыква: 20 монет")
else
print("Большая тыква: 35 монет")
endПрограмма выведет:
Средняя тыква: 20 монетПрограмма доходит до weight <= 8, только когда weight < 4 ложно, поэтому weight >= 4 and weight <= 8 не нужно. Следите за границами: тыква в 4 кг средняя, в 8 кг — всё ещё средняя, а else берёт всё, что больше 8. Каждое число должно попадать ровно в один диапазон: при weight < 4 и weight > 4 тыква ровно в 4 кг провалилась бы в щель между ними.
Диапазоны сочетаются с другими условиями. То, как Эмма поливает поле, зависит от погоды и от температуры:
local weather = "солнечно"
local temperature = 31
if weather == "дождливо" then
print("Сегодня без полива")
elseif temperature >= 30 then
print("Поливать утром и вечером")
elseif temperature >= 15 then
print("Поливать вечером")
else
print("Поливать через день")
endПрограмма выведет:
Поливать утром и вечеромЗадание
- 1
Запустите программу: она завершается с ошибкой. Исправьте условие с помощью
and. Тогда программа выведет:Курятник: 18 °C Курам комфортно - 2
Добавьте ещё две ветки с
elseifиelse: при температуре ниже 10 °C выведитеВключить лампу в курятнике, а выше 25 °C —Открыть окна курятника. Затем заменитеtemperatureна31. Программа выведет:Курятник: 31 °C Открыть окна курятника - 3
Проверьте границу: замените
temperatureна10. При 10 °C курам всё ещё комфортно, поэтому программа выведет:Курятник: 10 °C Курам комфортноЕсли она выводит
Включить лампу в курятнике, посмотрите на<и<=в ваших условиях.