Black November

ATÉ 50% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Hora da prática: criando classes, construtores e métodos

Notei que acabei resolvendo os problemas apresentados do 5 em diante nos casos de 1 a 4. Por isso, unifiquei todos os problemas e formulei minha solução completa. Segue para avaliação:

Arquivo com a classe:

from time import sleep
class Livro:
    livros = []
    consulta_livros = []
    def __init__(self, titulo, autor, ano_publicacao):
        self._titulo = titulo.title()
        self._autor = autor.title()
        self._ano_publicacao = ano_publicacao
        self._disponivel = True
        Livro.livros.append(self)

    def __str__(self):
        return f'O título {self._titulo} foi lançado pelo escritor {self._autor} em {self._ano_publicacao}'
    
    def emprestar(self):
        self._disponivel = not self._disponivel
    
    @classmethod
    def listar_livros(cls):
        print()
        print(f'{'LIVRO'.ljust(35)} | {'AUTOR'.ljust(35)} | {'ANO'.ljust(35)} | {'SITUAÇÃO'.ljust(35)}\n')
        for livro in cls.livros:
            print(f'{livro._titulo.ljust(35)} | {livro._autor.ljust(35)} | {str(livro._ano_publicacao).ljust(35)} | {livro.disponivel}')
    
    @classmethod
    def verificar_disponibilidade(cls, ano_consulta):
        print()
        print('Checando disponibilidade...\n')
        sleep(5)
        for livro in cls.livros:
            if livro._ano_publicacao == ano_consulta:
                Livro.consulta_livros.append(livro._titulo)
        
        if len(Livro.consulta_livros) >= 1:
            print(f'Temos os seguintes livros que foram publicados em {ano_consulta}:')
            for i, titulo in enumerate(Livro.consulta_livros, start=1):
                print(f'{i}. {titulo}')
        else:
            print('Não há livros disponíveis.')

    @property
    def disponivel(self):
        return f'Disponível para empréstimo' if self._disponivel else 'Não disponível para empréstimo'

Arquivo com a aplicação:

from modelos.livro import Livro

def main():
    # 2
    livro1 = []
    titulo1 = input('Digite o título do primeiro livro: ')
    autor1 = input('Digite o nome do autor: ')
    ano_publicacao1 = int(input('Digite o ano de lançamento do livro: '))
    livro1.append(titulo1)
    livro1.append(autor1)
    livro1.append(ano_publicacao1)
    print()

    livro2 = []
    titulo2 = input('Digite o título do segundo livro: ')
    autor2 = input('Digite o nome do autor: ')
    ano_publicacao2 = int(input('Digite o ano de lançamento do livro: '))
    livro2.append(titulo2)
    livro2.append(autor2)
    livro2.append(ano_publicacao2)
    print()

    livro3 = []
    titulo3 = input('Digite o título do terceiro livro: ')
    autor3 = input('Digite o nome do autor: ')
    ano_publicacao3 = int(input('Digite o ano de lançamento do livro: '))
    livro3.append(titulo3)
    livro3.append(autor3)
    livro3.append(ano_publicacao3)
    print()

    first_book = Livro(*livro1) # Para desempacotar os dados e ler um a um e não como lista (o que daria um erro)
    second_book = Livro(*livro2) # Para desempacotar os dados e ler um a um e não como lista (o que daria um erro)
    third_book = Livro(*livro3) # Para desempacotar os dados e ler um a um e não como lista (o que daria um erro)
    #livro2 = Livro('A Droga da Obediência', 'Pedro Bandeira', 1984)

    print(f'1. {first_book}')
    print(f'2. {second_book}')
    print(f'3. {third_book}')
    print()


    #3
    emprestimo = int(input('Digite o número do livro que deseja emprestar: '))
    
    if emprestimo == 1:
        first_book.emprestar()
    
    elif emprestimo == 2:
        second_book.emprestar()
    
    elif emprestimo == 3:
        third_book.emprestar()

    else:
        print('Opção inexistente!')
    
    Livro.listar_livros()


    #4
    print()
    ano_disponibilidade = int(input('Digite o ano de lançamento para checarmos nossa disponibilidade de livros: '))
    
    Livro.verificar_disponibilidade(ano_disponibilidade)

if __name__ == '__main__':
    main()

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas
solução!

Olá, Lucas! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o conceito de orientação a objetos para modelar o sistema de livros, utilizou muito bem os métodos de classe e instância para organizar funcionalidades e ainda compreendeu a importância da interação com o usuário para tornar o programa dinâmico e funcional.

Apenas uma observação: a lista consulta_livros está sendo acumulada a cada chamada de verificação, o que pode gerar resultados duplicados em consultas futuras. Uma sugestão seria esvaziá-la no início do método verificar_disponibilidade.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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

Oi Daniel, vou bem e você?

Muito obrigado pelo feedback!