Módulo 8 - Repetições com while
Contadores e acumuladores: contando e somando dentro do loop
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Diferenciar contador (quantas vezes) de acumulador (soma total).
- Inicializar as duas variáveis com o valor certo antes do loop.
- Somar entradas do usuário até um valor de parada (o zero).
- Calcular a média ao final, protegendo a divisão por zero.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Contadores e acumuladores: contando e somando dentro do loop.
Os objetivos desta aula. Diferenciar contador (quantas vezes) de acumulador (soma total). Inicializar as duas variáveis com o valor certo antes do loop. Somar entradas do usuário até um valor de parada (o zero). Calcular a média ao final, protegendo a divisão por zero.
Veja o essencial, parte por parte.
Contador conta, acumulador soma. Contador registra QUANTAS vezes algo aconteceu: cresce sempre de 1 em 1.
Somando entradas até o usuário digitar zero. Entrada 8: soma vira 8, quantidade vira 1, novo input pede o próximo.
A média ao final (e a armadilha da divisão por zero). Com o contador e o acumulador prontos, a média é uma linha: soma dividida por quantidade.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Contador conta, acumulador soma
Pense num caixa de mercado ao fim do dia. Ele quer saber duas coisas diferentes: quantos clientes passaram e quanto dinheiro entrou. A primeira pergunta se responde contando de 1 em 1, cliente a cliente. A segunda, somando valores de tamanhos variados, compra a compra. Em código, essas duas perguntas viram duas variáveis com papéis distintos: o contador e o acumulador.
Contador
- Responde: quantas vezes?
- Cresce sempre de 1 em 1
- Exemplo: clientes = clientes + 1
- No fim, guarda a quantidade de voltas
Acumulador
- Responde: quanto no total?
- Cresce pelo valor da volta atual
- Exemplo: caixa = caixa + valor_compra
- No fim, guarda a soma de tudo
Os dois seguem o mesmo ritual de três passos, e vale gravar a sequência: nascem ANTES do loop com valor 0, crescem DENTRO do bloco a cada volta e são usados DEPOIS que o loop termina. O erro de iniciante mais comum aqui é criar a variável dentro do bloco: aí cada volta zera o valor de novo, e o total nunca passa da última entrada. Contador e acumulador precisam sobreviver entre as voltas, então moram do lado de fora.
Somando entradas até o usuário digitar zero
Hora do exemplo completo, e ele resolve um problema clássico: somar uma quantidade de números que você não conhece de antemão. Podem ser 2, podem ser 50; quem decide é o usuário, digitando. Para o programa saber a hora de parar, combinamos um sinal: digitou 0, acabou. Esse valor combinado se chama sentinela, e é a alma dos loops de entrada de dados.
soma = 0
quantidade = 0
numero = int(input("Digite um número (0 para encerrar): "))
while numero != 0:
soma = soma + numero
quantidade = quantidade + 1
numero = int(input("Digite um número (0 para encerrar): "))
print("Você digitou", quantidade, "números.")
print("A soma total é:", soma)O acumulador soma e o contador quantidade contam, volta a volta, até a sentinela 0 chegar.
Acompanhe o fluxo com calma, porque cada linha tem um porquê. O primeiro input acontece FORA do loop: é a leitura inicial, que dá à condição algo para testar logo na entrada. Dentro do bloco, o acumulador soma o número, o contador registra mais uma volta e um novo input busca a próxima entrada. Se o usuário digitar 0 em qualquer momento, a condição numero != 0 falha no teste seguinte e o loop encerra. Repare que o 0 da sentinela não entra na soma nem na contagem, e é assim que deve ser: ele é sinal de parada, não dado.
A média ao final (e a armadilha da divisão por zero)
Com o contador e o acumulador prontos, a média é uma linha: soma dividida por quantidade. Mas existe uma armadilha esperando os desatentos. E se o usuário digitar 0 logo de cara, sem informar número nenhum? A soma vale 0, a quantidade vale 0, e dividir por zero derruba o programa com um ZeroDivisionError. A solução você já domina desde o módulo 7: um if protegendo a divisão.
if quantidade > 0:
print("A média é:", soma / quantidade)
else:
print("Nenhum número foi digitado.")A divisão só acontece se houve pelo menos uma entrada. Sem isso, digitar 0 de cara quebraria o programa.
Esse fecho mostra os módulos do curso trabalhando juntos: input e int do módulo 5, operadores do módulo 6, if e else do módulo 7 e o while deste. É assim que programas de verdade se constroem, peça sobre peça. Antes do checkpoint, um desafio para o Playground: adapte o programa para mostrar também o maior número digitado. Pista: crie uma variável maior começando em 0 e, dentro do loop, use um if para atualizá-la quando o número da vez for maior que ela.
Teste rápido
No programa da aula, qual é o papel da linha soma = soma + numero?
Perguntas frequentes
- Por que o contador e o acumulador precisam começar em zero?
- Porque eles crescem a partir do valor inicial. Se soma começasse em 10, o total final viria 10 unidades maior que o correto. Zero é o ponto de partida neutro da soma e da contagem. Exceção: quando o exercício pede outro ponto de partida de propósito, como um saldo inicial.
- Por que existe um input antes do while e outro dentro?
- O de fora é a leitura inicial: dá à condição um valor para testar antes da primeira volta. O de dentro busca a próxima entrada ao final de cada volta. Sem o de fora, a variável numero nem existiria no primeiro teste; sem o de dentro, o loop testaria o mesmo valor para sempre.
- O que acontece se o usuário digitar um texto em vez de número?
- O int não consegue converter e o programa para com um ValueError, comportamento que você conhece do módulo 5. Blindar o programa contra isso é o assunto do módulo 14, com try e except. Por enquanto, teste com entradas válidas.
- Posso usar outro valor de sentinela em vez do zero?
- Pode, e às vezes deve. Se o programa soma temperaturas, o zero é um dado legítimo e não pode ser sinal de parada; um valor impossível, como -999, ou a palavra fim funcionam melhor. A sentinela certa é um valor que jamais seria um dado real.
- Por que criar as variáveis dentro do loop dá errado?
- Porque cada volta executaria soma = 0 de novo, apagando tudo que foi somado antes. No fim, soma teria só o valor da última entrada. Contador e acumulador precisam sobreviver de uma volta para a outra, por isso nascem antes do while.
- O que é o ZeroDivisionError que a aula mencionou?
- É o erro que o Python levanta ao dividir por zero, operação sem resultado definido na matemática. No nosso programa, ele apareceria se o usuário encerrasse sem digitar nenhum número, pois a média seria 0 dividido por 0. O if quantidade > 0 fecha essa porta.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.