Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida - O que é um loop infinito?

Estou com dúvida no seguinte caso:
Quando colocamos o código assim, ele processa de 0 a 9;

contador = 0

while contador < 10:
print(f'Processando dados ...{contador}')
contador += 1

Processando dados ...0
Processando dados ...1
Processando dados ...2
Processando dados ...3
Processando dados ...4
Processando dados ...5
Processando dados ...6
Processando dados ...7
Processando dados ...8
Processando dados ...9

Porém, quando alteramos a linha do contador, para linha acima do print, ele processa de 1 a 10;

contador = 0

while contador < 10:
contador += 1
print(f'Processando dados ...{contador}')

Processando dados ...1
Processando dados ...2
Processando dados ...3
Processando dados ...4
Processando dados ...5
Processando dados ...6
Processando dados ...7
Processando dados ...8
Processando dados ...9
Processando dados ...10

Um help por favor, não consegui imaginar a lógica

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
3 respostas

Oi, Flávio! Tudo bem?

A diferença acontece por causa da ordem em que o Python executa as linhas dentro do laço while.
Vamos entender passo a passo:

Primeiro caso:

contador = 0

while contador < 10:
    print(f'Processando dados ...{contador}')
    contador += 1

Aqui o Python primeiro imprime o valor atual do contador, e só depois soma +1.
Então o laço começa com contador = 0, imprime 0, depois vira 1, depois 2... e para quando chega a 10, porque o while contador < 10 não é mais verdadeiro.
Por isso o resultado vai de 0 a 9.

Segundo caso:

contador = 0

while contador < 10:
    contador += 1
    print(f'Processando dados ...{contador}')

Nesse caso, o Python soma primeiro (contador += 1) e só depois imprime.
Ou seja, logo na primeira volta, o contador já passa de 0 para 1 — e por isso ele imprime de 1 até 10.
Quando o contador chega em 10, o while contador < 10 ainda é verdadeiro (porque ele soma antes de testar de novo), então ele ainda imprime o 10 antes de parar.

Resumindo:
A diferença está na ordem das ações dentro do laço:

Se você imprime antes de somar, começa do 0.

Se você soma antes de imprimir, começa do 1 (e vai até 10).

Olá, Flavio!
Vamos entender a lógica passo a passo:

Caso 1 — incremento depois do print

contador = 0

while contador < 10:
    print(f'Processando dados ...{contador}')
    contador += 1

Aqui, a execução acontece nesta ordem:
Começa com contador = 0
Verifica se contador < 10 - Verdadeiro
Imprime Processando dados ...0
Incrementa (contador += 1) - contador passa a ser 1
Volta para o while e repete.
Resultado: o primeiro valor impresso é 0, o último é 9 (porque quando contador chega a 10, a condição contador < 10 se torna falsa, e o laço para).

Caso 2 — incremento antes do print

contador = 0

while contador < 10:
    contador += 1
    print(f'Processando dados ...{contador}')

Agora, a ordem muda:
Começa com contador = 0
Verifica se contador < 10 - Verdadeiro
Incrementa primeiro - contador passa a ser 1
Imprime Processando dados ...1
Volta para o while e repete.
O detalhe está no último ciclo: quando contador vale 9, ele ainda satisfaz a condição 9 < 10.
Entra no laço, incrementa - contador vira 10.
Depois imprime Processando dados ...10.
Só então, ao voltar ao topo, contador < 10 é falso, e o laço para.
Resultado: o primeiro valor impresso é 1, o último é 10.

solução!

Se quiser que ele vá de 1 a 10 mas ainda comece com 0 no contador, você pode ajustar a condição do while:

contador = 0

while contador < 10:
    contador += 1
    print(f'Processando dados ...{contador}')

Ou, para imprimir de 0 a 9, mas escrever o incremento antes, basta ajustar a condição para while contador < 9: Assim o último valor impresso será 9.