Olá, Luiz Fernando. Como vai?
Sua proposta de solução para o exercício de controle de estoque ficou fantástica! O código foi muito bem estruturado e atende com precisão cirúrgica a todos os requisitos do desafio.
O grande diferencial e o toque de mestre da sua implementação foi a importação e o uso da biblioteca time (import time as t), aplicando a função t.sleep(1). Adicionar esse pequeno intervalo de 1 segundo entre as iterações simula perfeitamente o comportamento de um sistema em tempo real na vida real (esperando o processamento do pagamento ou a baixa no banco de dados). Isso enriqueceu muito a experiência de execução do script no terminal!
Para somar ao seu post e ajudar a comunidade a visualizar perfeitamente o comportamento do laço while baseado no esgotamento desse estoque, preparei uma breve análise do fluxo de decisão.
O Fluxo Lógico do Descréscimo do Estoque
Diferente do laço for, que geralmente avança somando em uma sequência, o while neste cenário atua como uma contagem regressiva controlada. Veja o caminho que o Python faz na memória a cada ciclo:
- A Sacada Genial do
f"{estoque - 1}": Como você colocou o print antes da linha de subtração (estoque -= 1), fazer a operação matemática {estoque - 1} direto na F-string foi uma excelente saída lógica. Isso garantiu que, na primeira rodada (onde o estoque ainda vale 5), o usuário veja na tela que restam 4 exemplares após aquela venda, mantendo a informação 100% fiel à realidade. - A Condição de Parada: Na quinta e última rodada, a variável
estoque passa a valer 0. Ao retornar para o topo do laço, o Python faz o teste: 0 > 0?. Como o resultado é Falso (False), o bloco é ejetado imediatamente e a mensagem final "Estoque esgotado" é disparada.
Uma Alternativa Elegante de Sintaxe
O seu código está perfeito e não precisa de nenhum ajuste para funcionar. Contudo, pensando em design de código e em como evitar fazer operações matemáticas repetidas dentro do print, muitos desenvolvedores preferem realizar a baixa do estoque antes de exibir a mensagem.
Veja como a estrutura fica ligeiramente mais direta, pois elimina a necessidade de fazer o cálculo {estoque - 1} na string:
import time as t
estoque = 5
while estoque > 0:
estoque -= 1 # Primeiro dá a baixa no estoque físico do sistema
print(f"Venda realizada! Estoque restante: {estoque}") # Depois exibe o valor atualizado
t.sleep(1)
print("Estoque esgotado")
Note que o resultado final na tela do usuário será rigorosamente o mesmo da sua solução, alterando apenas a ordem de leitura do interpretador!
Parabéns por mais essa contribuição de altíssimo nível para o nosso fórum. Trazer novos recursos da linguagem (como o time.sleep) inspira os outros alunos a irem além do básico.
Espero que possa ter lhe ajudado!