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 - 1pega 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
whileexista algum comando que altere a variável da pergunta, fazendo com que ela eventualmente vireFalse.
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
whilerepete um bloco de código enquanto a sua condição lógica forTrue. - 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).