O Loop repeat-until
Parte da seção Fundamentals do Journey de Lua da Coddy — lição 72 de 90.
Lua oferece outro tipo de loop chamado loop repeat-until, que possui uma característica única que o diferencia do loop while que você acabou de aprender. A principal diferença é que um loop repeat-until sempre executa seu bloco de código pelo menos uma vez, independentemente da condição.
A sintaxe é a seguinte:
repeat
-- código para repetir
until conditionObserve que a condição é verificada ao final, após o código já ter sido executado uma vez. O loop continua a se repetir até que a condição se torne true - o que é o oposto de um loop while que continua enquanto a condição for true.
Aqui está um exemplo prático que simula o lançamento de um dado até que você obtenha um 6:
local roll = 0
repeat
roll = math.random(1, 6)
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")Este loop garante que você rolará os dados pelo menos uma vez, e ele continua rolando até que a condição roll == 6 se torne verdadeira. Este comportamento de "executar primeiro, verificar depois" torna os loops repeat-until perfeitos para situações em que você precisa que algo aconteça pelo menos uma vez antes de decidir se deve continuar.
Desafio
FácilVocê está criando uma simulação simples de validação de senha.
- Crie uma variável chamada
passworde defina-a como uma string vazia (""). - Crie outra variável chamada
correctPassworde defina-a como"secure123". - Crie uma tabela chamada
attemptsque contenha as seguintes tentativas de senha em ordem:"password""123456""admin""secure123"
- Crie uma variável chamada
indexe defina-a como1. Você usará isso para rastrear em qual tentativa você está no momento. - Use um loop
repeat-untilpara:- Atribuir a tentativa atual a
passwordusandoattempts[index]— isso lê o item na posiçãoindexda tabela - Imprimir a
passwordatual - Aumentar
indexem 1 (ex:index = index + 1) para passar para a próxima tentativa
- Atribuir a tentativa atual a
- O loop deve parar apenas quando
passwordfor igual acorrectPassword.
Cada vez que o loop é executado, ele lê uma tentativa da tabela, a imprime e passa para a próxima. O loop continua até que a senha correta seja encontrada.
Folha de consulta
O laço repeat-until executa o código pelo menos uma vez antes de verificar a condição. Ele continua repetindo até que a condição se torne true.
Sintaxe:
repeat
-- código para repetir
until conditionExemplo - rolando dados até tirar um 6:
local roll = 0
repeat
roll = math.random(1, 6)
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")Principais diferenças em relação aos laços while:
- Sempre executa pelo menos uma vez
- A condição é verificada ao final
- Continua até que a condição seja
true(o oposto dowhile)
Experimente você mesmo
-- Inicializar variáveis
local password = ""
local correctPassword = "secure123"
-- Lista de tentativas de senha
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- TODO:
-- Use um loop repeat-until para:
-- 1. Atribuir a tentativa atual a `password`
-- 2. Imprimir a senha tentada
-- 3. Mover para a próxima tentativa
-- Parar quando a senha coincidir com correctPasswordEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentals
4Operadores 2 Relacionais e Lógicos
Operadores de IgualdadeOperadores RelacionaisO Operador 'and'O Operador 'or'O Operador 'not'Avaliação de Curto-CircuitoValores Truthy e FalsyRecapitulação - Lógica Simples7Lógica Condicional Básica
A instrução if-thenA instrução if-then-elseA instrução elseifRecapitulação - Baú do Tesouro2Variáveis e Tipos de Dados
O que é uma Variável?NúmerosStringsBooleanosO Valor 'nil'A Função type()Convenções de NomenclaturaRecapitulação - Perfil de Personagem5Saída Básica
Imprimindo LiteraisImprimindo VariáveisImprimindo Múltiplos ValoresCombinando Strings e VariáveisA Função tostring()EntradaCastRecapitulação - Relatório de StatusRecapitulação - Até 1208Fundamentos de Manipulação de Strings
string.len()string.upper & string.lowerstring.sub()string.rep()string.find()Revisão - Formatar Nome de Usuário3Operadores 1: Aritmética e Concatenação
Operadores AritméticosOperador de MóduloOperador de ExponenciaçãoConcatenação de StringsPrecedência de OperadoresRecapitulação - Cálculos Simples6Projeto: Exibição de Atributos do Personagem
Mensagem de Boas-vindasDeclarar Atributos do Personagem9Fundamentos de Funções
Declarando uma FunçãoChamando uma FunçãoFunções com ParâmetrosFunções com Múltiplos ParâmetrosA Instrução 'return'Recapitulação - Calculadora de Área12Fundamentos de Loops
O Loop whileO Loop repeat-untilO Loop for NuméricoLoop for com PassoA Instrução 'break'Recapitulação - Contagem Regressiva