Programação

Laço for: o que é e como usar

Atualizado em

Capa do artigo Laço for: o que é e como usar
Leitura com foco

Entenda o contexto.
Leve para a prática.

Neste artigo
  1. Por que usar um laço for?
  2. Como funciona o laço for?
  3. Como o for conversa com o processador?
  4. Como usar o laço for em Python, PHP e C?
  5. Aí você pergunta: quando usar for e quando usar while?
  6. Quais são os erros mais comuns com o laço for?
  7. Agora é com você!

O laço for é a estrutura que repete um bloco de código um número conhecido de vezes, usando uma variável de controle que funciona como contador. For significa “para”. Mas não é o “para” de parar: é o “para” de “para cada número, faça isso”.

Você já viu que um vetor guarda vários valores e que uma função evita repetir código. O for é a peça que faltava: ele percorre o vetor inteiro e repete o que for preciso, sem você copiar e colar linha nenhuma.

Pense no professor fazendo a chamada. Ele começa no número 1, chama um aluno por vez e para quando a lista acaba. Ninguém escreve uma chamada diferente para cada aluno: a ação é a mesma, e só o número muda. O for é isso.

Por que usar um laço for?

Imagine que você quer mostrar na tela os números de 1 a 5. Sem laço, fica assim:

print(1)
print(2)
print(3)
print(4)
print(5)

Até 5 é tranquilo. E se fosse de 1 até 100? E se, depois de digitar as 100 linhas, alguém pedisse a contagem ao contrário, de 100 até 1? Aí você ia sofrer bastante. Com o for, a contagem inteira cabe em duas linhas:

for i in range(1, 6):
    print(i)

Para contar até 100, basta trocar um número.

Como funciona o laço for?

O for trabalha com uma variável de controle, que faz o papel de contador. Em linguagens como C e PHP, o cabeçalho do for tem três partes, separadas por ponto e vírgula:

  • Início: dá o primeiro valor à variável de controle. Roda uma vez só, antes de tudo.
  • Condição: é testada antes de cada volta. Enquanto for verdadeira, o laço continua.
  • Passo: muda a variável de controle depois de cada volta. O i++ soma 1 a ela.
As três partes do cabeçalho do for, início, condição e passo, e a linha equivalente em Python com range(1, 6)
O início, a condição e o passo em C e PHP, e a mesma contagem escrita com o range do Python.

No Python, o for funciona de outro jeito: ele percorre os itens de uma sequência, um por um. Para contar, você entrega a sequência pronta com o range. Em range(1, 6), o 1 é onde a contagem começa, e o 6 é onde ela para, sem entrar. Por isso a contagem vai de 1 a 5.

Nos materiais de aula, a variável de controle costuma se chamar i. É só costume: pode ser qualquer nome que você queira.

A ordem em que as partes acontecem é sempre a mesma:

Fluxo do laço for: início, teste da condição, corpo, passo e volta para a condição, com saída para o fim do laço quando a condição é falsa
O início roda uma vez. Depois, o laço repete o teste da condição, o corpo e o passo até a condição ficar falsa.

ATENÇÃO: a condição é testada antes de cada volta, inclusive da primeira. Se ela já começa falsa, o corpo do laço não roda nenhuma vez.

Como o for conversa com o processador?

Vou fazer um “diálogo” entre o laço for e o processador do computador, contando de 1 a 5:

FOR: Processador, vou começar a contagem em 1 (i = 1). Enquanto o i for menor ou igual a 5, você mostra o i na tela e depois soma 1 (i++). Beleza?

PROCESSADOR: Beleza, mano! O i vale 1, e 1 é menor ou igual a 5. Mostro o 1 e somo 1. Agora o i vale 2. Espera um pouco aí, vai ser rapidinho!!! (i = 2, i = 3, i = 4, i = 5)

PROCESSADOR: Mostrei o 5 e somei 1 de novo. O i ficou 6. Opa! 6 não é menor ou igual a 5. Parei.

FOR: Valeu, mano! Terminamos por aqui. Tamos juntos!!!

Ver a animação do for contando de 1 a 5
Animação do laço for contando de 1 a 5: a variável i muda a cada volta e a condição é testada antes de mostrar cada número
A cada volta, a condição é testada, o número aparece na tela e o i aumenta. No sexto teste a condição é falsa e o laço termina.

Como usar o laço for em Python, PHP e C?

O programa abaixo junta seis usos do for: contar para a frente, contar para trás, pular de 2 em 2, montar uma tabuada, percorrer um vetor e colocar um for dentro do outro.

Python:

# Laço for: repetir um bloco um número conhecido de vezes

print("Contagem de 1 a 5:")
for i in range(1, 6):
    print(i)

print("Contagem regressiva de 5 a 1:")
for i in range(5, 0, -1):
    print(i)

