Olá, Vanessa. Como vai?
Parabéns por mais um excelente resultado! Sua implementação do laço while para simular o controle de estoque do Buscante ficou fantástica e atende perfeitamente a todos os requisitos do desafio.
O uso do while estoque_livro > 0: foi a escolha ideal aqui. Diferente do laço for, que geralmente usamos quando sabemos de antemão o número exato de elementos que vamos percorrer, o while baseia-se em uma condição lógica, repetindo o bloco de código enquanto essa condição for estritamente verdadeira.
Para agregar valor ao seu post e ajudar a comunidade do fórum a compreender a dinâmica de atualização de variáveis dentro de um laço de repetição condicional, vamos analisar o comportamento do seu código:
- A Estratégia de Exibição: No seu comando
print(), você utilizou a expressão {estoque_livro - 1} dentro da f-string. Essa foi uma saída inteligente para mostrar ao usuário o estoque que restaria após a venda ser concluída, antes mesmo de aplicar a subtração definitiva na linha de baixo. - O Decremento (
-= 1): A linha estoque_livro -= 1 é a parte mais crítica do programa. Ela atualiza o estado do estoque a cada volta do laço. Sem essa linha, o valor de estoque_livro permaneceria eternamente em 5, a condição 5 > 0 seria sempre verdadeira e o programa entraria em um loop infinito, travando o sistema. - A Saída do Laço: Assim que a variável atinge o valor
0, o Python volta ao topo e testa a condição: 0 > 0? Como isso é falso, o laço é encerrado imediatamente e o interpretador executa a próxima linha fora do bloco de indentação, exibindo corretamente a mensagem "Estoque esgotado".
Uma Abordagem Alternativa de Escrita
O seu código está ótimo e correto, mas na construção de sistemas comerciais de controle de estoque, é muito comum invertermos a ordem das ações dentro do bloco: primeiro subtraímos o item vendido do banco de dados (ou da variável) e depois exibimos a mensagem com o novo valor atualizado.
Veja como o código ficaria estruturado dessa outra forma:
estoque_livro = 5
while estoque_livro > 0:
estoque_livro -= 1 # Primeiro atualiza o estoque real
print(f"Venda realizada! Estoque restante: {estoque_livro}") # Depois exibe o valor direto
print("Estoque esgotado")
Ambas as lógicas chegam ao mesmo resultado visual que você obteve no console, mudando apenas o momento em que a operação matemática acontece na memória do computador.
Muito obrigado por compartilhar mais uma atividade prática resolvida com tanta qualidade!
Espero que possa ter lhe ajudado!