Introdução à Programação · 1.º ano (indicativo)

Como escrever um programa para somar números até zero?

  • 8 min de leitura
  • 4 exemplos resolvidos
  • 5 exercícios com solução
  • Atualizado em

Resposta curta

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 como sentinela: não é somado, apenas indica o fim. No fim, print(total) mostra a soma.

Quando se aplica

Sempre que o programa não sabe de antemão quantos dados vai receber, mas sabe como o utilizador sinaliza o fim: neste caso, escrevendo 0. É o padrão de «ler até ao sentinela», útil para somar vendas do dia na banca, notas de uma turma ou quantias de uma lista, sem pedir primeiro quantos são.

Pré-requisitos

  • Variáveis, input() e conversão com int() ou float().
  • O ciclo while: repete o bloco recuado enquanto a condição for verdadeira.
  • Operadores de comparação (!= significa «diferente de») e de atribuição (+= soma e guarda).

Conceitos-chave

ConceitoSignificado neste programa
Acumuladorvariável que vai guardando a soma (total)
Sentinelavalor especial que termina a leitura (0)
Leitura de arranqueprimeira leitura antes do ciclo, para a condição ter um valor
Atualizaçãonova leitura no fim de cada volta

Método passo a passo

  1. Inicialize o acumulador a zero: total = 0.
  2. Leia o primeiro número antes do ciclo: n = int(input("Número: ")).
  3. Escreva a condição do ciclo: while n != 0: (a linha termina com dois pontos).
  4. Dentro do ciclo (linhas recuadas 4 espaços): some, total += n, e leia o seguinte, n = int(input("Número: ")).
  5. Fora do ciclo (sem recuo): print("Soma:", total).
  6. Teste à mão com uma lista pequena, por exemplo 5, 3, 2, 0, e confirme que o resultado é 10.

Programa completo

O programa tem 6 linhas; as linhas 4 e 5 abaixo estão recuadas (4 espaços), por pertencerem ao ciclo:

  1. total = 0
  2. n = int(input("Número: "))
  3. while n != 0:
  4. (recuada) total += n
  5. (recuada) n = int(input("Número: "))
  6. print("Soma:", total)

Atenção

A segunda leitura tem de estar dentro do ciclo. Se ficar fora, o valor de n nunca muda e o programa fica preso num ciclo infinito (ou não entra).

Exemplos resolvidos

Exemplo 1 — Soma simples

Enunciado: O utilizador escreve 5, 3, 2 e 0. Que valor mostra o programa?

Resolução (rastreio):

  1. total = 0; lê n = 5. Como 5 ≠ 0, entra no ciclo.
  2. Volta 1: total = 0 + 5 = 5; lê n = 3.
  3. Volta 2: total = 5 + 3 = 8; lê n = 2.
  4. Volta 3: total = 8 + 2 = 10; lê n = 0.
  5. A condição n != 0 é falsa; o ciclo termina.

Resposta: mostra Soma: 10. Verificação: 5 + 3 + 2 = 10.

Exemplo 2 — Soma, contagem e média

Enunciado: Acrescente ao programa um contador e calcule a média. Entradas: 4, 6, 8 e 0.

Resolução:

  1. Antes do ciclo: total = 0 e contador = 0.
  2. Dentro do ciclo, junte contador += 1 a total += n.
  3. Depois de 4, 6 e 8: total = 18 e contador = 3.
  4. Depois do ciclo, proteja a divisão: if contador > 0: e print(total / contador).
  5. 18 ÷ 3 = 6,0.

Resposta: soma 18, contador 3, média 6.0. Verificação: (4 + 6 + 8) ÷ 3 = 6. Se a primeira entrada fosse 0, o contador seria 0 e o if evitaria a divisão por zero.

Exemplo 3 — Ignorar valores negativos

Enunciado: Some só os números positivos até ao zero. Entradas: 5, −2, 7 e 0.

Resolução:

  1. Dentro do ciclo, use if n > 0: seguido de total += n (recuado mais um nível).
  2. Volta 1: n = 5, é positivo; total = 5.
  3. Volta 2: n = −2, não é positivo; total continua 5.
  4. Volta 3: n = 7; total = 12.
  5. Lê 0: termina.

Resposta: 12. Verificação: 5 + 7 = 12.

Exemplo 4 — Nível de exame: pares e ímpares separados

Enunciado: Escreva um programa que leia números até 0 e mostre a soma dos pares e a soma dos ímpares. Entradas: 2, 7, 4, 9 e 0.

Resolução:

  1. Inicialize soma_pares = 0 e soma_impares = 0.
  2. Leia n e entre no ciclo while n != 0:.
  3. Teste com if n % 2 == 0: (resto da divisão por 2 igual a 0 significa par). Se verdadeiro, soma_pares += n; senão (else:), soma_impares += n.
  4. Leia o seguinte no fim do ciclo.
  5. Rastreio: 2 é par (2); 7 é ímpar (7); 4 é par (6); 9 é ímpar (16).

