Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Praticando exercicios

Olá, não tenho certeza se criei as pastas corretamente...se main era para ser fora da pasta modelos e biblioteca.py era para ser dentro da pasta modelos

Classe Livro

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'{self._titulo} | {self._autor} | {self._ano_publicacao}'
    
    @classmethod
    def listar_livros(cls):
        print(f'{'Nome do livro'.ljust(25)} | {'Nome do autor'.ljust(25)} | {'Ano'}')
        for livros in cls.livros:
            print(f'{livros._titulo.ljust(25)} | {livros._autor.ljust(25)} | {livros._ano_publicacao}')


    def emprestar(self):
        self._disponivel = False

    @staticmethod
    def verificar_disponibilidade(ano):
        livros_disponiveis = [livro for livro in Livro.livros if livro._ano_publicacao == ano and livro._disponivel]

        if livros_disponiveis:
            livros_disponiveis_str = ", ".join(livro.__str__() for livro in livros_disponiveis)
        else:
            livros_disponiveis_str = "Nenhum livro disponível"

        return livros_disponiveis_str
    
print()
livro1 = Livro('O código Da Vinci', 'C. S. Lewis', 1950)
livro2 = Livro('O Alquimista', 'Paulo Coelho', 1988)
print(livro1)
print(livro2)
print()
livro3 = Livro('O sol é para todos', 'Harper Lee', 1960)
print(livro3)
print(f'Antes de emprestar: Livro disponível? {livro3._disponivel}')
livro3.emprestar()
print(f'Depois de emprestar: Livro disponível? {livro3._disponivel}')
print()
Livro.livros = [livro1, livro2, livro3]  # Adicionando os livros à lista de livros

biblioteca.py

from modelos.livros import Livro

livro_novo = Livro('Titulo livro', 'Autor livro', 1991)
livro_velho = Livro('Titulo velho', 'Autor velho', 1876)
livrooo = Livro('title', 'autor', 1876)
print()
print(livro_novo)
print(livro_velho)
print()
print(f'Antes de emprestar o livro (biblioteca): livro disponivel? {livro_novo._disponivel}')
livro_novo.emprestar()
print(f'Depos de emprestar o livro (biblioteca): livro disponivel? {livro_novo._disponivel}')
print()
ano_livro = 1876
livro_disponivel_pelo_ano = Livro.verificar_disponibilidade(ano_livro)
print(f'Livros disponiveis em {ano_livro}: {livro_disponivel_pelo_ano}')


def main():
    Livro.listar_livros()
    

if __name__ == '__main__':
    main()

modelos/main.py

from livros import Livro

livro_melhor_do_mundo = Livro('Melhor livro do mundo', 'Melhor autor do mundo', 1500)
livro_pior_do_mundo = Livro('Pior livro do mundo', 'Pior autor do mundo ', 1501)

print(livro_melhor_do_mundo)
print(livro_pior_do_mundo)
print()
def main():
    Livro.listar_livros()
    

if __name__ == '__main__':
    main()
1 resposta
solução!

Bom dia Douglas! Tudo bem com você?

Obrigado por compartilhar sua resolução com a comunidade Alura. Quando deixamos os arquivos "biblioteca.py" e "livros.py" dentro da pasta "modelos", temos uma melhor organização do projeto e fica ainda mais intuitivo para quem está analisando o projeto, pois dessa forma, fica claro que os arquivo "biblioteca.py" e "livros.py" possuem códigos moldes para um determinado objeto.

Caso opte por modificar os locais onde os arquivos estão, será necessário modificar a importação da classe "Livro" nos arquivos "biblioteca.py" e "main.py".

No arquivo "biblioteca.py" a importação deve ficar como apresentada abaixo, sem informar o nome da pasta "modelos" já que os dois arquivos estão dentro dessa pasta:

from livros import Livro

Já no arquivo "main.py", devemos informar o nome da pasta "modelos", devido o arquivo "main.py" está fora dela. O código de importação ficará assim:

from modelos.livros import Livro

Feita as modificações, salve os arquivos antes de uma nova execução.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado