0Pricing
Lua Academy · Урок

Числовой цикл 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
end

break в числовом цикле 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 — локальная установка не требуется.

Все уроки этого курса

  1. Инструкции if, elseif и else
  2. Циклы while и repeat-until
  3. Числовой цикл for
  4. Обобщённый for и break
← Назад к Lua Academy