Nested Loops
Nested Loops
Nested loops baseia-se no que aprendemos sobre loops for e loops while no exercício anterior. Você pode querer revisar a página For-loop e While-loop antes de prosseguirmos.
Nesta seção, usaremos um loop dentro de outro, que é chamado de Nested loop (loop aninhado).
Nested while loop
#Este é o formato do nested while loop
while expressãoA:
while expressãoB:
declaração(B)
declaração(A)
No loop while
acima, quando expressãoA produz Falso
, pularemos o bloco inteiro. Quando a expressãoA produzir Verdadeiro
, iremos para o loop while interno e verificaremos a expressãoB. Se a expressãoB produzir Verdadeiro
, a declaração (B) será executada. Se a expressãoB produzir Falso
, pularemos o loop while interno e iremos para a declaração (A).
Se expressãoA produzir Falso
, nenhuma das instruções será executada; declaração (A) e declaração (B) serão executadas se e somente se expressãoA e expressãoB produzirem Verdadeiro
.
Vamos dar uma olhada em um exemplo de loop while aninhado.
#Este é o exemplo do nested while loop.
x = 0
y = 0
#Abaixo está nosso loop externo
while x <3:
#Imprime se "x < 3" produz Verdadeiro
print("Passando pelo loop while externo, x é", x, "y é", y, sep = " ")
#Abaixo está nosso loop interno
while y < 5:
#Imprime se "y < 5" produz Verdadeiro
print("Passando pelo loop while interno, x é", x, "y é", y, sep = " ")
y + = 1
#Os códigos abaixo são executados após o término de cada loop interno.
x + = 1
y = 0
Esta é a saída do nosso exemplo.
Passando pelo loop while externo, x é 0 y é 0
Passando pelo loop while interno, x é 0 y é 0
Passando pelo loop while interno, x é 0 y é 1
Passando pelo loop while interno, x é 0 y é 2
Passando pelo loop while interno, x é 0 y é 3
Passando pelo loop while interno, x é 0 y é 4
Passando pelo loop while externo, x é 1 y é 0
Passando pelo loop while interno, x é 1 y é 0
Passando pelo loop while interno, x é 1 y é 1
Passando pelo loop while interno, x é 1 y é 2
Passando pelo loop while interno, x é 1 y é 3
Passando pelo loop while interno, x é 1 y é 4
Passando pelo loop while externo, x é 2 y é 0
Passando pelo loop while interno, x é 2 y é 0
Passando pelo loop while interno, x é 2 y é 1
Passando pelo loop while interno, x é 2 y é 2
Passando pelo loop while interno, x é 2 y é 3
Passando pelo loop while interno, x é 2 y é 4
Perguntas
Você pode tentar descobrir como os valores de x e y mudam e explicar por quê?
(Dica: quantas vezes passamos pelo loop externo e pelo loop interno separadamente?)
Desafio Um
Tente alterar os números inteiros no nested while loop e prever as saídas. Em seguida, execute o código e observe as saídas. Eles correspondem às suas previsões?
Nested for loop
#Este é o formato do loop for aninhado
for variávelA in intervaloA:
for variávelB in intervaloB:
declarações(B)
declarações(A)
No loop for
acima, quando a variávelA não estiver no intervaloA(rangeA), pularemos o bloco inteiro. Quando a variávelA estiver no intervaloA, iremos para o loop for interno. Se a variávelB estiver no intervaloB, a instrução (B) será executada. Se a variávelB(rangeB) não estiver no intervaloB, pularemos o loop for interno e iremos para o loop externo.
Se a variávelA não estiver no intervaloA, nenhuma das instruções será executada; declaração (B) e declaração (A) serão executadas se e somente se a variávelA estiver no intervaloA e a variávelB estiver no intervaloB.
Vejamos um exemplo.
#Este é o exemplo de loop for aninhado
#Abaixo está nosso loop externo
for n in range(0, 3):
#Abaixo está nosso loop interno
for m in range(0, 3):
#Imprima se m estiver no intervalo(0, 3)
print("(", n, ",", m, ")", end = " ")
#Imprima se n estiver no intervalo(0, 3)
print("")
Esta é a saída do nosso exemplo.
( 0 , 0 ) ( 0 , 1 ) ( 0 , 2 )
( 1 , 0 ) ( 1 , 1 ) ( 1 , 2 )
( 2 , 0 ) ( 2 , 1 ) ( 2 , 2 )
Perguntas
Você pode tentar explicar o padrão de impressão?
(Dica: quantas vezes passamos pelo loop externo e pelo loop interno separadamente?)
Desafio Dois
Tente alterar os números inteiros no loop for aninhado e prever as saídas. Em seguida, execute o código e observe as saídas. Eles correspondem às suas previsões?
Perguntas
Tente inicializar n e m. Isso mudará nossa saída dos nested loops e por quê? Em seguida, execute o código e observe as saídas. Eles correspondem às suas previsões?
Perguntas
Ao final desta seção, vamos pensar nas seguintes questões: 1. Por que a inicialização não altera a saída?
(Dica: O que a variável no loop for representa?)
2. O que devemos fazer se quisermos começar a imprimir a partir de (1, 1)?
(Dica: O que aconteceria se alterássemos os intervalos?)
Desafio Três
Usando o nested loop for
ou o loop while
, tente imprimir o seguinte padrão
```
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
```
Dica: para imprimir sem uma nova linha, você pode usar print(x, end=" ")
. E para forçar uma nova linha você pode usar print()
.