print("De 2 em 2, de 2 a 10:")
for i in range(2, 11, 2):
    print(i)

print("Tabuada do 7:")
for i in range(1, 6):
    print("7 x %d = %d" % (i, 7 * i))

# percorrer um vetor, posição por posição
notas = [7, 5, 8, 6, 9]
soma = 0
for i in range(5):
    soma = soma + notas[i]
print("Soma das notas:", soma)

# o detalhe do limite: parar antes do 10 ou incluir o 10
voltas = 0
for i in range(1, 10):
    voltas = voltas + 1
print("Voltas parando antes do 10:", voltas)

voltas = 0
for i in range(1, 11):
    voltas = voltas + 1
print("Voltas incluindo o 10:", voltas)

# um for dentro do outro
print("Um for dentro do outro:")
for linha in range(1, 3):
    for coluna in range(1, 4):
        print("linha %d, coluna %d" % (linha, coluna))

PHP:

<?php
// Laço for: repetir um bloco um número conhecido de vezes

echo "Contagem de 1 a 5:\n";
for ($i = 1; $i <= 5; $i++) {
    echo $i, "\n";
}

echo "Contagem regressiva de 5 a 1:\n";
for ($i = 5; $i >= 1; $i--) {
    echo $i, "\n";
}

echo "De 2 em 2, de 2 a 10:\n";
for ($i = 2; $i <= 10; $i += 2) {
    echo $i, "\n";
}

echo "Tabuada do 7:\n";
for ($i = 1; $i <= 5; $i++) {
    printf("7 x %d = %d\n", $i, 7 * $i);
}

// percorrer um vetor, posição por posição
$notas = [7, 5, 8, 6, 9];
$soma = 0;
for ($i = 0; $i < 5; $i++) {
    $soma = $soma + $notas[$i];
}
echo "Soma das notas: $soma\n";

// o detalhe do limite: parar antes do 10 ou incluir o 10
$voltas = 0;
for ($i = 1; $i < 10; $i++) {
    $voltas = $voltas + 1;
}
echo "Voltas parando antes do 10: $voltas\n";

$voltas = 0;
for ($i = 1; $i <= 10; $i++) {
    $voltas = $voltas + 1;
}
echo "Voltas incluindo o 10: $voltas\n";

// um for dentro do outro
echo "Um for dentro do outro:\n";
for ($linha = 1; $linha <= 2; $linha++) {
    for ($coluna = 1; $coluna <= 3; $coluna++) {
        printf("linha %d, coluna %d\n", $linha, $coluna);
    }
}

C:

/* Laço for: repetir um bloco um número conhecido de vezes */
#include <stdio.h>

int main(void) {
    printf("Contagem de 1 a 5:\n");
    for (int i = 1; i <= 5; i++) {
        printf("%d\n", i);
    }

    printf("Contagem regressiva de 5 a 1:\n");
    for (int i = 5; i >= 1; i--) {
        printf("%d\n", i);
    }

    printf("De 2 em 2, de 2 a 10:\n");
    for (int i = 2; i <= 10; i += 2) {
        printf("%d\n", i);
    }

    printf("Tabuada do 7:\n");
    for (int i = 1; i <= 5; i++) {
        printf("7 x %d = %d\n", i, 7 * i);
    }

    /* percorrer um vetor, posição por posição */
    int notas[] = {7, 5, 8, 6, 9};
    int soma = 0;
    for (int i = 0; i < 5; i++) {
        soma = soma + notas[i];
    }
    printf("Soma das notas: %d\n", soma);

    /* o detalhe do limite: parar antes do 10 ou incluir o 10 */
    int voltas = 0;
    for (int i = 1; i < 10; i++) {
        voltas = voltas + 1;
    }
    printf("Voltas parando antes do 10: %d\n", voltas);

    voltas = 0;
    for (int i = 1; i <= 10; i++) {
        voltas = voltas + 1;
    }
    printf("Voltas incluindo o 10: %d\n", voltas);

    /* um for dentro do outro */
    printf("Um for dentro do outro:\n");
    for (int linha = 1; linha <= 2; linha++) {
        for (int coluna = 1; coluna <= 3; coluna++) {
            printf("linha %d, coluna %d\n", linha, coluna);
        }
    }
    return 0;
}

Saída:

Contagem de 1 a 5:
1
2
3
4
5
Contagem regressiva de 5 a 1:
5
4
3
2
1
De 2 em 2, de 2 a 10:
2
4
6
8
10
Tabuada do 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
Soma das notas: 35
Voltas parando antes do 10: 9
Voltas incluindo o 10: 10
Um for dentro do outro:
linha 1, coluna 1
linha 1, coluna 2
linha 1, coluna 3
linha 2, coluna 1
linha 2, coluna 2
linha 2, coluna 3

