Introdução à Programação · 1.º ano (indicativo)
Como escrever um programa para somar números até zero?
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 comint()oufloat(). - 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
| Conceito | Significado neste programa |
|---|---|
| Acumulador | variável que vai guardando a soma (total) |
| Sentinela | valor especial que termina a leitura (0) |
| Leitura de arranque | primeira leitura antes do ciclo, para a condição ter um valor |
| Atualização | nova leitura no fim de cada volta |
Método passo a passo
- Inicialize o acumulador a zero:
total = 0. - Leia o primeiro número antes do ciclo:
n = int(input("Número: ")). - Escreva a condição do ciclo:
while n != 0:(a linha termina com dois pontos). - Dentro do ciclo (linhas recuadas 4 espaços): some,
total += n, e leia o seguinte,n = int(input("Número: ")). - Fora do ciclo (sem recuo):
print("Soma:", total). - 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:
total = 0n = int(input("Número: "))while n != 0:- (recuada)
total += n - (recuada)
n = int(input("Número: ")) 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):
total = 0; lên = 5. Como 5 ≠ 0, entra no ciclo.- Volta 1:
total = 0 + 5 = 5; lên = 3. - Volta 2:
total = 5 + 3 = 8; lên = 2. - Volta 3:
total = 8 + 2 = 10; lên = 0. - 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:
- Antes do ciclo:
total = 0econtador = 0. - Dentro do ciclo, junte
contador += 1atotal += n. - Depois de 4, 6 e 8:
total = 18econtador = 3. - Depois do ciclo, proteja a divisão:
if contador > 0:eprint(total / contador). - 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:
- Dentro do ciclo, use
if n > 0:seguido detotal += n(recuado mais um nível). - Volta 1: n = 5, é positivo; total = 5.
- Volta 2: n = −2, não é positivo; total continua 5.
- Volta 3: n = 7; total = 12.
- 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:
- Inicialize
soma_pares = 0esoma_impares = 0. - Leia
ne entre no ciclowhile n != 0:. - 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. - Leia o seguinte no fim do ciclo.
- 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 += nsemtotal = 0antes 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 etotal += nmistura número com texto (erroTypeError). - Errar o recuo. O que está dentro do ciclo tem de ter o mesmo recuo (4 espaços). Se
printficar recuado, mostra a soma em cada volta. - Dividir por zero na média quando o utilizador escreve logo 0. Teste
contador > 0primeiro. - Somar o sentinela. Com a estrutura acima o 0 não é somado; se usar
while Truecombreak, verifique o 0 antes de somar.
Exercícios propostos
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
whilee leitura seguinte no fim do corpo. - Condição
while n != 0:: o 0 é o sentinela e não entra na soma. - Converta
input()comint()oufloat(). - 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
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
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✓ Estudado
Ver tudo de Introdução à Programação · Capítulo: Estruturas de repetição