0
respostas

[Solução] Controle de estoque

def busca_quantidade_livro_por_nome(nome_livro: str, livros: dict[str, int]) -> int:
    if not nome_livro:
        raise ValueError('"nome_livros" está vazio')
    if not livros:
        raise ValueError('"livros" está vazio')
    
    nome_livro = nome_livro.strip().lower()

    for key, value in livros.items():
        if key.strip().lower() == nome_livro:
            return value
    
    raise KeyError('Erro ao recuperar quantidade de livros')

def subtrai_livro(nome_livro: str, quantidade: int, livros: dict[str, int]) -> dict[str, int]:
    if not isinstance(quantidade, int):
        raise TypeError('"quantidade" não é do tipo [int]')
    if not quantidade >= 0:
        raise ValueError('"quantidade" é menor que zero')
    
    nome_livro = nome_livro.strip().lower()
    key_real: str = ''
    resultado: int = 0

    for key in livros:
        if key.strip().lower() == nome_livro:
            key_real = key
            break
    
    if not key_real:
        raise KeyError(f'Não foi possível encontrar o livro "{nome_livro}".')

    if key_real:
        resultado = livros[key_real] - quantidade
        if not resultado >= 0:
            raise ValueError('Operação inconsistente')
        livros[key_real] = resultado
    
    return livros

def main() -> None:
    nome_livro: str = 'O Hobbit'
    livros: dict[str, int] = {
        'O Hobbit': 5,
        'O Senhor dos Anéis: As duas torres': 10,
        'Shell Linux: Do aprendiz ao administrador': 15,
        'Aprendendo Shell Linux': 20
    }
    try:
        quantidade_livro: int = busca_quantidade_livro_por_nome(nome_livro, livros)
    except KeyError as e:
        print(f'{e}')
        return
    while quantidade_livro > 0 :
        try:
            subtrai_livro(nome_livro, 1, livros)
        except ValueError as e:
            print(f"Erro na venda: {e}")
            break
        except KeyError as e:
            print(f"Erro fatal: {e}")
            break
        
        quantidade_livro = busca_quantidade_livro_por_nome(nome_livro, livros)
        print(f'Venda realizada! Estoque restante: {quantidade_livro}')
    else:
        print('Estoque esgotado')


if __name__ == '__main__':
    main()

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora