Счёт в обратную сторону и с шагом
У цикла for может быть и третье число — шаг: на сколько увеличивать переменную после каждой итерации. Если его нет, шаг равен 1. При шаге -1 цикл считает в обратную сторону:
for day = 3, 1, -1 do
print("Дней до урожая: " .. day)
end
print("Сбор урожая!")Дней до урожая: 3
Дней до урожая: 2
Дней до урожая: 1
Сбор урожая!Когда считаете в обратную сторону, не забывайте про -1. Без него цикл считает вверх от 3 до 1. Таких чисел нет, поэтому цикл не выполняется ни разу. Для Lua это не ошибка, цикл просто ничего не делает:
for day = 3, 1 do
print("Дней до урожая: " .. day)
end
print("Сбор урожая!")Сбор урожая!То же происходит всякий раз, когда начало больше конца: for i = 1, 0 do выполняется ноль раз. Часто это именно то, что нужно: при for plot = 1, plots do и plots, равном 0, поливать нечего, и цикл ничего не делает.
Шаг 2 берёт каждое второе число:
for plot = 1, 7, 2 do
print("Полив грядки " .. plot)
endПолив грядки 1
Полив грядки 3
Полив грядки 5
Полив грядки 7Переменная не обязана точно попадать в конец. Цикл останавливается, как только следующее число вышло бы за него. Курам меняют солому каждый 4-й день. За 10 дней это будет так:
for day = 4, 10, 4 do
print("День " .. day .. ": свежая солома для кур")
endДень 4: свежая солома для кур
День 8: свежая солома для курПосле 8 было бы 12, а это больше 10, поэтому цикл заканчивается. А вот шаг не может быть равен 0: переменная никуда бы не продвинулась, и Lua останавливается с ошибкой 'for' step is zero.
Самая частая ошибка в циклах — ошибка на единицу: цикл выполняется на один раз больше или меньше, чем нужно. Цикл for i = 0, 3 do выполняется 4 раза: для 0, 1, 2 и 3. В Lua вы почти всегда будете считать с 1, поэтому for i = 1, 3 do выполняется ровно 3 раза. Если вы не уверены, сколько раз выполняется цикл, выпишите значения его переменной и посчитайте их.
Задание
- 1
Рекс гавкает четыре раза вместо трёх. Исправьте цикл так, чтобы программа выводила
Гав!ровно три раза:Гав! Гав! Гав! - 2
Помидоры Эммы созреют через 5 дней. Под циклом Рекса напишите цикл
for, который считает от 5 до 1, каждое число на своей строке. После цикла выведитеПомидоры созрели!. Под лаем Рекса программа выводит:5 4 3 2 1 Помидоры созрели! - 3
В месяце из 30 дней Эмма убирается в сарае каждый 7-й день. В конце программы напишите цикл с шагом 7, который выводит:
День 7: уборка в сарае День 14: уборка в сарае День 21: уборка в сарае День 28: уборка в сарае