Pular para o conteúdo
Editor

break, continue e pass em Python: controle seus laços

Iniciante20 min5 exercícios65 XP

Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução

0/5 exercícios

Você está procurando o número de um amigo em uma lista telefônica. Quando o encontra, continua folheando todas as páginas que faltam? Claro que não: você para. Ou imagine que você está lendo uma lista de e-mails. Você pula o spam e lê só os de verdade. Esses são exemplos do dia a dia de controle do fluxo de um laço.

O Python oferece três instruções para controlar o que acontece dentro de um laço: break (encerra o laço por completo), continue (pula para a próxima iteração) e pass (não faz nada, só ocupa o lugar). Este tutorial cobre as três, além do padrão for-else, uma particularidade do Python.

No final, você vai saber exatamente quando usar cada instrução e como elas mudam o comportamento dos seus laços.

Como funciona o break em Python?

A instrução break sai imediatamente do laço em que está. O Python pula para a primeira linha de código depois do laço. Sem mais iterações, sem mais verificações de condição: o laço acabou.

Pense no break como uma saída de emergência. O laço tem uma saída normal (a condição se torna False ou os itens acabam), mas o break deixa você sair mais cedo quando já encontrou o que precisava.

Usando break para sair de um laço mais cedo
# Search for a name in a list
names = ["Alice", "Bob", "Charlie", "Diana", "Eve"]
target = "Charlie"
for name in names:
print(f"Checking {name}...")
if name == target:
print(f"Found {target}!")
break
print("Search complete.")
# Output:
# Checking Alice...
# Checking Bob...
# Checking Charlie...
# Found Charlie!
# Search complete.
Saída
Checking Alice...
Checking Bob...
Checking Charlie...
Found Charlie!
Search complete.

Sem o break, o laço também verificaria Diana e Eve: esforço desperdiçado, já que Charlie já foi encontrado. A instrução break economiza tempo parando assim que o trabalho termina.

Encontrando a primeira ocorrência com break
# Find the first even number in a list
numbers = [7, 3, 11, 8, 5, 2, 9]
for num in numbers:
if num % 2 == 0:
print(f"First even number: {num}")
break
# Output:
# First even number: 8
Saída
First even number: 8

O laço para no 8 porque ele é o primeiro número par. Embora o 2 também seja par, o laço nunca chega até ele. Esse padrão de "encontrar a primeira ocorrência e parar" é um dos usos mais comuns do break.


Como funciona o continue em Python?

A instrução continue pula o resto da iteração atual e volta para o início do laço. O laço em si continua rodando: ele só passa para o próximo item (ou, nos laços while, verifica a condição de novo).

Se o break é uma saída de emergência, o continue é mais como um botão de "pular este". Você continua percorrendo o laço, só não quer processar aquele item específico.

Usando continue para pular os números pares
# Print only odd numbers from 1 to 10
for num in range(1, 11):
if num % 2 == 0:
continue # skip even numbers
print(num)
# Output:
# 1
# 3
# 5
# 7
# 9
Saída
1
3
5
7
9

Quando num é par (2, 4, 6, 8, 10), o continue pula o print() e vai para a próxima iteração. Quando num é ímpar, o continue não é executado, então o print() roda normalmente.

Sem continue (if aninhado)
for num in range(1, 11):
    if num % 2 != 0:
        print(num)
Com continue (sem aninhamento)
for num in range(1, 11):
    if num % 2 == 0:
        continue
    print(num)

As duas versões produzem a mesma saída. Neste exemplo simples, a versão com if funciona bem. Mas o continue brilha mesmo quando há muitas linhas de código depois da condição de pulo: ele mantém o código "plano", em vez de cheio de níveis de indentação.

Pulando dados inválidos com continue
# Process only valid scores, skip invalid ones
scores = [85, -1, 92, 150, 73, 88, -5, 100]
valid_count = 0
total = 0
for score in scores:
if score < 0 or score > 100:
print(f" Skipping invalid score: {score}")
continue
valid_count += 1
total += score
print(f" Recorded: {score}")
average = total / valid_count
print(f"\nAverage of {valid_count} valid scores: {average:.1f}")
# Output:
# Recorded: 85
# Skipping invalid score: -1
# Recorded: 92
# Skipping invalid score: 150
# Recorded: 73
# Recorded: 88
# Skipping invalid score: -5
# Recorded: 100
#
# Average of 5 valid scores: 87.6
Saída
  Recorded: 85
  Skipping invalid score: -1
  Recorded: 92
  Skipping invalid score: 150
  Recorded: 73
  Recorded: 88
  Skipping invalid score: -5
  Recorded: 100

