Laço(loop) em Python
Os laços permitem a execução de uma determinada ação com base no cumprimento de uma condição específica. Na linguagem Python, existem os seguintes tipos de laços:
- while
- for
Ciclo while
O laço while verifica se uma condição é verdadeira e, se for, executa as instruções dentro do laço. Ele possui a seguinte estrutura formal:
while condição:
instruçõesApós a palavra-chave while, é especificada a condição que, enquanto retornar True, o bloco de instruções será executado.
Todas as instruções que pertencem ao laço while devem ser escritas nas linhas seguintes, com uma tabulação em relação ao início da linha onde o while foi declarado.
number = 1
while number < 5:
print(f"number = {number}")
number += 1
print("Execução do programa concluída")Nesse exemplo, o laço while será executado enquanto a variável number for menor que 5.
O bloco do laço é composto por duas instruções:
print(f"number = {number}")
number += 1Note que ambas possuem tabulação em relação ao início da linha onde o while foi declarado. Isso permite que o Python identifique que elas fazem parte do laço. No laço, primeiro o valor da variável number é exibido e, em seguida, um novo valor é atribuído a ela.
Repare também que a última instrução, print("Execução do programa concluída"), não tem tabulação em relação ao início da linha, o que significa que ela não faz parte do laço while.
O processo do laço pode ser descrito da seguinte forma:
Primeiro, é verificado se o valor da variável
numberé menor que 5. Como inicialmentenumberé igual a 1, a condição retornaTrue, e as instruções do laço são executadas.As instruções exibem no console a mensagem
number = 1. Em seguida, o valor denumberé incrementado em 1, passando a ser igual a 2. A execução de um bloco de instruções do laço é chamada de iteração. Assim, a primeira iteração do laço é concluída.Novamente, a condição
number < 5é verificada. Comonumberé 2, a condição ainda é verdadeira, então as instruções do laço são executadas mais uma vez.O laço exibe
number = 2no console e incrementanumberpara 3, concluindo a segunda iteração.- O processo se repete com number igual a 3, exibindo
number = 3e incrementando o valor para 4, finalizando a terceira iteração. - Na quarta iteração,
number = 4é exibido enumberé incrementado para 5. - Agora, a condição
number < 5retornaFalse, poisnumberé igual a 5. O laço é finalizado, e as instruções seguintes ao laçowhilesão executadas.
Ao final da execução, o console exibirá:
number = 1 number = 2 number = 3 number = 4 Execução do programa concluída
Bloco else no laço while
Para o laço while, também é possível definir um bloco else, cujas instruções são executadas quando a condição se torna False:
number = 1
while number < 5:
print(f"number = {number}")
number += 1
else:
print(f"number = {number}. O laço foi concluído")
print("Execução do programa concluída")Neste caso, o laço while verifica a condição e executa suas instruções. Quando a condição se torna False, as instruções do bloco else``são executadas. O blocoelse também deve ter tabulaçãoem relação à estrutura do laço. O console exibirá:
number = 1
while number < 5:
print(f"number = {number}")
number += 1
else:
print(f"number = {number}. O laço foi concluído")
print("Execução do programa concluída")O bloco else pode ser útil se a condição for False desde o início, permitindo que algumas ações sejam realizadas:
number = 10
while number < 5:
print(f"number = {number}")
number += 1
else:
print(f"number = {number}. O laço foi concluído")
print("Execução do programa concluída")Neste exemplo, a condição number < 5 já é False desde o início, então o laço não realiza nenhuma iteração e vai diretamente para o bloco else.
Ciclo for
Outro tipo de laço é a estrutura for. Esse laço percorre um conjunto de valores, atribuindo cada valor a uma variável, e dentro do laço podemos realizar várias operações com essa variável. A estrutura formal do laço for é a seguinte:
for variável in conjunto_de_valores:
instruçõesApós a palavra-chave for, é especificada uma variável que receberá os valores. Em seguida, após o operador in, é indicado o conjunto de valores seguido de dois pontos.
Nas linhas subsequentes, são colocadas as instruções do laço, que também devem ter tabulação em relação ao início do laço.
Durante a execução, o Python obtém cada valor do conjunto, um de cada vez, e o atribui à variável. Quando todos os valores do conjunto forem processados, o laço é encerrado.
Por exemplo, podemos usar uma string, que é essencialmente um conjunto de caracteres, como conjunto de valores:
message = "Hello"
for c in message:
print(c)Nesse exemplo, a variável c é definida no laço e, após o operador in, a variável message armazena a string "Hello". O laço for percorrerá cada caractere da string message, atribuindo-os à variável c. O bloco do laço consiste em uma única instrução que exibe o valor de c no console. A saída será:
H e l l o
Frequentemente, o laço for é usado em conjunto com a função embutida range(), que gera uma sequência de números:
for n in range(10):
print(n, end=" ")Se a função range receber um único parâmetro, ele indicará o valor máximo do intervalo de números. No exemplo acima, será gerada uma sequência de 0 a 9 (excluindo 10). O resultado no console será:
0 1 2 3 4 5 6 7 8 9
Também é possível passar um valor mínimo para a função range():
for n in range(4, 10):
print(n, end=" ")Neste caso, a sequência vai de 4 até 9. O console exibirá:
4 5 6 7 8 9
Além disso, a função range() aceita um terceiro parâmetro que define o incremento:
for n in range(0, 10, 2):
print(n, end=" ")Aqui, a sequência vai de 0 até 8, com incrementos de 2. O resultado será:
0 2 4 6 8
Bloco else no laço for
O laço for também pode incluir um bloco else, que será executado após a conclusão do laço:
message = "Hello"
for c in message:
print(c)
else:
print(f"Último caractere: {c}. Ciclo concluído")
print("Execução do programa concluída")Neste exemplo, obtemos o seguinte resultado no console:
H e l l o Último caractere: o. Ciclo concluído Execução do programa concluída
É importante notar que o bloco else tem acesso a todas as variáveis definidas no laço for.
Laços aninhados
Um laço pode conter outro laço dentro de si. Veja o exemplo de uma tabela de multiplicação:
i = 1
j = 1
while i < 10:
while j < 10:
print(i * j, end="\t")
j += 1
print("\n")
j = 1
i += 1O laço externo while i < 10 será executado 9 vezes, até que a variável i seja igual a 10. Dentro desse laço, o laço interno while j < 10 também será executado 9 vezes, até que j seja igual a 10. Cada iteração do laço interno ocorre dentro de uma iteração do laço externo.
Durante cada iteração do laço interno, o produto de i e j será exibido no console. Após o laço interno ser concluído, j é redefinido para 1, i é incrementado em 1, e o laço externo prossegue para a próxima iteração. O laço interno será executado 81 vezes no total. O resultado será:
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Laços for aninhados também podem ser definidos da seguinte maneira:
for c1 in "ab":
for c2 in "cd":
print(f"{c1}{c2}")Neste caso, o laço externo percorre a string "ab" e atribui cada caractere à variável c1. O laço interno percorre a string "cd", atribuindo cada caractere à variável c2, e exibe a combinação de ambos os caracteres. O resultado será:
ac ad bc bd
Saída de laços: break e continue
Para controlar a execução de laços, podemos usar os operadores especiais break e continue. O operador break interrompe a execução do laço, enquanto o continue passa diretamente para a próxima iteração.
O operador break pode ser usado quando uma condição dentro do laço requer a interrupção imediata do laço. Por exemplo:
number = 0
while number < 5:
number += 1
if number == 3: # Se number for igual a 3, saímos do laço
break
print(f"number = {number}")Aqui, o laço while verifica a condição number < 5 e exibe o valor de number no console enquanto number for menor que 5. No entanto, se number for igual a 3, o operador break é acionado e o laço é interrompido. O resultado será:
number = 1 number = 2
Diferentemente de break, o operador continue interrompe apenas a iteração atual e passa para a próxima, sem finalizar o laço. Veja o exemplo modificado:
number = 0
while number < 5:
number += 1
if number == 3: # Se number for igual a 3, passamos para a próxima iteração
continue
print(f"number = {number}")Neste caso, quando number for igual a 3, as instruções após o continue não serão executadas. O resultado será:
number = 1 number = 2 number = 4 number = 5