Estruturas de Repetição: while
Os loops nos permitem executar uma instrução ou grupo de instruções quantas vezes quisermos. Em geral,
as instruções são executadas sequencialmente. Vamos ver um exemplo muito ruim onde imprimimos diversas
vezes 'Hello, World!'
:
print('Hello, World!')
print('Hello, World!')
print('Hello, World!')
print('Hello, World!')
print('Hello, World!')
Esses comandos de prints são completamente desnecessários, porque o loop while
pode
simplificar tudo isso, reduzindo essas linhas de código. O que ele faz é repetir algum bloco de código
enquanto (while) sua condição for verdadeira. Lembram muito as estruturas
condicionais, não é? Mas a grande diferença é que as estruturas condicionais executam apenas uma vez o
bloco de código se sua condição for verdadeira, enquanto as estruturas de repetição executam repetidas
vezes um bloco de código. Vamos ver o exemplo mais simples possível:
Exemplo Básico de while
Queremos imprimir na tela 5 vezes 'Hello, World!'
. O primeiro passo para a criação de um
loop while é seu contador. Sempre terá que ter uma variável contadora ao utilizar o loop while. Pode ser
de qualquer nome, desde que seja claro e significativo. Vamos utilizar neste exemplo uma variável
contador
, e atribuir o valor 1:
contador = 1
while contador <= 5:
print('Hello, World!')
contador = contador + 1
O código acima executa 5 vezes o bloco de código 'Hello, World!'
. A cada repetição, a
variável contador
aumenta em 1 até chegar a 6, quando o while para.
Contagem Crescente e Decrescente
Vamos criar um programa que repete 5 vezes o código 'Contagem: ...':
contador = 1
while contador <= 5:
print(f'Contagem: {contador}')
contador = contador + 1
E para contagem decrescente:
contador = 5
while contador >= 1:
print(f'Contagem: {contador}')
contador = contador - 1
Quebrando e Continuando com break
e continue
Há situações em que você precisa parar de executar um bloco de repetição while
mesmo que a
condição ainda não seja satisfeita. É possível fazer isso utilizando a palavra-chave break
.
Exemplo: repetir os números de 1 a 10, mas parar quando o contador for 7:
contador = 1
while contador <= 10:
print(contador)
if contador == 7:
break
contador = contador + 1
O continue
serve para pular para a próxima repetição do loop. Exemplo: imprimir os números
de 1 a 5, pulando o número 4:
contador = 1
while contador <= 5:
if contador == 4:
contador = contador + 1
continue
print(contador)
contador = contador + 1
Agora, um programa que pergunta ao usuário seu nome. O loop quebra apenas quando o usuário digitar 'quit':
while True:
nome = input("Digite o seu nome: ")
if nome == 'quit':
break
Tópicos Avançados
Substituição de 'contador' por 'i'
Muitos desenvolvedores usam a variável i
ao invés de contador
. Isso é uma
convenção da comunidade:
i = 5
while i >= 1:
print(i)
i = i - 1
Operadores de Atribuição
Podemos usar operadores de atribuição para tornar o código mais compacto:
i = 1
while i < 5:
print(i)
i += 1 # Equivalente a i = i + 1
Loops Infinitos
Loops infinitos nunca param de executar, normalmente por esquecer de incrementar ou decrementar a variável de controle:
# CUIDADO: Este código entra em loop infinito!
contador = 1
while contador < 10:
print('Contando!')
# contador = contador + 1 # Faltou incrementar!
Para resolver, basta não esquecer de incrementar:
contador = 1
while contador < 10:
print('Contando!')
contador = contador + 1
Estrutura while...else
Assim como as estruturas condicionais, o laço while
também aceita else
. O
bloco else
é executado quando a condição do while
se torna falsa.
i = 1
while i <= 10:
print(i)
i += 1
else:
print('As repetições acabaram')
Isso imprime os números de 1 a 10, e quando a condição do while
for falsa, o
else
será executado, imprimindo "As repetições acabaram".