1
resposta

[Sugestão] Controle de estoque

Para fazer essa questão eu utilizei a lista da questão passada. Fiz algumas coisas a mais pq fiquei meio animado kkkk. Poderiam me mandar sugestões de como melhorar a lógica ou deixar o código mais resumido?

import os

livros = ["1984", "Dom Casmurro", "O Pequeno Príncipe", "O Hobbit", "Orgulho e Preconceito"]

def limpar_tela():
    os.system('cls')

def voltar_para_o_menu():
    input('\nDigite enter para voltar para o menu princípal')
    main()

def comprar():
    limpar_tela()
    if len(livros) == 0:
        print('Estoque esgotado')

    else:
        escolha = input('Escreva o nome do livro que deseja comprar: ')
        tinha_o_livro = False

        for i in livros:
            if escolha == i:
                livros.remove(escolha)
                print(f'Você comprou o livro: {i}\nEstoque restante: {len(livros)}')
                tinha_o_livro = True
                break
        
        if tinha_o_livro == False:
            print(f'O Livro {escolha} que você queria comprar não está no nosso sistema\n')

    voltar_para_o_menu()

def visualizar():
    limpar_tela()
    disponibilidade = 'indisponíveis' if len(livros) == 0 else 'disponíveis'
    print(f'Livros {disponibilidade}\n')
    for i in livros:
        print(i)

    voltar_para_o_menu()

def encerrar_programa():
    limpar_tela()
    print('\nFinalizando programa...\n')

def menu():
    limpar_tela()
    print('''1 - Comprar
2 - Ver a prateleira
3 - Sair
          
          ''')
    
    try:
        escolha = int(input('Escolha uma opção: '))

        if escolha == 1:
            comprar()
        elif escolha == 2:
            visualizar()
        elif escolha == 3:
            encerrar_programa()
        else:
            print('A opção selecionada não existe.')
    except ValueError:
        print('A opção selecionada não existe.')
        voltar_para_o_menu()
        main()


def main():
    limpar_tela()
    menu()

if __name__ == '__main__':
    main()
1 resposta

Olá, Pedro! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de funções para organizar o fluxo do programa, utilizou muito bem condicionais para tratar as opções do menu e ainda compreendeu a importância de validar entradas e manter o controle de estoque.

Uma dica interessante para o futuro é deixar o código mais enxuto eliminando repetições e simplificando a lógica. Veja uma versão mais resumida:

import os

livros = ["1984", "Dom Casmurro", "O Pequeno Príncipe", "O Hobbit", "Orgulho e Preconceito"]

def limpar_tela():
    os.system('cls')

def voltar_para_o_menu():
    input('\nDigite enter para voltar para o menu principal')

def comprar():
    limpar_tela()
    if not livros:
        print('Estoque esgotado')
    else:
        escolha = input('Escreva o nome do livro que deseja comprar: ')
        if escolha in livros:
            livros.remove(escolha)
            print(f'Você comprou o livro: {escolha}\nEstoque restante: {len(livros)}')
        else:
            print(f'O livro "{escolha}" não está no nosso sistema\n')
    voltar_para_o_menu()

def visualizar():
    limpar_tela()
    print(f'Livros {"indisponíveis" if not livros else "disponíveis"}\n')
    print("\n".join(livros) if livros else "Nenhum livro disponível")
    voltar_para_o_menu()

def encerrar_programa():
    limpar_tela()
    print('\nFinalizando programa...\n')
    exit()

def menu():
    while True:
        limpar_tela()
        print('''1 - Comprar
2 - Ver a prateleira
3 - Sair
        ''')
        try:
            escolha = int(input('Escolha uma opção: '))
            if escolha == 1:
                comprar()
            elif escolha == 2:
                visualizar()
            elif escolha == 3:
                encerrar_programa()
                break
            else:
                print('Opção inválida.')
                voltar_para_o_menu()
        except ValueError:
            print('Digite apenas números válidos.')
            voltar_para_o_menu()

if __name__ == '__main__':
    menu()

Isso faz com que o código fique mais limpo! Usando verificações diretas (if not livros), eliminando variáveis auxiliares desnecessárias e centralizando o loop principal no menu().

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!