🦊 FoxWiki

Счётчик в цикле while

Иногда нужно выполнить цикл ровно N раз, но при этом использовать while — например, потому что помимо счёта есть дополнительные условия выхода, или шаг счётчика меняется динамически.

В таких случаях переменную-счётчик создают вручную.


Базовая схема

Редактор Lua
1
2
3
4
5
6
7
8

Три обязательных элемента:

  1. Инициализация до цикла (count = 0)
  2. Условие в заголовке (count < limit)
  3. Обновление в конце тела (count = count + 1)

Если забыть обновление — цикл никогда не завершится.


Почему не просто for?

Цикл for лучше когда шаг постоянный и известен заранее. while со счётчиком нужен когда:

Несколько условий выхода:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Переменный шаг:

Редактор Lua
1
2
3
4
5
6
7
8
9
10

Откат назад:

Редактор Lua
1
2
3
4
5
6
7
8
9
10

Важно: в Lua нет ++ и +=

В JavaScript, C++, Python есть удобные операторы i++ или i += 1. В Lua их нет. Всегда пиши полную форму:

Редактор Lua
1
2
3
4
5
6

Счётчик для отслеживания прогресса

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

🚀 Задания

Задание 1 Напиши систему попыток входа: 3 попытки ввести пароль через read(). После каждой неверной попытки — сообщение с количеством оставшихся. После трёх — блокировка.

Задание 2 Напиши цикл, который выводит числа 1, 2, 4, 8, 16, 32... (каждый раз умножает на 2) пока число не превысит 1000. Выведи, сколько шагов потребовалось.

Задание 3 Создай счётчик с условием досрочного выхода: цикл считает от 1 до 100, но если число кратно 7 (i % 7 == 0) — выходит через break. Выведи на каком числе остановился.

Задание 4 Напиши "игру в угадайку": загадай число через math.random(1, 10). Игрок вводит числа через read() пока не угадает. Считай количество попыток и выведи его в конце.

Задание 5 Объясни почему этот код зависнет и исправь:

Редактор Lua
1
2
3
4
5
НазадПеременные
ДалееЦикл while