Average of 5 valid scores: 87.6

Aqui, o continue funciona como um filtro. As notas inválidas (negativas ou acima de 100) são puladas, então as linhas de cálculo nunca rodam para elas. Só as notas válidas entram no total. Isso fica mais limpo do que envolver todo o código de processamento em um grande bloco if.


O que o pass faz em Python?

A instrução pass não faz absolutamente nada. Ela é um marcador de lugar que diz: "Eu sei que preciso de código aqui, mas ainda não escrevi." O Python exige pelo menos uma instrução em qualquer bloco (depois de if, for, while, definições de função etc.), e o pass cumpre essa exigência.

Pense no pass como uma placa de "em obras" em um canteiro de construção. O prédio ainda não está pronto, mas a estrutura já está de pé. Ele avisa ao Python e aos outros programadores que aquele trecho está vazio de propósito.

Usando pass como marcador de lugar
# Skeleton code - structure first, logic later
for num in range(10):
if num % 2 == 0:
pass # TODO: handle even numbers
else:
pass # TODO: handle odd numbers
print("Loop finished (nothing happened yet)")
# Output:
# Loop finished (nothing happened yet)
Saída
Loop finished (nothing happened yet)

Sem o pass, o Python geraria um IndentationError, porque ele espera um bloco indentado depois de cada dois-pontos. A instrução pass atende a essa exigência sem fazer nada.

Usando pass para ignorar casos de forma explícita
# Common use: ignore specific cases
for char in "Hello, World! 123":
if char.isalpha():
print(char, end="") # print letters only
else:
pass # ignore non-letters (spaces, punctuation, digits)
print() # newline
# Output:
# HelloWorld
Saída
HelloWorld

Neste exemplo, o pass deixa claro que estamos ignorando de propósito os caracteres que não são letras. Você poderia tirar o else: pass por completo e o programa funcionaria do mesmo jeito, mas mantê-lo comunica a sua intenção a quem lê o código.


O que é o padrão for-else em Python?

O Python tem um recurso que a maioria das outras linguagens não tem: você pode ligar um bloco else a um laço for ou while. O bloco else só roda se o laço terminou normalmente, ou seja, se NÃO foi interrompido por um break.

No começo isso confunde, porque else normalmente quer dizer "se a condição foi False". Mas, em laços, pense nele como "caso nenhum break tenha acontecido". Se o laço termina todas as iterações sem chegar a um break, o else roda.

for-else quando o alvo É encontrado (o break roda)
# Search for a number - found case
numbers = [3, 7, 2, 9, 4]
target = 9
for num in numbers:
if num == target:
print(f"Found {target}!")
break
else:
print(f"{target} was not found.")
# Output:
# Found 9!
Saída
Found 9!

O laço encontrou o 9, então o break rodou e o bloco else foi pulado. O else só roda quando o laço termina sem ser interrompido.

for-else quando o alvo NÃO é encontrado (o else roda)
# Search for a number - not found case
numbers = [3, 7, 2, 9, 4]
target = 6
for num in numbers:
if num == target:
print(f"Found {target}!")
break
else:
print(f"{target} was not found.")
# Output:
# 6 was not found.
Saída
6 was not found.

Desta vez o laço verificou todos os números e nunca encontrou o 6. Como o break nunca rodou, o bloco else foi executado. Isso substitui o padrão comum de usar uma variável booleana de controle, como found = False.

Sem for-else (precisa de uma flag)
found = False
for num in numbers:
    if num == target:
        print(f"Found {target}!")
        found = True
        break
if not found:
    print(f"{target} not found.")
Com for-else (mais limpo)
for num in numbers:
    if num == target:
        print(f"Found {target}!")
        break
else:
    print(f"{target} not found.")

A versão com for-else elimina a necessidade da flag found. É um jeito mais pythônico de lidar com padrões do tipo "procurar e informar o resultado".


Casos reais de uso de break, continue e pass

Vamos ver como break e continue funcionam juntos em um exemplo mais realista. Este código processa um lote de pedidos e trata situações diferentes.

break e continue em ação
# Processing orders
orders = [
{"id": 1, "item": "Laptop", "status": "pending"},
{"id": 2, "item": "Mouse", "status": "shipped"},
{"id": 3, "item": "Keyboard", "status": "cancelled"},
{"id": 4, "item": "Monitor", "status": "pending"},
{"id": 5, "item": "STOP", "status": "system"},
{"id": 6, "item": "Headphones", "status": "pending"},
]
for order in orders:
# Stop processing if we hit a system command
if order["item"] == "STOP":
print("System halt received. Stopping.")
break
# Skip already-handled orders
if order["status"] in ["shipped", "cancelled"]:
continue
# Process pending orders
print(f"Processing order #{order['id']}: {order['item']}")
# Output:
# Processing order #1: Laptop
# Processing order #4: Monitor
# System halt received. Stopping.
Saída
Processing order #1: Laptop
Processing order #4: Monitor
System halt received. Stopping.

