1
resposta

[Projeto] Exercício feito

Olá. Tudo bem?

Segue abaixo os exercícios feitos:

modelos/livros.py

# 1. Crie uma classe chamada Livro com um construtor que aceita os parâmetros titulo, autor e ano_publicacao. Inicie um atributo chamado disponivel como True por padrão.
class Livro:
    livros = []

    def __init__(self, titulo, autor, ano_publicacao):
        self.titulo = titulo
        self.autor = autor
        self.ano_publicacao = int(ano_publicacao)
        self._disponivel = True
        Livro.livros.append(self)

# 2. Na classe Livro, adicione um método especial str que retorna uma mensagem formatada com o título, autor e ano de publicação do livro. Crie duas instâncias da classe Livro e imprima essas instâncias.
    def __str__(self):
        return f'{self.titulo} | {self.autor} | {self.ano_publicacao} | {self.disponivel}'
    
# 3. Adicione um método de instância chamado emprestar à classe Livro que define o atributo disponivel como False. Crie uma instância da classe, chame o método emprestar e imprima se o livro está disponível ou não.
    @classmethod
    def listar_livros(cls):
        print(f'{'Título'.ljust(25)} | {'Autor'.ljust(25)} | {'Ano de publicação'.ljust(25)} | {'Disponibilidade'}')
        for livro in cls.livros:
            print(f'{livro.titulo.ljust(25)} | {livro.autor.ljust(25)} | {str(livro.ano_publicacao).ljust(25)} | {livro.disponivel}')

    @property
    def disponivel(self):
        return '☐' if self._disponivel else '☒'

    def emprestar_livro(self):
        self._disponivel = False

# 4. Adicione um método estático chamado verificar_disponibilidade à classe Livro que recebe um ano como parâmetro e retorna uma lista dos livros disponíveis publicados nesse ano.
    @staticmethod
    def verificar_disponibilidade(ano):
        livros_disponiveis = []
        
        for livro in Livro.livros:
            if livro.ano_publicacao == ano and livro._disponivel:
                livros_disponiveis.append(livro)
        
        return livros_disponiveis
    
#imprimindo duas instâncias conforme exercício 2
livro1 = Livro('titulo1', 'autor1', 2024)
livro2 = Livro('titulo2', 'autor2', 2023)
print(livro1)
print(livro2)

#Chamando o metodo emprestar_livro e imprimindo livro para ver se está disponível conforme exercício 4
Livro.emprestar_livro(livro1)
Livro.listar_livros()

modelos/biblioteca.py

# 5. Crie um arquivo chamado biblioteca.py e importe a classe Livro neste arquivo.
from livros import Livro

# 6. No arquivo biblioteca.py, empreste o livro chamando o método emprestar e imprima se o livro está disponível ou não após o empréstimo.
livro3 = Livro('titulo3', 'autor3', 2024)
livro4 = Livro('titulo4', 'autor4', 2023)

Livro.emprestar_livro(livro4)

Livro.listar_livros()


# 7) No arquivo biblioteca.py, utilize o método estático verificar_disponibilidade para obter a lista de livros disponíveis publicados em um ano específico.
ano_especifico = 2023
livros_disponiveis = Livro.verificar_disponibilidade(ano_especifico)
print(f"\nLivros disponíveis em {ano_especifico}:")
for livro in livros_disponiveis:
    print(livro)

main.py

# 8. Crie um arquivo chamado main.py, importe a classe Livro e, no arquivo main.py, instancie dois objetos da classe Livro e exiba a mensagem formatada utilizando o método str.

from modelos.livros import Livro

livro5 = Livro('titulo5', 'autor5', 2023)
livro6 = Livro('titulo6', 'autor6', 2024)

print(livro5)
print(livro6)
1 resposta

Olá, Roberto! Tudo bem?

Seu código está ótimo - apresenta boa estrutura e endentação correta. Parabéns! Isso é super importante para que a leitura seja de fácil entendimento.

Mas tenho um adendo, para o seguinte trecho de código:

print(f'{'Título'.ljust(25)} | {'Autor'.ljust(25)} | {'Ano de publicação'.ljust(25)} | {'Disponibilidade'}')

Nele você está utilizando uma ' ' aspas simples para delimitar todo o conteúdo do print, mas também está usando as aspas simples para delimitar as strings dentro das chaves { }. Isso pode acabar gerando conflitos no seu código, logo, o recomendado é que fique da seguinte forma:

print(f'{"Título".ljust(25)} | {"Autor".ljust(25)} | {"Ano de publicação".ljust(25)} | {"Disponibilidade"}')

Continue praticando e aplicando seus conhecimentos.

Abraços,