Foque no conceito, e não na linguagem! Repare em cada bloco:

  • Contagem regressiva: o início é 5, a condição passa a ser “maior ou igual a 1” e o passo vira i–, que subtrai 1. No Python, o terceiro número do range é o passo: range(5, 0, -1).
  • De 2 em 2: o passo é i += 2. No Python, range(2, 11, 2).
  • Percorrer um vetor: a variável de controle vira a posição. Como a primeira posição é a 0, o laço vai de 0 a 4 para somar as cinco notas.
  • O detalhe do limite: parando antes do 10, são 9 voltas. Incluindo o 10, são 10. Um sinal de igual muda a conta.
  • Um for dentro do outro: para cada linha, o for de dentro dá todas as suas voltas. Com 2 linhas e 3 colunas, o corpo roda 2 × 3 = 6 vezes.

Para percorrer um vetor sem usar a posição, o Python e o PHP têm uma forma mais direta. No teste, as duas deram a mesma soma, 35:

# Python
for nota in notas:
    soma = soma + nota

// PHP
foreach ($notas as $nota) {
    $soma = $soma + $nota;
}

Aí você pergunta: quando usar for e quando usar while?

O for combina com as repetições em que você sabe de antemão quantas voltas serão: contar de 1 a 5, percorrer um vetor de cinco posições. E todo for pode ser reescrito com while. O início vai para antes do laço, a condição fica no while e o passo vai para o fim do corpo:

int i = 1;
while (i <= 5) {
    printf("%d\n", i);
    i++;
}

Esse trecho mostra os mesmos números de 1 a 5. O while é o assunto do próximo artigo. E o i++ é parente do +=, que você viu no artigo sobre operação de atribuição.

Quais são os erros mais comuns com o laço for?

  • Errar o limite por um. Trocar “menor ou igual” por “menor” tira uma volta: 9 em vez de 10.
  • Esquecer que o range para antes do fim. No Python, range(1, 5) vai de 1 a 4.
  • Andar com o passo na direção errada. Testei em C um for que começa em 1, tem a condição “menor ou igual a 5” e o passo i–. A condição nunca ficou falsa: interrompi o programa na volta 1.000.000, com o i valendo −999998.
  • Deixar o for sem condição. Em C, o for sem a condição vira um laço infinito.
  • Começar em 1 ao percorrer um vetor. A primeira posição é a 0. Começando em 1, a nota 7 fica de fora e a soma cai de 35 para 28.

Agora é com você!

No papel:

  • Um for começa em 3, tem a condição “menor ou igual a 12” e o passo i += 3. Quais valores ele mostra? Quantas voltas ele dá?
  • Escreva o cabeçalho de um for que conta de 20 até 0, de 5 em 5.
  • O que range(4, 0, -1) gera no Python?

No computador:

  • Mostre a tabuada completa do 9, de 9 x 1 até 9 x 10.
  • Some todos os números de 1 a 100 com um for.
  • Com um for dentro do outro, desenhe um triângulo de asteriscos: 1 na primeira linha, 2 na segunda, até 5.

Tente sozinho, sem pedir a resposta pronta para ninguém, nem para a IA!

Até o próximo artigo!

Confiança Sempre!!!

Fontes:

Sobre quem escreve

Walmir Silva

Olá! Sou Walmir, engenheiro de software com MBA em Engenharia de Software e o cérebro por trás do GrowthCode e autor do livro "Além do Código".

Se você acha que programação é apenas sobre escrever código, prepare-se para expandir seus horizontes. Aqui, nós vamos além do código e exploramos as interseções fascinantes entre tecnologia, negócios, artes e filosofia.

Você está em busca de crescimento na carreira? Quer se destacar em um mercado competitivo? Almeja uma vida mais rica em conhecimento e realização? Então você chegou ao lugar certo. No GrowthCode, oferecemos insights profundos, estratégias comprovadas e um toque de sabedoria filosófica para catalisar seu crescimento pessoal e profissional.

Ver todos os artigos →

Continue a conversa

Compartilhe sua perspectiva

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Encontre sua próxima resposta

O que você quer aprender?

Preferências de cookies

Os cookies opcionais começam desligados. Você pode mudar a escolha a qualquer momento por esta tela.

NecessáriosSempre ativos

Guardam a sua escolha de cookies e mantêm o site funcionando. Não são usados para publicidade.

Contam visitas e mostram como o site é usado: Google Analytics e Microsoft Clarity, carregados pelo Google Tag Manager. Como esse contêiner também carrega tags de publicidade, as estatísticas só são ativadas junto com Publicidade e marketing.

Exibem anúncios do Google AdSense e medem campanhas e e-mails: pixels da Meta e do TikTok e o Mautic.

Permite que o Google escolha anúncios com base nos seus interesses. Desligado, os anúncios aparecem sem personalização. Depende de Publicidade e marketing.

Também é possível bloquear cookies nas configurações do navegador. Detalhes na Política de privacidade.