Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] O que é um loop infinito?

contador = 0

while contador < 10:
    print("Processando dados...")
    contador += 1 # o bug esta na falta de um contador pra controlar a condição do loop, solução incrementar o contador
2 respostas
solução!

Olá, Marcelo. Como vai?

O seu código e o seu diagnóstico estão perfeitos! Você identificou e corrigiu o calcanhar de Aquiles do laço while: a condição de parada.

Se a linha contador += 1 (o incremento) fosse esquecida, o contador permaneceria eternamente valendo 0. Como $0 < 10$ é uma verdade absoluta que nunca mudaria, o Python entraria em um estado de execução perpétua, imprimindo "Processando dados..." até estourar a memória ou o usuário forçar a interrupção do programa.

O que acontece na memória do computador?

Para visualizar de forma simples, o laço while funciona como um portão com uma sentinela. Ele faz uma pergunta antes de cada rodada.

Com o seu código corrigido, o fluxo na memória ganha um fim claro:

  • Rodada 1: contador é 0. $0 < 10$? Sim. Roda o bloco. contador vira 1.
  • Rodada 2: contador é 1. $1 < 10$? Sim. Roda o bloco. contador vira 2.
  • ...
  • Rodada 10: contador é 9. $9 < 10$? Sim. Roda o bloco. contador vira 10.
  • Rodada 11: contador é 10. $10 < 10$? Não! O laço quebra e o programa segue em frente.

Uma dica de ouro: Cuidado com os loops infinitos "propositais"

No mercado, existem situações onde nós queremos criar um loop infinito de propósito. Por exemplo, o sistema de um caixa eletrônico de banco ou o menu de um jogo de videogame precisam ficar rodando para sempre até que o usuário decida clicar em "Sair".

Nesses casos, a boa prática é usar o while True combinado com a instrução break que você já praticou em outros exercícios. Veja uma estrutura muito comum em sistemas reais:

while True:
    comando = input("Digite 'sair' para encerrar o sistema: ")
    
    if comando.strip().lower() == "sair":
        print("Encerrando o programa com segurança...")
        break # É o break que garante que o loop infinito não trave a máquina
        
    print("Executando tarefa do sistema...")

Parabéns por mais essa excelente postagem de correção no fórum, Marcelo! Entender a mecânica interna do while evita muitos travamentos de servidores na vida real.

Espero que possa ter lhe ajudado!

Eu aprendi o loop infinito para entradas de menu em CLI e também loop de jogos exatamente como falou.