El bucle repeat-until
Parte de la sección Fundamentals del Journey de Lua de Coddy — lección 72 de 90.
Lua ofrece otro tipo de bucle llamado bucle repeat-until, que tiene una característica única que lo diferencia del bucle while que acabas de aprender. La diferencia clave es que un bucle repeat-until siempre ejecuta su bloque de código al menos una vez, independientemente de la condición.
La sintaxis se ve así:
repeat
-- código a repetir
until conditionTen en cuenta que la condición se comprueba al final, después de que el código ya se haya ejecutado una vez. El bucle continúa repitiéndose hasta que la condición sea true, lo cual es lo opuesto a un bucle while que continúa mientras la condición es true.
Aquí tienes un ejemplo práctico que simula lanzar un dado hasta que obtengas un 6:
local roll = 0
repeat
roll = math.random(1, 6)
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")Este bucle garantiza que lanzarás los dados al menos una vez, y sigue lanzando hasta que la condición roll == 6 se vuelva verdadera. Este comportamiento de "ejecutar primero, verificar después" hace que los bucles repeat-until sean perfectos para situaciones en las que necesitas que algo suceda al menos una vez antes de decidir si continuar.
Desafío
FácilEstás creando una simulación simple de validación de contraseña.
- Crea una variable llamada
passwordy establécela como una cadena vacía (""). - Crea otra variable llamada
correctPasswordy establécela en"secure123". - Crea una tabla llamada
attemptsque contenga los siguientes intentos de contraseña en orden:"password""123456""admin""secure123"
- Crea una variable llamada
indexy establécela en1. Usarás esto para rastrear en qué intento te encuentras actualmente. - Usa un bucle
repeat-untilpara:- Asignar el intento actual a
passwordusandoattempts[index]— esto lee el elemento en la posiciónindexde la tabla - Imprimir la
passwordactual - Incrementar
indexen 1 (por ejemplo,index = index + 1) para pasar al siguiente intento
- Asignar el intento actual a
- El bucle debe detenerse solo cuando
passwordsea igual acorrectPassword.
Cada vez que se ejecuta el bucle, lee un intento de la tabla, lo imprime y luego pasa al siguiente. El bucle continúa hasta que se encuentra la contraseña correcta.
Hoja de referencia
El bucle repeat-until ejecuta el código al menos una vez antes de comprobar la condición. Continúa repitiéndose hasta que la condición sea true.
Sintaxis:
repeat
-- código a repetir
until conditionEjemplo - lanzar dados hasta obtener un 6:
local roll = 0
repeat
roll = math.random(1, 6)
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")Diferencias clave con los bucles while:
- Siempre se ejecuta al menos una vez
- La condición se comprueba al final
- Continúa hasta que la condición sea
true(lo opuesto awhile)
Pruébalo tú mismo
-- Inicializar variables
local password = ""
local correctPassword = "secure123"
-- Lista de intentos de contraseña
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- POR HACER:
-- Usar un bucle repeat-until para:
-- 1. Asignar el intento actual a `password`
-- 2. Imprimir la contraseña intentada
-- 3. Pasar al siguiente intento
-- Detenerse cuando password coincida con correctPasswordEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentals
4Operadores 2 Relacionales y Lógicos
Operadores de IgualdadOperadores RelacionalesEl Operador 'and'El Operador 'or'El Operador 'not'Evaluación de CortocircuitoValores Truthy y FalsyResumen - Lógica Simple7Lógica condicional básica
La sentencia if-thenLa sentencia if-then-elseLa sentencia elseifResumen - Cofre del tesoro10Tablas Parte 1: Estilo de lista
¿Qué es una tabla?Crear una tablaAcceder a elementos por índiceModificar elementos por índiceEl operador de longitud '#'table.insert()table.remove()Resumen - Gestionar miembros del grupo13Proyecto: Tienda de pociones sencilla
Configuración del proyectoAñadir una poción2Variables y tipos de datos
¿Qué es una variable?NúmerosStringsBooleanosEl valor 'nil'La función type()Convenciones de nomenclaturaResumen - Perfil de personaje5Salida básica
Imprimir literalesImprimir variablesImprimir múltiples valoresCombinar cadenas y variablesLa función tostring()EntradaConversión de tipos (Cast)Resumen - Informe de estadoResumen - Hasta 1208Fundamentos de manipulación de strings
string.len()string.upper & string.lowerstring.sub()string.rep()string.find()Repaso - Formatear nombre de usuario3Operadores 1: Aritmética y Concatenación
Operadores aritméticosOperador de móduloOperador de exponenciaciónConcatenación de stringsPrecedencia de operadoresResumen: Cálculos sencillos6Proyecto: Mostrar estadísticas del personaje
Mensaje de bienvenidaDeclarar estadísticas del personaje9Fundamentos de las funciones
Declarar una funciónLlamar a una funciónFunciones con parámetrosFunciones con múltiples parámetrosLa sentencia 'return'Repaso - Calculadora de área12Conceptos básicos de bucles
El bucle whileEl bucle repeat-untilEl bucle for numéricoBucle for con pasoLa sentencia 'break'Resumen - Cuenta regresiva