1
resposta

Minhas soluções para os exercícios do livro

livro.py

class Livro:
    livros = []
    def __init__(self, titulo, autor, ano_publicacao):
        self._titulo = titulo
        self._autor = autor
        self._ano_publicacao = ano_publicacao
        self._disponivel = True
    
        Livro.livros.append(self)

    def __str__(self):
        return f"Livro: '{self._titulo}' por {self._autor} (Publicado em: {self._ano_publicacao})"
    
    def emprestar(self):
        if not self._disponivel:
            print(f"Erro no empréstimo, o livro {self._titulo} está indisponível.")
            return
        print(f"Livro {self._titulo} emprestado!")
        self._disponivel = False
    
    def devolver(self):
        if self._disponivel:
            print(f"Erro na entrega, o livro {self._titulo} já foi devolvido.")
            return
        print(f"Livro {self._titulo} devolvido!")
        self._disponivel = True
    
    @staticmethod
    def verificar_disponibilidade(ano):
        disponiveis_no_ano = [livro for livro in Livro.livros if livro._ano_publicacao == ano and livro._disponivel]
        return disponiveis_no_ano

if __name__ == "__main__":
    livro1 = Livro("1984", "George Orwell", 1949)
    livro2 = Livro("O Senhor dos Anéis", "J.R.R. Tolkien", 1954)

    print(livro1)
    print(livro2)
    livro1.emprestar()
    print(f"'{livro1._titulo}' disponível? {'Sim' if livro1._disponivel else 'Não'}")
    disponiveis_1954 = Livro.verificar_disponibilidade(1954)
    print("Livros disponíveis em 1954:")
    for livro in disponiveis_1954:
        print(livro)

biblioteca.py

from livro import Livro
# Criando livros
livro1 = Livro("1984", "George Orwell", 1949)
livro2 = Livro("O Senhor dos Anéis", "J.R.R. Tolkien", 1954)
# Apresentando livros
print(livro1)
print(livro2)
# Antes do empréstimo
print(f"'{livro1._titulo}' disponível? {'Sim' if livro1._disponivel else 'Não'}")
# Emprestando livro
livro1.emprestar()
# Após o empréstimo
print(f"'{livro1._titulo}' disponível? {'Sim' if livro1._disponivel else 'Não'}")
# Obtendo a lista de livros publicados em 1954
disponiveis_1954 = Livro.verificar_disponibilidade(1954)
# Apresentando a lista
print("Livros disponíveis publicados em 1954:")
for livro in disponiveis_1954:
    print(livro)

main.py

from livro import Livro

livro1 = Livro("1984", "George Orwell", 1949)
livro2 = Livro("O Senhor dos Anéis", "J.R.R. Tolkien", 1954)
print(livro1)
print(livro2)
1 resposta

Olá, Gabriel, como vai?

O seu código demonstra uma excelente compreensão dos conceitos de Orientação a Objetos em Python, como o uso de métodos especiais, atributos protegidos e métodos estáticos. A implementação da lógica de negócio para empréstimo e devolução, com as devidas verificações de estado, está correta e bem estruturada conforme os requisitos propostos no exercício. É muito positivo observar a organização dos arquivos separando as responsabilidades de cada módulo, o que facilita a manutenção e o entendimento do projeto.

Parabéns pelo empenho e por compartilhar a sua solução com a comunidade. Continue praticando e postando os seus progressos. O fórum está à disposição.

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