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!

1
resposta

Controle de estoque

Olá pessoal,

Segue resultado referente ao exercício:

Você está desenvolvendo um sistema de controle de estoque para o Buscante. Um dos requisitos é verificar a quantidade de exemplares de um livro em estoque e continuar vendendo até que o estoque se esgote. Sempre que uma venda é realizada, o sistema deve informar o usuário e atualizar a quantidade disponível.

Crie um programa que simule as vendas de um livro com o estoque inicial de 5 exemplares. O programa deve exibir a mensagem "Venda realizada! Estoque restante: quantidade" a cada venda e, ao final, exibir a mensagem "Estoque esgotado".
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Obrigada!

1 resposta

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!