Introdução à Programação · 1.º ano (indicativo)
Qual é a diferença entre while e for?
Resposta curta
O for percorre uma sequência ou repete um número de vezes conhecido à partida. O while repete enquanto uma condição for verdadeira, por isso serve quando não se sabe quantas voltas serão precisas. Ambos são ciclos e quase tudo o que um faz o outro também consegue, mas cada um é mais natural numa situação.
Definição de for
Em Python, o for percorre, um a um, os elementos de algo «iterável»: uma lista, um texto, ou uma sequência produzida por range(). A forma geral é for variavel in sequencia: seguida do bloco indentado. A própria linguagem trata de passar de elemento para elemento, e o ciclo termina quando a sequência acaba.
Exemplos: for i in range(1, 6): print(i) mostra 1, 2, 3, 4, 5 (o limite superior de range nunca é incluído). E for letra in "Luanda": print(letra) mostra uma letra por linha.
Definição de while
O while tem a forma while condicao: seguida do bloco indentado. Antes de cada volta, o Python avalia a condição: se for verdadeira, executa o bloco e volta a avaliar; se for falsa, sai do ciclo. Como ninguém avança por si, é o programador que tem de alterar, dentro do bloco, a variável que aparece na condição. Se isso não acontecer, o ciclo nunca termina.
Quadro comparativo
| Aspeto | for | while |
|---|---|---|
| Ideia principal | percorrer elementos / repetir N vezes | repetir enquanto a condição for verdadeira |
| Número de voltas | conhecido antes de começar | pode ser desconhecido |
| Quem avança | o Python (passa ao elemento seguinte) | o programador (atualiza a variável) |
| Risco típico | erro de limites em range | ciclo infinito |
| Termina quando | a sequência acaba | a condição se torna falsa |
| Usa-se tipicamente em | listas, textos, contagens fixas | leituras repetidas, pesquisas, convergência |
Semelhanças
- Ambos repetem um bloco indentado de instruções.
- Ambos aceitam
break(sair já do ciclo) econtinue(saltar para a volta seguinte). - Qualquer
forpode ser reescrito comwhile(com um contador) e, na maioria dos casos, qualquerwhilecom contagem pode ser escrito comfor.
Como memorizar a diferença
- for = «para cada»: para cada elemento da sequência, faça isto.
- while = «enquanto»: enquanto isto for verdade, continue.
- Pergunta-teste: sei de antemão quantas vezes vou repetir ou que coleção vou percorrer? Se sim,
for. Se a resposta depende de algo que só se descobre durante a execução,while.
Exemplos resolvidos
Exemplo 1 — Contagem fixa com for
Enunciado: Mostre os números de 1 a 5, um por linha.
Resolução:
- Sabe-se que são 5 voltas, logo o
foré natural. for i in range(1, 6):(o 6 não entra).- Dentro do ciclo,
print(i).
Resposta: o programa mostra 1, 2, 3, 4 e 5. Verificação: range(1, 6) produz 5 valores, de 1 a 5.
Exemplo 2 — A mesma contagem com while
Enunciado: Resolva o exemplo anterior com while.
Resolução:
- Crie o contador antes do ciclo:
n = 1. - Escreva a condição:
while n <= 5:. - Dentro do ciclo:
print(n)e depoisn += 1.
Resposta: a saída é igual, 1 a 5. Verificação: quando n chega a 6, a condição 6 <= 5 é falsa e o ciclo termina. Repare que aqui tivemos de escrever a inicialização e a atualização, o que no for é automático.
Exemplo 3 — Percorrer uma lista (for) e somar
Enunciado: Dada a lista notas = [12, 15, 9], calcule a soma e a média.
Resolução:
soma = 0(antes do ciclo).for n in notas:seguido desoma += n(dentro do ciclo).- Depois do ciclo:
media = soma / len(notas). - Voltas: 0 + 12 = 12; 12 + 15 = 27; 27 + 9 = 36.
Resposta: soma = 36 e média = 12.0. Verificação: 36 ÷ 3 = 12.
Exemplo 4 — Número de voltas desconhecido (while)
Enunciado: Um capital de 100 kwanzas duplica em cada ano. Quantos anos são precisos para ultrapassar 1000 kwanzas?
Resolução:
- Não se sabe à partida quantas voltas: usa-se
while. capital = 100eanos = 0.while capital <= 1000:comcapital *= 2eanos += 1no bloco.- Seguimento: 100 → 200 (1 ano) → 400 (2) → 800 (3) → 1600 (4). Como 1600 > 1000, o ciclo pára.
Resposta: 4 anos. Verificação: 100 × 23 = 800 (ainda não passa) e 100 × 24 = 1600 (passa).
Quando usar cada um
Escolha for quando tem uma coleção para percorrer (lista, texto, linhas de um ficheiro) ou uma contagem conhecida. Escolha while quando a paragem depende de um acontecimento: o utilizador escrever a palavra-passe certa, um saldo chegar a zero, um erro ficar abaixo de um valor. Pode haver os dois em simultâneo, um dentro do outro (ciclos encaixados), por exemplo um while que repete um menu e, dentro dele, um for que percorre uma lista.
Erros frequentes
- **Esquecer de atualizar a variável do
while:** o ciclo nunca termina. Antes de executar, pergunte: «o que faz a condição tornar-se falsa?». - **Esperar que
range(1, 5)inclua o 5:** só produz 1, 2, 3, 4. Para chegar ao 5, escrevarange(1, 6). - **Usar
whilepara percorrer uma lista com contador quando umforbastava:** funciona, mas é mais longo e mais sujeito a erros. - **Alterar a variável de um
fordentro do bloco, esperando mudar o ciclo:** a próxima volta recebe o elemento seguinte da sequência, independentemente do que fez. - **Escrever
=em vez de==na condição:** o Python acusa erro de sintaxe; lembre-se de que=atribui e==compara.
Exercícios propostos
1Exercício 1
Escreva com for um ciclo que mostre os números pares de 2 a 10.
Ver dica
O terceiro argumento de range é o passo.
Ver solução
for i in range(2, 11, 2): print(i). O ciclo começa em 2, avança de 2 em 2 e pára antes de 11, mostrando 2, 4, 6, 8 e 10.
2Exercício 2
Calcule a soma dos inteiros de 1 a 10 primeiro com for e depois com while.
Ver solução
Com for: soma = 0, for i in range(1, 11): soma += i. Com while: soma = 0, i = 1, while i <= 10: com soma += i e i += 1. Em ambos os casos o resultado é 55, pois 1 + 2 + … + 10 = 10 × 11 ÷ 2 = 55.
3Exercício 3
Quantas vezes se pode dividir 100 por 2 até o resultado ficar menor do que 1? Escreva o ciclo adequado e indique o resultado.
Ver dica
O número de voltas não é conhecido de antemão.
Ver solução
Usa-se while: x = 100, passos = 0, while x >= 1: com x /= 2 e passos += 1. Valores sucessivos: 50, 25, 12.5, 6.25, 3.125, 1.5625, 0.78125. Foram 7 divisões; após 6 o valor (1.5625) ainda era maior ou igual a 1.
4Exercício 4
O código n = 1 seguido de while n < 4: e print(n) (sem mais nada no bloco) nunca termina. Explique porquê e corrija-o.
Ver solução
O valor de n nunca muda, por isso n < 4 é sempre verdadeira e o ciclo é infinito. Corrige-se acrescentando n += 1 dentro do bloco. Assim mostra 1, 2, 3 e pára quando n vale 4.
5Exercício 5
Calcule 5! (fatorial de 5) com um for e indique o valor do acumulador em cada volta.
Ver solução
fat = 1 e for i in range(1, 6): fat *= i. Acumulador: 1, 2, 6, 24, 120. O resultado é 120, porque 1 × 2 × 3 × 4 × 5 = 120. O acumulador começa em 1 (e não em 0), pois 0 anularia todos os produtos.
Perguntas frequentes
Qual é mais importante, while ou for?
Nenhum é «mais importante»: são complementares. Na prática, em Python, o for aparece muito mais porque quase tudo se percorre (listas, textos, ficheiros). O while é indispensável quando o fim depende de uma condição que só se conhece durante a execução.
Podem ocorrer em simultâneo?
Sim. Pode colocar um for dentro de um while (ou o contrário). Um caso comum é um menu que se repete com while até o utilizador escolher «sair» e, em cada volta, um for que percorre uma lista de produtos.
Como não os confundir nos exames?
Antes de escrever, responda a uma pergunta: o enunciado diz quantas vezes repetir ou que coleção percorrer? Se sim, use for. Se fala em «até que», «enquanto» ou «repetir até acertar», use while. E confirme sempre, no while, onde a condição fica falsa.
Posso trocar um pelo outro?
Quase sempre. Um for com range equivale a um while com contador, mas o contrário nem sempre é prático: um while que lê dados até o utilizador escrever «fim» não tem sequência para percorrer.
Resumo
forpercorre uma sequência ou repete um número conhecido de vezes; o Python avança por si.whilerepete enquanto a condição for verdadeira; o programador tem de a fazer mudar.- O erro típico do
whileé o ciclo infinito; o doforé o limite derange(o fim não é incluído). - Pergunta-teste: sei quantas voltas? Então
for. Dependo de uma condição? Entãowhile. - Ambos aceitam
breakecontinuee podem ser encaixados um no outro.
Onde aprofundar
- Manual e programa da disciplina de Programação/Informática da sua instituição (confirme a edição em vigor).
- Documentação oficial do Python, secção sobre instruções
forewhile(tutorial da linguagem). - Curso CS50 da Universidade de Harvard, como referência pedagógica de introdução à programação (confirme a versão atual).
Continue a estudar
Como escrever um programa para somar números até zero?
Em Python, use um acumulador total = 0, leia o primeiro número e repita com while n != 0: somando n ao total e lendo o número seguinte dentro do ciclo. O zero funciona…
4 exemplos5 exercícios com solução✓ Estudado
Como escrever um programa para a tabuada?
Leia o número com n = int(input()) e percorra os multiplicadores de 1 a 10 com for i in range(1, 11):. Dentro do ciclo, mostre cada linha com print(n, "x", i, "=", n *…
4 exemplos5 exercícios com solução✓ Estudado
Como escrever um programa para o fatorial?
O fatorial de n (n!) é o produto 1 × 2 × … × n, com 0! = 1. Em Python, comece com fat = 1, percorra for i in range(2, n + 1): e multiplique com fat *= i. No fim…
4 exemplos5 exercícios com solução✓ Estudado
Como escrever um programa para a sequência de Fibonacci?
A sequência de Fibonacci começa em 0 e 1, e cada termo seguinte é a soma dos dois anteriores: 0, 1, 1, 2, 3, 5, 8, … Em Python, guarde os dois últimos termos em a e b…
4 exemplos5 exercícios com solução✓ Estudado
Ver tudo de Introdução à Programação · Capítulo: Estruturas de repetição