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

Incrementar lista automaticamente usando objeto

Oi pessoal, tudo bem? Indo direto ao ponto, estou com uma dificuldade de cumprir um desafio que fiz pra mim mesmo de tentar fazer uma lista que se alimenta automaticamente utilizando OO.

====

O estória é a seguinte:

Utilizando objetos, gostaria de incrementar uma lista de filmes, automaticamente, à partir de um código que verifica se existe um novo filme em uma sequencia de filmes.

===

Até onde cheguei:

Criei uma class de filmes com os atributos dos filmes que precisam estar representados pelo objeto e fiz as built in's e os gets para gerar as saídas que eu preciso:

class Filmes:
    def __init__(self, nome, diretor, ano_lancamento):
        self.nome = nome
        self.diretor = diretor
        self.ano_lancamento = ano_lancamento
        
        
    def __repr__(self):
        return "nome:%s diretor:%s ano:%s"% (self.nome, self.diretor, self.ano_lancamento)

    def get_nome(self):
        return self.nome

    def get_diretor(self):
        return self.diretor

    def get_ano_lancamento(self):
        return self.ano_lancamento
        

Criei uma lista de filmes respeitando os atributos da clase:

filme1 = Filmes("Filme1", "Diretor1", 1985)
filme2 = Filmes("Filme2", "Diretor2", 1986)
filme3 = Filmes("Filme3", "Diretor3", 1987)
filme4 = Filmes("Filme4", "Diretor4", 1988)
filme5 = Filmes("Filme5", "Diretor5", 1989)
filme6 = Filmes("Filme6", "Diretor6", 1990)
filme7 = Filmes("Filme7", "Diretor7", 1991)

Iniciei uma lista de filmes vazia fiz uma lista de "filmes entrantes" que representa os filmes que estou cadastrando no meu sistema implementei um "extend" para incrementar essa lista

lista_de_filmes = []
filmes_entrantes = [filme1,filme2,filme3,filme4,filme5,filme6,filme7]

lista_de_filmes.extend(filmes_entrantes)

imprimo a lista de filmes

print(lista_de_filmes)

Até aí tudo bem, o código está funcionando legal.

Porém, o meu requisito é de que para cada filme novo que eu cadastre no meu sistema, a lista de "filmes_entrantes" seja incrementada automáticamente. Por exemplo, eu gostaria que o sistema fosse inteligente para que a partir do momento em que um "filme8" fosse adicionado, a lista de filmes fosse incrementada com esse filme sem que eu precise passar o "filme8" para lista de "filmes_entrantes"

Como alternativa que não me satisfez eu criei um arquivo "filmes.txt" com uma lista de filmes e chamei uma função "open" para varrer as linhas e incrementar cada linha nova à minha lista. O código funciononou, porém, desta forma eu não uso as classes e nem os objetos:

lista_de_filmes = []
with open("filmes.txt") as base_filmes:
    for filmes in base_filmes:
        filmes_entrantes = [filmes]
        lista_de_filmes.extend(filmes_entrantes)
print(lista_de_filmes)

Conseguem me ajudar a implementar a lista de filmes automatizada utilizando a classe Filmes e aplicando aos objetos?

Obrigado desde já pelo apoio! Curso muito bom!!!!

2 respostas
solução!

Olá, Rafael! Tudo bem com você? Espero que sim

Uma maneira de fazer isso seria criar uma nova classe, por exemplo, SistemaDeFilmes, que teria a responsabilidade de gerenciar a lista de filmes. Dentro dessa classe, você poderia ter um método para adicionar filmes à lista.

Aqui está um exemplo de como isso poderia ser feito:

class SistemaDeFilmes:
    def __init__(self):
        self.lista_de_filmes = []

    def adicionar_filme(self, filme):
        self.lista_de_filmes.append(filme)

    def imprimir_filmes(self):
        for filme in self.lista_de_filmes:
            print(filme)

Agora, você pode criar um objeto da classe SistemaDeFilmes e usar o método adicionar_filme para adicionar filmes à lista:

sistema = SistemaDeFilmes()

filme1 = Filmes("Filme1", "Diretor1", 1985)
filme2 = Filmes("Filme2", "Diretor2", 1986)

sistema.adicionar_filme(filme1)
sistema.adicionar_filme(filme2)

sistema.imprimir_filmes()

Dessa forma, sempre que você criar um novo filme, basta chamar o método adicionar_filme para adicioná-lo à lista. Isso deve tornar o processo de adição de filmes à lista mais automatizado.

Espero ter ajudado e bons estudos!

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

Oi Armano, muito obrigado pela sua proposta. A solução funcionou aqui pra mim!!

No entanto, acabou surgindo uma dúvida conceitual aqui:

Por que, na hora de chamar os objetos da classe, você atribuiu uma variável "sistema" à classe "SistemadeFilmes()" ?

sistema = SistemaDeFilmes()

Em um primeiro momento eu pensei que fosse somente para facilitar a visualização do código, mas depois percebi que o código não funciona se eu chamo o "SistemaDeFilmes".

Por exemplo. Fazendo uma analogia ao seu código, na minha primeira tentativa, eu passei:

SistemaDeFilmes.adicionar_filme(filme2)

e eu acabei tomando um erro. Sabe me dizer porque?

Somente para fechar a solução, o méu código no final das contas (e que deu certo!!) ficou assim:

class SistemaDeFilmes():
    def __init__(self):
        self.lista_programa = []


    def incrementa_programa (self, titulo):
        self.lista_programa.append(titulo)

    def imprime_lista(self):
        for titulo in self.lista_programa:
            print (titulo)
            
            
            
ozark = Serie('ozark', 2017, 1, 'Série')
homecoming = Serie('homecoming', 2020, 2, 'Série')
assistente = Filme('a assistente', 2022, 125, 'Filme')
bastardos = Filme('Bastardos Inglórios', 2015, 160, 'Filme')
supersizeme = Documentario('Super Sizeme', 2005, 95, 'Michal Moore', 'Documentario')
democracia = Documentario('Democracia em Vertigem', 2014, 120, 'Fulana', 'Documentario')

sistema = SistemaDeFilmes()

sistema.incrementa_programa(ozark)



sistema.incrementa_programa(homecoming)
sistema.incrementa_programa(assistente)
sistema.incrementa_programa(bastardos)
sistema.incrementa_programa(supersizeme)
sistema.incrementa_programa(democracia)

sistema.imprime_lista()