Laço while
Esta aula aborda o laço while em Python, incluindo condições de parada, uso de break e continue, a cláusula else em loops e como evitar loops infinitos. O conteúdo inclui exemplos práticos e exercícios com respostas.
O laço while é uma estrutura de repetição fundamental em Python que executa um bloco de código enquanto uma condição booleana for verdadeira. Diferente do for, que itera sobre uma sequência, o while é mais flexível e adequado para situações onde o número de iterações não é conhecido antecipadamente. Nesta aula, exploraremos suas principais características, controle de fluxo e boas práticas.
Dominar o while é essencial para escrever programas que interagem com o usuário, processam dados até uma condição de parada ou implementam algoritmos como busca binária e simulações. Veremos como usar condições, interromper loops com break, pular iterações com continue, utilizar a cláusula else e evitar loops infinitos.
Condições
A condição em um laço while é uma expressão booleana que é avaliada antes de cada iteração. Se for True, o bloco é executado; se for False, o loop termina. A condição pode ser qualquer expressão que retorne um valor booleano, incluindo comparações, operadores lógicos e chamadas de função.
É importante que a condição eventualmente se torne falsa para evitar loops infinitos. Geralmente, modificamos variáveis dentro do loop que afetam a condição. Exemplo:
contador = 0
while contador < 5:
print(f"Iteração {contador}")
contador += 1
Neste exemplo, a condição contador < 5 é verdadeira enquanto contador for menor que 5. A cada iteração, incrementamos contador, até que a condição se torne falsa.
break e continue
O comando break interrompe imediatamente o laço, independentemente da condição. É útil para sair de um loop quando uma condição especial é encontrada. Já o continue pula o restante do bloco atual e volta para o teste da condição.
Exemplo com break:
while True:
entrada = input("Digite 'sair' para encerrar: ")
if entrada == 'sair':
break
print(f"Você digitou: {entrada}")
Exemplo com continue:
numero = 0
while numero < 10:
numero += 1
if numero % 2 == 0:
continue
print(numero) # imprime apenas ímpares
No primeiro exemplo, o loop é infinito (while True) até que o usuário digite "sair", que aciona o break. No segundo, números pares são pulados com continue.
else em loops
Python permite uma cláusula else em loops while (e for). O bloco else é executado quando a condição do loop se torna falsa, mas não se o loop foi interrompido por um break. Isso é útil para verificar se o loop foi concluído normalmente.
Exemplo:
numero = 0
while numero < 5:
print(numero)
numero += 1
else:
print("Loop concluído sem interrupção.")
Se um break ocorrer, o else não executa:
numero = 0
while numero < 5:
if numero == 3:
break
print(numero)
numero += 1
else:
print("Isso não será impresso.")
O else é frequentemente usado em buscas: se encontrarmos o elemento, damos break; caso contrário, o else indica que não foi encontrado.
Loops infinitos
Um loop infinito ocorre quando a condição nunca se torna falsa. Isso pode ser intencional (como em servidores ou jogos) ou acidental (bug). Para loops infinitos intencionais, usa-se while True combinado com break para sair sob condição.
Exemplo de loop infinito acidental:
x = 10
while x > 0:
print(x)
# esqueci de decrementar x
Para interromper um loop infinito no terminal, use Ctrl+C (interrupção do teclado). Boas práticas: sempre garantir que a condição seja atualizada dentro do loop, e evitar condições que nunca mudam.
Boas práticas e observações finais
Prefira for quando o número de iterações é conhecido ou quando iterar sobre uma coleção. Use while para repetições baseadas em condições. Evite loops infinitos acidentais verificando se a condição pode se tornar falsa. Use break com moderação; muitas vezes é possível reescrever o loop com uma condição mais clara. A cláusula else é um recurso poderoso para tratar a conclusão normal do loop.
Referências
- Python Tutorial: Control Flow Tools (docs.python.org)
- Python Language Reference: The while statement
- Real Python: Python while Loops
- W3Schools: Python While Loops
- GeeksforGeeks: Python While Loop
Exercícios
-
Escreva um programa que use um laço
whilepara imprimir os números de 1 a 10.✓ Resposta:num = 1 while num <= 10: print(num) num += 1 -
Crie um programa que peça ao usuário para adivinhar um número secreto (por exemplo, 7). Use um laço
whileque continua até o usuário acertar. Usebreakpara sair quando acertar.✓ Resposta:secreto = 7 while True: palpite = int(input("Adivinhe o número (1-10): ")) if palpite == secreto: print("Parabéns! Você acertou.") break else: print("Tente novamente.") -
Use um laço
whilecomcontinuepara imprimir apenas os números ímpares de 1 a 20.✓ Resposta:num = 0 while num < 20: num += 1 if num % 2 == 0: continue print(num) -
Escreva um programa que use um laço
whilecomelsepara percorrer uma lista de números e verificar se o número 5 está presente. Se encontrar, imprima "Encontrado" e interrompa; senão, após o loop, imprima "Não encontrado".✓ Resposta:lista = [1, 2, 3, 4, 6, 7] i = 0 while i < len(lista): if lista[i] == 5: print("Encontrado") break i += 1 else: print("Não encontrado") -
Explique como evitar um loop infinito acidental. Dê um exemplo de código que causa um loop infinito e a correção.
✓ Resposta:Para evitar loops infinitos, certifique-se de que a condição do loop pode se tornar falsa. Isso geralmente envolve modificar uma variável dentro do loop que é usada na condição. Exemplo de loop infinito:
x = 10 while x > 0: print(x) # falta x -= 1Correção:
x = 10 while x > 0: print(x) x -= 1