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()