Neste artigo
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.

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:

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

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:
- Universidade Federal de Uberlândia, FACOM, aula 06, Comandos de Repetição, com o contador, as três etapas do comando for (inicialização, condição e incremento), o exemplo que imprime de 1 a 10 e o aviso de que omitir a condição cria um laço infinito (PDF, slides de aula).
- Universidade Federal de Pernambuco, Centro de Informática, aula de Introdução à Programação sobre laços, com a variável de controle, a forma geral do for, a inicialização executada uma só vez e a equivalência entre o for e o while (PDF, slides de aula).
- Universidade Federal de Pernambuco, Centro de Informática, IF669, aula 17, com o fluxo de controle do laço for e o caso da condição omitida, que deixa o laço infinito (PDF, slides de aula).
- Unicamp, Instituto de Computação, MC102, aula 6, com a sintaxe do for, a variável de controle e o caso em que a condição já começa falsa e o bloco não é executado nenhuma vez (PDF, notas de aula).
- Unicamp, Instituto de Computação, MC102, aula 8, com a inicialização, a condição de parada e o passo, que pode ser incremento ou decremento (PDF, slides de aula).
- IFRN, Fundamentos de Programação, aula 5, repetição, com o funcionamento do for em cinco passos: inicialização, teste, instruções, incremento e volta ao teste (PDF, slides de aula).
- Universidade Federal de Pernambuco, Centro de Informática, Estruturas de Repetição, com o fluxograma do for e o uso do laço quando o número de repetições é conhecido de antemão (PDF, slides de aula).
- Unicamp, Instituto de Computação, MC-102, aula 05, Comandos Repetitivos, com o for do Python percorrendo os itens de uma lista (PDF, slides de aula).
- USP, e-Disciplinas, aula sobre comandos de repetição, com o while substituindo o for: a inicialização antes do laço e o incremento dentro dele.
- Python, documentação oficial, tutorial, More Control Flow Tools, com o for que percorre os itens de uma sequência e o range, cujo ponto final nunca faz parte da sequência e que aceita passo, inclusive negativo (em inglês).
- Os exemplos foram executados em Python 3.13, PHP 8.3 e GCC 13.

Continue a conversa