Resposta: pares 6, ímpares 16. Verificação: 2 + 4 = 6 e 7 + 9 = 16; a soma total 22 é igual a 6 + 16.

Erros frequentes

  • Esquecer a leitura dentro do ciclo. Resultado: ciclo infinito. Se isto acontecer, interrompa com Ctrl + C e corrija.
  • Não inicializar o acumulador. Usar total += n sem total = 0 antes provoca erro (NameError).
  • **Escrever = em vez de != ou == na condição.** O sinal = atribui; para comparar usa-se ==, !=, <, >.
  • **Esquecer o int().** Sem conversão, input() devolve texto e total += n mistura número com texto (erro TypeError).
  • Errar o recuo. O que está dentro do ciclo tem de ter o mesmo recuo (4 espaços). Se print ficar recuado, mostra a soma em cada volta.
  • Dividir por zero na média quando o utilizador escreve logo 0. Teste contador > 0 primeiro.
  • Somar o sentinela. Com a estrutura acima o 0 não é somado; se usar while True com break, verifique o 0 antes de somar.

Exercícios propostos

Tente resolver primeiro no caderno; depois confira.

1Exercício 1

Escreva o programa que soma os números lidos até 0 e indique o que mostra para as entradas 10, 20, 30 e 0.

Ver solução

Código: total = 0; n = int(input()); while n != 0: com total += n e n = int(input()) recuados; print(total). Rastreio: 10, 30, 60. Mostra 60.

2Exercício 2

Altere o programa para contar quantos números positivos foram escritos. Entradas: 3, −1, 8, −5, 2 e 0.

Ver dica

Use um contador e um if n > 0: dentro do ciclo.

Ver solução

Inicialize positivos = 0. Dentro do ciclo: if n > 0: e positivos += 1 (recuado). Os positivos são 3, 8 e 2, portanto o programa mostra 3.

3Exercício 3

Calcule a média dos números 10, 15 e 20 lidos até 0, protegendo o caso em que não é escrito nenhum número.

Ver solução

Mantenha total e contador. No fim: if contador > 0: print(total / contador); else: print("Sem dados"). Aqui total = 45, contador = 3 e a média é 15.0.

4Exercício 4

Escreva um programa que leia números (0 termina) e pare logo que a soma chegue a 100 ou mais. Entradas: 40, 35, 30, 5, 0. Quantos números lê?

Ver dica

Use while total < 100: e um break quando o número for 0.

Ver solução

Código: total = 0; while total < 100:; dentro: n = int(input()); if n == 0: break; total += n. Rastreio: 40 (total 40), 35 (75), 30 (105). Como 105 ≥ 100, o ciclo termina. Lê 3 números e mostra 105; o 5 e o 0 nem são lidos.

5Exercício 5

Escreva um programa que leia números até 0 e mostre o maior. Entradas: 4, 12, 7, 0.

Ver solução

Leia o primeiro número; se for 0, não há maior. Caso contrário, maior = n. No ciclo, depois de ler cada novo n diferente de 0, faça if n > maior: maior = n. Rastreio: maior = 4; depois 12 > 4, maior = 12; depois 7 não supera 12. Mostra 12.

Perguntas frequentes

Quando se usa este método?

Quando a quantidade de dados é desconhecida e o fim é indicado por um valor especial. Se soubesse quantos números ler, um for com range(n) seria mais natural.

Existe um método mais rápido?

Para uma lista já guardada, a função sum() do Python soma tudo de uma vez. Mas para aprender ciclos e para ler dados até ao sentinela, o while é o exercício esperado nas disciplinas de introdução.

Posso usar outro valor como sentinela?

Sim, desde que não seja um dado válido. Se 0 for um valor legítimo, use outro (por exemplo −1) ou peça confirmação com uma pergunta «Continuar? (s/n)».

Que erros são mais comuns?

Ler só uma vez fora do ciclo, esquecer o acumulador inicial e errar o recuo. Veja a secção «Erros frequentes».

Resumo

  • Acumulador inicializado a 0 antes do ciclo.
  • Leitura de arranque antes do while e leitura seguinte no fim do corpo.
  • Condição while n != 0:: o 0 é o sentinela e não entra na soma.
  • Converta input() com int() ou float().
  • Rastreie à mão com uma lista pequena para testar o programa.
  • Proteja divisões (média) contra o caso sem dados.

Onde aprofundar

  • O programa da disciplina de Introdução à Programação da sua instituição — confirme a bibliografia em vigor.
  • A documentação oficial do Python, na secção sobre a instrução while.
  • O curso CS50 (Harvard), como referência pedagógica, em inglês.

Continue a estudar

1.º ano (indicativo)8 min

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

1.º ano (indicativo)7 min

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

1.º ano (indicativo)8 min

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

1.º ano (indicativo)9 min

Qual é a diferença entre while e for?

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…

4 exemplos5 exercícios com solução

Ver tudo de Introdução à Programação · Capítulo: Estruturas de repetição