O pedido #1 (Laptop) está pendente, então é processado. O pedido #2 (Mouse) já foi enviado, então o continue o pula. O pedido #3 (Keyboard) foi cancelado e também é pulado. O pedido #4 (Monitor) está pendente, então é processado. O pedido #5 é um comando STOP, então o break encerra o laço por completo. O pedido #6 nunca é alcançado.

Este é o padrão típico: use break para condições de "parar tudo", continue para condições de "pular este" e o resto do corpo do laço para o processamento normal.


Exercícios práticos

Hora de praticar o controle do fluxo de laços! Estes exercícios vão testar se você entendeu quando usar break, continue e o padrão for-else.

Preste muita atenção ao que cada exercício pede. Usar break quando você precisa de continue (ou o contrário) é um erro comum.

Exercício 1: encontre o primeiro número negativo
Escreva o código

Use um laço for com break para encontrar e exibir o primeiro número negativo da lista. Exiba "Found: " seguido do número.

Saída esperada:

Found: -3
numbers = [4, 7, 2, -3, 8, -1, 5]
# Find and print the first negative number using break
Exercício 2: exiba a palavra sem as vogais
Escreva o código

Use um laço for com continue para exibir todos os caracteres da string "beautiful", mas pule as vogais (a, e, i, o, u). Exiba cada consoante na mesma linha usando end="".

Saída esperada:

btfl

Mantenha o print() que está no final do código inicial: ele termina a saída com uma quebra de linha limpa.

word = "beautiful"
# Print each character, but skip vowels using continue
print() # newline at the end
Exercício 3: preveja a saída
Preveja a saída

Sem executar o código, preveja exatamente o que ele vai exibir. Acompanhe cada iteração e pense em quando o continue e o break são acionados.

Depois, execute o código para conferir a sua resposta.

for i in range(1, 8):
if i == 3:
continue
if i == 6:
break
print(i)
Exercício 4: corrija o bug na soma até o primeiro negativo
Corrija o erro

Este código deveria somar os números da lista até encontrar um número negativo e então parar. Mas alguém usou continue em vez de break. Corrija o bug para que ele exiba:

Sum before negative: 15

Não mude nada além da palavra-chave errada.

numbers = [5, 3, 7, -2, 8, 4]
total = 0
for num in numbers:
if num < 0:
continue # BUG: this should stop, not skip!
total += num
print(f"Sum before negative: {total}")
Exercício 5: verificador de senha com for-else
Escreva o código

Use o padrão for-else para verificar se uma senha contém pelo menos um dígito. Percorra cada caractere da senha. Se encontrar um dígito, exiba "Password accepted" e use break. Se o laço terminar sem encontrar nenhum dígito, exiba "Password must contain a number".

Saída esperada para a senha dada:

Password accepted
password = "hello5world"
# Check if password contains at least one digit using for-else

Resumo: break, continue e pass

Aqui vai uma referência rápida das três instruções de controle de laço:

InstruçãoO que fazQuando usar
breakSai do laço imediatamenteVocê encontrou o que procurava ou chegou a uma condição de parada
continuePula para a próxima iteraçãoO item atual não precisa ser processado
passNão faz nada (marcador de lugar)Bloco vazio que você vai preencher depois
for-elseO else roda se não houve breakBuscas: "encontrei" x "não encontrei"

Regras principais para lembrar:

  • break interrompe o laço INTEIRO, não só uma iteração
  • continue pula só a iteração ATUAL: o laço segue em frente
  • pass é só um marcador de lugar: não faz absolutamente nada
  • Em laços aninhados, o break sai apenas do laço mais interno
  • O else do for-else roda quando o laço termina SEM um break
  • Não confunda continue (pula um) com break (interrompe tudo)
  • O que vem a seguir?

    Agora você sabe controlar o fluxo dos laços com precisão. A seguir: Laços aninhados em Python, onde você vai aprender a colocar laços dentro de laços para trabalhar com grades, combinações e dados multidimensionais. Laços aninhados combinados com break e continue abrem caminho para padrões poderosos.

    Tutoriais relacionados

    Este tutorial foi útil?