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.

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.