Break, continue e else em loops

1. Introdução às instruções de controle de fluxo em loops

Loops são estruturas fundamentais em Python para repetir blocos de código, mas nem sempre queremos executar todas as iterações de forma linear. Três instruções especiais — break, continue e else — nos dão controle refinado sobre o fluxo de execução dentro de loops for e while.

  • break: interrompe o loop completamente, saindo imediatamente.
  • continue: pula a iteração atual e vai para a próxima.
  • else: executa um bloco de código apenas se o loop terminou normalmente (sem break).

Essas ferramentas permitem desde buscas eficientes até validações complexas, tornando o código mais expressivo e enxuto.

2. A instrução break: interrompendo loops prematuramente

O break encerra o loop imediatamente, independentemente da condição original. É útil quando encontramos o que procurávamos ou quando uma condição de erro exige parada.

# Busca de elemento em lista
nomes = ["Ana", "Carlos", "Maria", "João", "Pedro"]
alvo = "Maria"

for nome in nomes:
    if nome == alvo:
        print(f"{alvo} encontrado!")
        break
else:
    print(f"{alvo} não está na lista.")
# Output: Maria encontrado!

Em loops aninhados, o break só sai do loop mais interno. Para sair de múltiplos níveis, precisamos de uma variável de controle ou de uma função.

# Saindo de loops aninhados
matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
encontrado = False

for linha in matriz:
    for elemento in linha:
        if elemento == 5:
            print("Elemento 5 encontrado!")
            encontrado = True
            break
    if encontrado:
        break

3. A instrução continue: pulando iterações específicas

Diferente do break, o continue não encerra o loop — apenas salta para a próxima iteração, ignorando o código restante no bloco atual.

# Filtrando números pares (pula ímpares)
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print("Números pares:")
for num in numeros:
    if num % 2 != 0:
        continue  # pula ímpares
    print(num, end=" ")
# Output: 2 4 6 8 10

Cuidado com continue em loops while: se a variável de controle não for atualizada antes do continue, podemos criar um loop infinito.

# PERIGO: loop infinito!
contador = 0
while contador < 10:
    if contador % 2 == 0:
        continue  # nunca atualiza contador para pares!
    print(contador)
    contador += 1

Solução: atualizar a variável antes do continue ou usar for.

# Versão correta
contador = 0
while contador < 10:
    if contador % 2 == 0:
        contador += 1
        continue
    print(contador)
    contador += 1

4. A cláusula else em loops: executando código ao final normal

O else em loops é um conceito único do Python (e de algumas linguagens derivadas). Ele executa um bloco apenas se o loop terminou sem encontrar um break. É o oposto do comportamento do else em estruturas condicionais.

# Validação de número primo com for/else
def eh_primo(numero):
    if numero < 2:
        return False
    for i in range(2, int(numero ** 0.5) + 1):
        if numero % i == 0:
            print(f"{numero} é divisível por {i}")
            break
    else:
        print(f"{numero} é primo!")
        return True
    return False

eh_primo(17)  # 17 é primo!
eh_primo(15)  # 15 é divisível por 3

O else não é executado quando o break ocorre. Isso permite padrões elegantes de "busca com confirmação".

5. Combinações práticas: break + else e continue + else

Padrão de busca com confirmação

# Verificar se todos os elementos atendem a uma condição
dados = [10, 20, 30, 40, 50]

for valor in dados:
    if valor > 100:
        print("Valor muito alto encontrado!")
        break
else:
    print("Todos os valores estão dentro do limite.")
# Output: Todos os valores estão dentro do limite.

Usando continue com else para relatórios parciais

# Processamento com relatório
transacoes = [100, -50, 200, -30, 0, 150]
processadas = 0

for valor in transacoes:
    if valor == 0:
        print("Transação inválida ignorada.")
        continue
    if valor < 0:
        print(f"Estorno de R$ {abs(valor)} processado.")
    else:
        print(f"Depósito de R$ {valor} processado.")
    processadas += 1
else:
    print(f"Total de {processadas} transações processadas com sucesso.")

Sistema de login com tentativas limitadas

# Sistema de login com break + else
senha_correta = "python123"
tentativas_maximas = 3

for tentativa in range(1, tentativas_maximas + 1):
    senha = input(f"Tentativa {tentativa}/{tentativas_maximas}: Digite a senha: ")
    if senha == senha_correta:
        print("Acesso concedido!")
        break
    print("Senha incorreta.")
else:
    print("Conta bloqueada por excesso de tentativas.")

6. Boas práticas e armadilhas comuns

Evitando código difícil de ler

  • Múltiplos break e continue podem tornar o fluxo confuso. Considere refatorar em funções menores.
  • Prefira for com else a loops while com flags complexas.

Diferenças entre Python e outras linguagens

  • Em C/Java, else em loops não existe — usa-se flags booleanas.
  • Em Python, o else do loop é executado mesmo se o loop nunca iterar (ex: for i in []: ... else: print("vazio")).

Quando usar break/continue vs. variáveis de controle

  • Use break para saídas antecipadas claras.
  • Use continue para pular casos específicos sem aninhar if.
  • Evite break em loops muito longos — prefira funções com return.

7. Exemplos do mundo real e exercícios

Processamento de arquivos: parando ao encontrar erro

# Leitura de arquivo com parada em erro
def ler_arquivo_seguro(caminho):
    with open(caminho, 'r') as arquivo:
        for linha_num, linha in enumerate(arquivo, 1):
            try:
                valor = int(linha.strip())
                print(f"Linha {linha_num}: {valor}")
            except ValueError:
                print(f"Erro na linha {linha_num}: dado inválido")
                break
    else:
        print("Arquivo processado com sucesso!")

Validação de dados de formulário com continue

# Validação de formulário
campos = {
    "nome": "João",
    "email": "",
    "idade": "25",
    "telefone": "123-456"
}

for campo, valor in campos.items():
    if not valor:
        print(f"Campo '{campo}' está vazio. Ignorando...")
        continue
    if campo == "email" and "@" not in valor:
        print(f"Email inválido no campo '{campo}'.")
        continue
    print(f"{campo}: {valor} validado.")

Mini desafio: implementar um menu interativo

# Menu interativo com loops
def menu():
    opcoes = {
        "1": "Ver saldo",
        "2": "Depositar",
        "3": "Sacar",
        "4": "Sair"
    }

    while True:
        print("\n--- MENU ---")
        for chave, descricao in opcoes.items():
            print(f"{chave}. {descricao}")

        escolha = input("Escolha uma opção: ")

        if escolha == "4":
            print("Encerrando...")
            break
        elif escolha == "1":
            print("Saldo: R$ 1000,00")
        elif escolha == "2":
            print("Depósito realizado!")
        elif escolha == "3":
            print("Saque realizado!")
        else:
            print("Opção inválida. Tente novamente.")
            continue

Dominar break, continue e else em loops transforma a maneira como você controla o fluxo dos seus programas Python, permitindo código mais limpo e eficiente.

Referências