Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Está conforme a atividade?

biblioteca = []
categoria = []
quantidade = []

print("Sistema de controle de estoque - Buscante")

criar_categoria = input("Deseja cadastrar uma categoria de livros? (s/n) ").lower()
if criar_categoria == "s":
    digite_categoria = input("Digite o nome da categoria de livros: ")
    categoria.append(digite_categoria)
    print("Categoria cadastrada com sucesso: {}".format(digite_categoria))
else:
    print("Nenhuma categoria de livros foi cadastrada.")

criar_produto = input("Deseja cadastrar um livro? (s/n) ").lower()
if criar_produto == "s":
    for categoria_produto in categoria:
        biblioteca.append(
            input("Digite o nome do livro da categoria {}: ".format(categoria_produto))
        )
else:
    print("Nenhum livro foi cadastrado no sistema.")

criar_quantidade = input("Deseja informar a quantidade de exemplares? (s/n) ").lower()
if criar_quantidade == "s":
    for produto_quantidade in biblioteca:
        quantidade.append(
            int(input("Informe a quantidade de exemplares disponíveis do livro {}: ".format(produto_quantidade)))
        )
else:
    print("Quantidade de exemplares não informada.")

# Existem duas formas de verificar a quantidade no estoque

# Forma 1:
# Usando if, a verificação acontece apenas uma vez.
# Serve para checar se ainda existe quantidade disponível.

# for i in quantidade:
#     if i > 0:
#         i -= 1
#         print("Quantidade disponível {}".format(i))
#     else:
#         print("Quantidade indisponível")


# Forma 2:
# Usando while, a quantidade é reduzida de 1 em 1.
# Cada repetição representa uma venda.
# O laço continua até o estoque zerar.

for i in quantidade:
    while i > 0:
        print("Quantidade disponível {}".format(i))
        i -= 1
    else:
        print("Quantidade indisponível")

print("\nLista completa do estoque:\n")


# Teste de sub_listas 
# for i in range(len(biblioteca)):
#     print("| Categoria: {} | Livro: {} | Quantidade: {} |"
#           .format(categoria[i], biblioteca[i], quantidade[i]))

Fiz mais coisas do que o exercício pediu porque me empolguei um pouco rsrs, porém gostaria de confirmar se o código está de acordo com a atividade. Minha principal dúvida está no segundo formato, pois não compreendi totalmente como o for percorre a lista e como o while atua como verificador. O PyCharm apresentou esse formato como uma recomendação (uma forma que também pode ser utilizada), em que o for é responsável por percorrer os dados, enquanto o while controla a repetição das vendas até que a quantidade se esgote. Gostaria de entender melhor essa separação de responsabilidades, pois não entendi completamente como essa parte funciona.

1 resposta
solução!

Oii, Samuel.

Caramba, que legal que você foi além do pedido! Essa empolgação de "enfeitar" o código e criar um sistema de cadastro completo é o que mais faz a gente aprender no começo. Parabéns pela iniciativa!

Sobre sua dúvida, ela é muito pertinente. Misturar for e while (aninhamento de laços) buga a mente de todo mundo no início. Vamos desenrolar isso de um jeito simples.

Imagine que você é um funcionário de uma livraria:

  1. O for (O gerente de seções):
    A lista quantidade tem vários números (ex: [5, 3, 10]).
    O comando for i in quantidade: diz: "Pegue o primeiro número da lista e chame de i. Depois que terminar tudo com ele, pegue o segundo, e assim por diante."
  • O for é responsável por trocar de livro. Ele percorre a prateleira.
  1. O while (O vendedor):
    Agora que o for definiu que i vale, por exemplo, 5 (o primeiro livro), o while i > 0: entra em ação.
    Ele diz: "Enquanto esse número específico (i) for maior que zero, continue repetindo essas ações (vender/imprimir)."
  • O while é responsável por esgotar o estoque daquele livro específico que o for entregou para ele.

Visualizando o fluxo

Se sua lista quantidade for [2, 3], o computador faz isso:

  1. for começa: Pega o primeiro valor. Agora i vale 2.
  2. while acorda: 2 é maior que 0? Sim.
  • Imprime "Quantidade disponível 2".
  • Diminui 1 (i vira 1).
  1. while verifica: 1 é maior que 0? Sim.
  • Imprime "Quantidade disponível 1".
  • Diminui 1 (i vira 0).
  1. while verifica: 0 é maior que 0? Não. O while para.
  2. for volta: Tem mais itens na lista? Sim. Pega o próximo. Agora i vale 3.
  • (O processo do while recomeça tudo de novo para o número 3).

Dica de ouro sobre o enunciado

Seu código está logicamente correto para o que você criou! Mas, para bater certinho com o gabarito do exercício, note que o exercício pedia:

"Venda realizada! Estoque restante: "

No seu código:

print("Quantidade disponível {}".format(i)) # Você imprime ANTES de vender
i -= 1 # Você vende (subtrai) DEPOIS

Isso vai imprimir "Quantidade disponível 5", depois 4... até 1.

O gabarito sugere subtrair primeiro e mostrar quanto sobrou:

while i > 0:
    i -= 1 # Vende primeiro
    print(f"Venda realizada! Estoque restante: {i}") # Mostra quanto sobrou (4, 3... 0)

Mas isso é detalhe de regra de negócio. Pra fins de aprendizado de lógica, o que você fez está ótimo!

Continue explorando assim, Samuel. Se tiver mais dúvidas sobre como esses laços conversam, é só chamar.

Bons estudos!

<div style="padding: 5px;"></div>
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!