Числовой цикл for
Перебирайте числовые диапазоны с помощью синтаксиса for i=start,limit,step.
«Числовой цикл for» — бесплатный урок Lua Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Синтаксис числового цикла for
Числовой цикл for в Lua имеет форму for var = start, limit, step do. Если step не указан, его значение по умолчанию равно 1. Переменная цикла локальна для его тела и не может изменяться внутри него. Предельное значение и шаг вычисляются один раз до начала цикла.
-- Count 1 to 5
for i = 1, 5 do
io.write(i .. " ")
end
print() -- 1 2 3 4 5
-- Count with step 2
for i = 1, 10, 2 do
io.write(i .. " ")
end
print() -- 1 3 5 7 9Обратный отсчёт с отрицательным шагом
Используйте отрицательный шаг для счёта в обратном направлении. При отрицательном шаге цикл продолжается, пока выполняется условие var >= limit. Если при отрицательном шаге начальное значение уже меньше предельного, тело цикла не выполнится ни разу.
for i = 10, 1, -1 do
io.write(i .. " ")
end
print()
-- 10 9 8 7 6 5 4 3 2 1
-- Step -2
for i = 10, 0, -2 do
io.write(i .. " ")
end
print()
-- 10 8 6 4 2 0Переменная цикла является локальной
Управляющая переменная цикла (i) автоматически является локальной. Нельзя изменить её значение внутри цикла — Lua игнорирует присваивания переменной цикла. Чтобы отслеживать итерации иначе, используйте отдельную локальную переменную.
for i = 1, 5 do
-- i is read-only inside the loop
-- i = i + 10 -- this creates a new global i, not the loop var
print(i) -- always 1, 2, 3, 4, 5 as expected
end
-- i is nil here (it was local to the loop)
print(i) -- nil (or whatever global i was)Перебор массивов
Чаще всего числовой цикл for используют для перебора массивов по индексам. В качестве предельного значения используйте #arr. В отличие от ipairs, этот вариант позволяет управлять размером шага и перебирать элементы в обратном порядке, а для плотных массивов он немного быстрее.
local fruits = {"apple", "banana", "cherry", "date"}
for i = 1, #fruits do
print(i, fruits[i])
end
-- 1 apple
-- 2 banana
-- 3 cherry
-- 4 dateСуммирование с помощью for
Числовые циклы for идеально подходят для накопления результата по элементам массивов. Шаблон всегда один и тот же: инициализируйте переменную результата до цикла, обновляйте её внутри и используйте после цикла.
local values = {10, 20, 30, 40, 50}
local total = 0
for i = 1, #values do
total = total + values[i]
end
print("Total:", total) -- 150
print("Count:", #values) -- 5
print("Mean:", total / #values) -- 30Вложенный числовой цикл for
Вкладывайте два числовых цикла for для двумерных операций: обхода матрицы, таблицы таблиц или создания пар координат. Внешний цикл перебирает строки, внутренний — столбцы; на каждой итерации обращение выполняется к одной ячейке.
local rows, cols = 3, 4
for r = 1, rows do
for c = 1, cols do
io.write(string.format("%2d ", r * c))
end
print()
end
-- 1 2 3 4
-- 2 4 6 8
-- 3 6 9 12Вещественные шаги
Шаг и предельные значения могут быть числами с плавающей точкой, хотя это способно привести к ошибкам точности. Для точного числа итераций используйте целые числа. Если необходимо использовать вещественные числа, учитывайте, что число итераций вычисляется как floor((limit - start) / step) + 1.
-- Float step
for x = 0.0, 1.0, 0.25 do
io.write(x .. " ")
end
print()
-- 0.0 0.25 0.5 0.75 1.0
-- Prefer integer math when possible
for i = 0, 4 do
local x = i * 0.25
io.write(x .. " ")
endПостроение таблицы результата
Числовой цикл for — стандартный способ создать новую таблицу на основе существующих данных. Создайте пустую таблицу, затем заполните её с помощью цикла по индексам.
local source = {1, 2, 3, 4, 5}
local squares = {}
for i = 1, #source do
squares[i] = source[i] ^ 2
end
for i = 1, #squares do
print(squares[i]) -- 1, 4, 9, 16, 25
endbreak в числовом цикле for
Числовой цикл for можно досрочно завершить с помощью break. Выполнение переходит к инструкции после end. Это полезно при линейном поиске: перебирайте элементы, пока не найдёте искомый, а затем выйдите из цикла.
local data = {5, 3, 8, 1, 9, 2, 7}
local target = 9
local foundAt = nil
for i = 1, #data do
if data[i] == target then
foundAt = i
break
end
end
if foundAt then
print("Found at index " .. foundAt) -- 5
else
print("Not found")
endВычисление числа итераций
Число итераций цикла for i = start, limit, step равно max(0, floor((limit - start) / step) + 1). Понимание этой формулы помогает избежать ошибок на единицу. Если шаг равен 1, число итераций просто равно limit - start + 1.
-- How many iterations?
local count = 0
for i = 1, 10, 3 do
count = count + 1
end
print(count) -- 4 (i = 1, 4, 7, 10)
count = 0
for i = 5, 1 do -- step=1 but start > limit
count = count + 1
end
print(count) -- 0 (no iterations)Быстрая проверка
Какие значения перебирает for i = 10, 1, -3 do?
Итоги: числовой цикл for
Краткое содержание:
for i = start, limit, step do— по умолчанию шаг равен 1- Отрицательный шаг используется для обратного счёта
- Переменная цикла автоматически является локальной и доступна только для чтения
- Предельное значение и шаг вычисляются один раз до начала цикла
breakдосрочно завершает цикл- Стандартные задачи: построение таблиц результата, поиск в массивах, накопление сумм
Часто задаваемые вопросы
Урок «Числовой цикл for» бесплатный?
Да — полный текст урока «Числовой цикл for» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Числовой цикл for»?
Перебирайте числовые диапазоны с помощью синтаксиса for i=start,limit,step. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Числовой цикл for»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.