Menu
Coddy logo textTech

Цикл repeat-until

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

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

Синтаксис выглядит следующим образом:

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

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

Вот практический пример, имитирующий бросок игральной кости до тех пор, пока не выпадет 6:

local roll = 0

repeat
    roll = math.random(1, 6)
    print("Rolled:", roll)
until roll == 6

print("Finally got a 6!")

Этот цикл гарантирует, что вы бросите кости хотя бы один раз, и он продолжает бросать их до тех пор, пока условие 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.

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

Шпаргалка

Цикл repeat-until выполняет код по крайней мере один раз перед проверкой условия. Он продолжает повторяться до тех пор, пока условие не станет true.

Синтаксис:

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

Пример — бросание кубика до тех пор, пока не выпадет 6:

local roll = 0

repeat
    roll = math.random(1, 6)
    print("Rolled:", roll)
until roll == 6

print("Finally got a 6!")

Основные отличия от циклов while:

  • Всегда выполняется хотя бы один раз
  • Условие проверяется в конце
  • Продолжается до тех пор, пока условие не станет true (противоположно while)

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

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

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

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

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

Все уроки раздела Fundamentals