Repetindo com while

Use while para repetir comandos enquanto uma condição for verdadeira.

Na lição anterior, vimos que loops servem para repetir tarefas. Agora, vamos conhecer o nosso primeiro grande ajudante prático: o while (que significa enquanto em inglês).

O que é o loop while?

Pense no while como um guarda de trânsito em uma ponte. Ele faz uma pergunta antes de deixar você passar: "Você tem autorização?".

  • Se a resposta for sim (True), você cruza a ponte, faz o que tem que fazer do outro lado e, no fim do dia, volta para o guarda.
  • O guarda faz a mesma pergunta de novo. E você só para de cruzar a ponte quando a resposta for não (False).

A regra básica é: o código dentro do while continuará repetindo enquanto a condição for verdadeira.

A sintaxe do while

Escrever um while é muito parecido com escrever um if:

while condicao:
   # Código que vai se repetir (deve estar indentado!)

Exemplos práticos

O while pode gerar dúvidas sobre como controlar a parada, então vamos analisar vários exemplos práticos com calma.

Exemplo 1: Contagem regressiva de um foguete

Neste exemplo, queremos contar de 5 até 1 e depois gritar "Decolar!".

# INÍCIO: Começamos nosso contador em 5
contador = 5

# TESTE: Enquanto o contador for maior que 0, continue repetindo
while contador > 0:
   # AÇÃO: Mostrar o valor da contagem
   print(contador)
   
   # ATUALIZAÇÃO: Diminuímos 1 do contador a cada repetição
   contador = contador - 1  # Sem isso, o contador seria sempre 5 (loop infinito!)

print("Decolar!")

Nota didática: A linha contador = contador - 1 pega o valor atual da variável e diminui 1. No Python, os programadores costumam escrever isso de forma abreviada: contador -= 1 (faz exatamente a mesma coisa).

Exemplo 2: Validação de senha

Imagine um cofre eletrônico que continua pedindo a senha do usuário até que ele acerte. Não sabemos quantas vezes ele vai errar antes de acertar.

senha_correta = "1234"
senha_digitada = ""  # INICIO: Começa vazia

# TESTE: Enquanto a senha digitada for DIFERENTE da senha correta, continue pedindo
while senha_digitada != senha_correta:
   # ATUALIZAÇÃO: ler a senha do usuário
   senha_digitada = input("Digite a senha de 4 dígitos: ")
   
   # AÇÃO: mostrar mensagem de senha incorreta e solicitar nova senha
   if senha_digitada != senha_correta:
       print("Senha incorreta! Tente novamente.")

print("Acesso liberado! Cofre aberto.")

Exemplo 3: Calculadora acumuladora

Neste programa, pedimos números para o usuário e vamos somando todos eles. O programa só para quando o usuário digitar 0.

soma = 0
numero = -1  # INICIO: Começa com -1 apenas para entrar no loop

# TESTE: repita enquanto o número for diferente de 0
while numero != 0:
   # ATUALIZAÇÃO: leitura do número
   numero = int(input("Digite um número para somar: "))
   # AÇÃO: fazer a soma
   soma += numero  # O mesmo que: soma = soma + numero

print("A soma total de todos os números digitados é:", soma)

Exemplo 4: Entendendo o terrível loop infinito

O que acontece se esquecermos do passo de atualização? Vamos ver um erro clássico:

# CÓDIGO COM ERRO
# O código abaixo vai travar seu programa. Não o execute, apenas leia e entenda o erro.
contador = 1  # INICIO
while contador <= 5:  # TESTE
   print(contador)  # AÇÃO
   # Esqueceu da ATUALIZAÇÃO: contador = contador + 1

Por que este código é um problema? Como o contador começa valendo 1, e nós nunca somamos nada a ele, a pergunta contador <= 5 será sempre verdadeira (1 <= 5 é True para sempre). O computador tentará imprimir o número 1 infinitas vezes até travar!

  • Como consertar? Sempre garanta que dentro do bloco do while exista algum comando que altere a variável da pergunta, fazendo com que ela eventualmente vire False.

Como encerrar um programa em loop infinito

Se você perceber que o programa entrou em loop infinito (exemplo: no código acima, ele ficaria imprimindo 1 sem parar), caso o terminal não esteja travado, você pode usar o comando "CTRL + C" para fazer o programa parar a execução.

O que aprendemos nesta lição

Nesta lição, você aprendeu que:

  • O loop while repete um bloco de código enquanto a sua condição lógica for True.
  • A repetição para imediatamente no momento em que a condição avaliada vira False.
  • Precisamos sempre declarar a variável de controle antes do loop começar (ponto de partida).
  • É obrigatório atualizar a variável de controle dentro do loop (usando += ou -=), caso contrário criaremos um loop infinito.
  • O while é ideal para situações em que não sabemos de antemão quantas vezes a repetição precisará acontecer (como esperar uma senha correta).