Laço dentro de laço
Para cada volta do laço de fora, o laço de dentro roda inteiro, do começo ao fim. É só isso, mas é fácil se perder: por isso o relógio.
Nesta lição0 de 3 vistas
O ponteiro das horas é o laço de fora; o dos minutos, o de dentro. Os minutos dão a volta inteira antes de a hora andar um passo.
| minuto 1 | minuto 2 | minuto 3 | minuto 4 | |
|---|---|---|---|---|
| hora 1 | ||||
| hora 2 | ||||
| hora 3 |
for hora in range(1, 4): # de forafor minuto in range(1, 5): # de dentroprint(hora, minuto)
Regra 1: o de dentro recomeça
A cada volta do laço de foraA variável do laço de dentro precisa voltar ao valor inicial dentro do laço de fora. É o erro número um. Compare as saídas:
i = 1while i <= 3:j = 1while j <= 3:print(i, j)j = j + 1i = i + 1
i = 1j = 1while i <= 3:while j <= 3:print(i, j)j = j + 1i = i + 1
No errado, depois da primeira volta de fora o j já vale 4. Na segunda volta, j <= 3 é falso logo de cara e o laço de dentro não roda mais.
Regra 2: o total é a multiplicação
Voltas de fora vezes voltas de dentroSe o de fora dá 3 voltas e o de dentro dá 4 a cada uma, o código de dentro roda 3 × 4 = 12 vezes. Isso ajuda a conferir: uma tabuada de 1 a 10 para os números de 1 a 10 imprime 100 linhas.
Quantas vezes o print roda?
Conte sem rodar: voltas de fora vezes voltas de dentro.
- cont = 0for i in range(3):for j in range(4):cont = cont + 1print(cont)
- cont = 0for i in range(1, 6):for j in range(1, 11):cont = cont + 1print(cont)
- cont = 0for i in range(1, 4):for j in range(1, i + 1):cont = cont + 1print(cont)
Regra 3: onde fica o print
decide o que aparece na telaO mesmo desenho de asteriscos com o print() (que pula linha) em três lugares:
for i in range(1, 4):for j in range(1, 4):print('*', end='')print()
for i in range(1, 4):for j in range(1, 4):print('*', end='')print()
for i in range(1, 4):for j in range(1, 4):print('*', end='')print()
Erros que mais aparecem na prova
5 errosZerar a variável de dentro fora do laço de fora
O laço de dentro só roda na primeira volta. O j = 1 (ou o contador de dentro) vai logo depois do while de fora.
Usar a mesma variável nos dois laços
Com i nos dois, o de dentro bagunça o de fora. Use nomes diferentes: i e j, linha e coluna.
Indentação do print
Um recuo a mais ou a menos muda tudo: dentro do de dentro, dentro do de fora ou depois dos dois.
Acumulador zerado no lugar errado
Se a soma é por linha, ela zera dentro do laço de fora. Se é do total, zera antes de tudo.
Achar que os laços andam juntos
Eles não andam lado a lado: o de dentro dá a volta inteira antes de o de fora andar um passo.