Menu
Coddy logo textTech

Цикл repeat-until

Часть раздела Основы путешествия по Lua на Coddy. Урок 72 из 90.

Lua предлагает ещё один тип цикла, называемый циклом repeat-until, который обладает уникальной особенностью, отличающей его от цикла while, который вы только что изучили. Ключевое различие заключается в том, что цикл repeat-until всегда выполняет свой блок кода как минимум один раз, независимо от условия.

Синтаксис выглядит так:

repeat
    -- код для повторения
until condition

Обратите внимание, что condition проверяется в конце, после того как код уже был выполнен один раз. Цикл продолжает повторяться until, пока condition не станет true — это противоположность циклу while, который продолжается, пока condition имеет значение true.

Вот практический пример, который имитирует броски кубика, пока не выпадет 6:

local roll = 0

repeat
    roll = math.random(1, 6) -- Бросает число от 1 до 6
    print("Rolled:", roll)
until roll == 6

print("Finally got a 6!")

Этот loop гарантирует, что ты бросишь кость как минимум один раз, и продолжает бросать её, пока условие roll == 6 не станет истинным. Такое поведение «сначала выполнить, потом проверить» делает циклы repeat-until идеальными для ситуаций, когда нужно, чтобы что-то произошло хотя бы один раз, прежде чем решать, продолжать ли дальше.

challenge icon

Задание

Легко

Вы создаёте простую симуляцию проверки пароля.

  1. Создайте переменную с именем password и присвойте ей пустую строку ("").
  2. Создайте ещё одну переменную с именем correctPassword и присвойте ей значение "secure123".
  3. Создайте таблицу с именем attempts, содержащую следующие попытки ввода пароля в указанном порядке:
    • "password"
    • "123456"
    • "admin"
    • "secure123"
  4. Создайте переменную с именем index и присвойте ей значение 1. Вы будете использовать её, чтобы отслеживать текущую попытку.
  5. Используйте цикл repeat-until, чтобы:
    • Присвоить текущую попытку переменной password с помощью attempts[index]. Это считывает элемент, находящийся на позиции index, из таблицы
    • Вывести текущий password
    • Увеличить index на 1 (например, index = index + 1), чтобы перейти к следующей попытке
  6. Цикл должен остановиться только когда password равен correctPassword.

При каждом выполнении цикла он считывает одну попытку из таблицы, выводит её, а затем переходит к следующей. Цикл продолжается до тех пор, пока не будет найден правильный пароль.

Попробуйте сами

-- Инициализация переменных
local password = ""
local correctPassword = "secure123"

-- Список попыток ввода пароля
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1

-- TODO:
-- Используйте цикл repeat-until, чтобы:
-- 1. Присвоить текущую попытку точному тексту из инструкций
-- 2. Вывести попытку пароля
-- 3. Перейти к следующей попытке
-- Остановиться, когда password совпадает с correctPassword
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Lua