2
respostas

Resolução do exercício

teste_05_OO.appy.py

class Livro:
    livros = []

    def __init__(self, titulo = '', autor = '', ano_publicacao = 0):
        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} | {self._disponivel}'

    @property

    def titulo(self):
        return self._titulo
    def autor(self):
        return self._autor
    def ano_publicacao(self):
        return self._ano_publicacao
    
    @classmethod
    def listar_livros(cls):
        for livro in cls.livros:
            print (f'{livro._titulo.ljust(25)} | {livro._autor.ljust(25)} | {str(livro._ano_publicacao).ljust(25)} | {livro._disponivel}')
    
    @classmethod
    def emprestar(cls):
       for livro in cls.livros:
        livro._disponivel == False
        print(f'O livro {livro._titulo} está ocupado!' )

    

    @classmethod
    def verificar_disponibilidade(cls):
        ano_procurado = input('Olá. Qual o ano do livro que você busca para alugar?')
        for livro in cls.livros:
            if livro._ano_publicacao == int(ano_procurado) and livro._disponivel==True:
                print (f'O Livro {livro._titulo} do autor {livro._autor} está disponível!')
            else: print ('infelizmente não há nenhum livro disponível no momento')   
    

livro_X =Livro('X', 'Leonardo', 2005)
livro_Z =Livro('Z', 'Leandro', 2005)


def main():
    Livro.listar_livros()
    Livro.emprestar()
    Livro.verificar_disponibilidade()

if __name__ == '__main__':
    main()

Biblioteca.appy.py

from Teste_05_OO_app import Livro

def main():
    Livro.listar_livros()
    Livro.emprestar()
    Livro.verificar_disponibilidade()


if __name__ == '__main__':
    main()

Mainpy.appy.py

from Teste_05_OO_app import Livro


for livro in range(2):
        
        livro_atual = Livro.livros[livro]
        print(f"Título: {livro_atual._titulo} e Autor: {livro_atual._autor}")
2 respostas

Oi Larissa! Tudo bem?

Você fez um ótimo trabalho resolvendo o desafio! Seu código está correto, então te parabenizo pelo seu esforço e dedicação!

Agradeço por compartilhar seu código com os demais estudantes, com certeza vai ajudar nos estudos de todas as pessoas que estão aprendendo este mesmo assunto.

Continue mergulhando em tecnologia e se tiver dúvidas, conte com o fórum.

Abraços e bons estudos!

Oi, Larissa! Tudo bem?

Ótimo código, parabéns pela elaboração! Deixo apenas algumas sugestões: no arquivo teste_05_OO.appy.py devemos adicionar a anotação @property para os métodos autor e ano_publicacao e o método emprestar deve alterar o atributo _disponivel para False.

Podemos também verificar qual livro está sendo emprestado no método emprestar e no método verificar_disponibilidade, a mensagem "infelizmente não há nenhum livro disponível no momento" deve ser impressa apenas se nenhum livro estiver disponível, deixando nosso código da seguinte maneira:

class Livro:
    livros = []

    def __init__(self, titulo='', autor='', ano_publicacao=0):
        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} | {"Disponível" if self._disponivel else "Indisponível"}'

    @property
    def titulo(self):
        return self._titulo

    @property
    def autor(self):
        return self._autor

    @property
    def ano_publicacao(self):
        return self._ano_publicacao

    def emprestar(self):
        self._disponivel = False

    @classmethod
    def listar_livros(cls):
        for livro in cls.livros:
            print(f'{livro._titulo.ljust(25)} | {livro._autor.ljust(25)} | {str(livro._ano_publicacao).ljust(25)} | {"Disponível" if livro._disponivel else "Indisponível"}')
    
    @classmethod
    def verificar_disponibilidade(cls, ano_procurado):
        disponiveis = [livro for livro in cls.livros if livro._ano_publicacao == ano_procurado and livro._disponivel]
        if disponiveis:
            for livro in disponiveis:
                print(f'O Livro {livro._titulo} do autor {livro._autor} está disponível!')
        else:
            print('Infelizmente não há nenhum livro disponível no momento.')

# Criação das instâncias dos livros
livro_X = Livro('X', 'Leonardo', 2005)
livro_Z = Livro('Z', 'Leandro', 2005)

def main():
    Livro.listar_livros()
    livro_X.emprestar()
    Livro.verificar_disponibilidade(2005)

if __name__ == '__main__':
    main()

Com os ajustes o código biblioteca.appy.py deve ficar da seguinte forma:

from teste_05_OO_app import Livro

def main():
    Livro.listar_livros()
    livro_X = Livro.livros[0]
    livro_X.emprestar()
    print(f'O livro {livro_X.titulo} está {"disponível" if livro_X._disponivel else "indisponível"} após o empréstimo.')
    Livro.verificar_disponibilidade(2005)

if __name__ == '__main__':
    main()

E o arquivo mainpy.appy.py de acordo com o exemplo abaixo:

from teste_05_OO_app import Livro

# Instanciando dois objetos da classe Livro
livro_A = Livro('A', 'Autor A', 2010)
livro_B = Livro('B', 'Autor B', 2015)

# Exibindo a mensagem formatada utilizando o método __str__
print(livro_A)
print(livro_B)

Espero ter ajudado!

Um forte abraço e bons estudos!