Цикл 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 идеальными для ситуаций, когда вам нужно, чтобы что-то произошло хотя бы один раз, прежде чем решать, продолжать ли выполнение.
Задание
ЛегкоВы создаете простую симуляцию проверки пароля.
- Создайте переменную с именем
passwordи установите ее в пустую строку (""). - Создайте другую переменную с именем
correctPasswordи установите ее в"secure123". - Создайте таблицу с именем
attempts, которая содержит следующие попытки ввода пароля по порядку:"password""123456""admin""secure123"
- Создайте переменную с именем
indexи установите ее в1. Вы будете использовать ее для отслеживания того, на какой попытке вы сейчас находитесь. - Используйте цикл
repeat-until, чтобы:- Присвоить текущую попытку переменной
password, используяattempts[index]— это считывает элемент в позицииindexиз таблицы - Вывести текущий
password - Увеличить
indexна 1 (например,index = index + 1), чтобы перейти к следующей попытке
- Присвоить текущую попытку переменной
- Цикл должен остановиться только тогда, когда
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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Fundamentals
4Операторы 2: Сравнение и логика
Операторы равенстваОператоры сравненияОператор 'and'Оператор 'or'Оператор 'not'Сокращенные вычисленияЗначения Truthy и FalsyИтоги: Простая логика7Основы условной логики
Оператор if-thenОператор if-then-elseОператор elseifИтоги — Сундук с сокровищами10Таблицы, часть 1: Списки
Что такое таблица?Создание таблицыДоступ к элементам по индексуИзменение элементов по индексуОператор длины '#'table.insert()table.remove()Итоги: управление участниками группы13Проект: Простой магазин зелий
Настройка проектаДобавление зелья2Переменные и типы данных
Что такое переменная?ЧислаСтрокиБулевы значенияЗначение 'nil'Функция type()Правила именованияИтоги — Профиль персонажа5Базовый вывод
Вывод литераловВывод переменныхВывод нескольких значенийОбъединение строк и переменныхФункция tostring()ВводПриведение типовПовторение — Отчет о состоянииПовторение — До 1208Основы работы со строками
string.len()string.upper и string.lowerstring.sub()string.rep()string.find()Повторение — Форматирование имени пользователя3Операторы 1: Арифметика и конкатенация
Арифметические операторыОператор остатка от деленияОператор возведения в степеньКонкатенация строкПриоритет операторовПовторение: Простые вычисления6Проект: Вывод характеристик персонажа
Приветственное сообщениеОбъявление характеристик персонажа9Основы функций
Объявление функцииВызов функцииФункции с параметрамиФункции с несколькими параметрамиОператор 'return'Повторение — Калькулятор площади12Основы циклов
Цикл whileЦикл repeat-untilЧисловой цикл forЦикл for с шагомОператор 'break'Повторение — Обратный отсчёт