3
respostas

Estou com um problema em meu __getitem__

Estou com o código abaixo conforme feito pelo professor na aula, porém esta dando um erro. " Ocorreu uma exceção: IndexError list index out of range" no caso esta dizendo que um erro é no "line 52, in getitem return self.programas[item] e o outro é no "line 94, in for programa in playlistfim_de_semana:".

class Programa: def init(self, nome, ano): self.nome = nome.title() self.ano = ano self.likes = 0

def dar_likes(self):
       self._likes += 1

@property
def nome(self):
    return self._nome

@nome.setter
def nome(self,novo_nome):
    self._nome = novo_nome.title()

@property
def likes(self):
    return self._likes

def __str__(self):
    return f'{self._nome} - {self.ano} - Likes: {self.likes}'

class Filme(Programa): def init(self, nome, ano, duracao): super().init(nome,ano) self.duracao = duracao

def __str__(self):
    return f'{self._nome} - {self.ano} - {self.duracao} Min - Likes: {self._likes}'

class Serie(Programa): def init(self, nome, ano, temporadas): super().init(nome,ano) self.temporadas = temporadas

 def __str__(self):
    return f'{self._nome} - {self.ano} - {self.temporadas} Temporadas - Likes: {self._likes}'

class Playlist: def init(self, nome, programas): self.nome = nome self._programas = programas

def __getitem__(self, item):
    return self._programas[item]

def __len__(self):
    return len(self._programas)


@property
def listagem(self):
    return self._programas

vingadores = Filme('vingadores - guerra Infinita', 2018 , 160) atlanta = Serie('atlanta',2018,2) tmep = Filme('todo mundo em pânico', 1999, 100) demolidor = Serie('demolidor', 2016, 2)

vingadores.dar_likes() vingadores.dar_likes() tmep.dar_likes() demolidor.dar_likes() atlanta.dar_likes() atlanta.dar_likes()

filmes_e_series = [vingadores,atlanta,demolidor,tmep]

playlist_fim_de_semana = Playlist('Fim de semana',filmes_e_series)

print(f'Tem ou não tem Demolidor em nossa lista? {demolidor in playlist_fim_de_semana}')

print(playlist_fim_de_semana[3]) print(f'Tamanho do playlist: {len(playlist_fim_de_semana)}')

for programa in playlist_fim_de_semana:
print(programa)
3 respostas

Prezado colega,

O problema foi mais de digitação pois, vc escreveu init sendo o correto: __init__

Tem vários erros de digitação no seu código, lembre-se que o Python indentação e importante e escrever os comandos tb.

class Programa:
    def __init__(self, nome, ano):
        self._nome = nome.title()
        self.ano = ano
        self._likes = 0

    @property
    def likes(self):
        return self._likes

    def dar_likes(self):
        self._likes += 1

    @property
    def nome(self):
        return self._nome

    @nome.setter
    def nome(self, nome):
        self._nome = nome

    def __str__(self):
        return f'Nome: {self.nome} Likes: {self.likes}'

class Filme(Programa):
    def __init__(self, nome, ano, duracao):
        super().__init__(nome, ano)
        self.duracao = duracao

    def __str__(self):
        return f'Nome: {self.nome} - {self.duracao} min - Likes: {self.likes}'

class Serie(Programa):
    def __init__(self, nome, ano, temporadas):
        super().__init__(nome, ano)
        self.temporadas = temporadas

    def __str__(self):
        return f'Nome: {self.nome} - {self.temporadas} temporadas - Likes: {self.likes}'


class Playlist():
    def __init__(self, nome, programas):
        self.nome = nome
        self._programas = programas

    def __getitem__(self, item):
        return self._programas[item]

    def __len__(self):
        return len(self._programas)
    @property
    def listagem(self):
        return self._programas

vingadores = Filme('vingadores - guerra infinita', 2018, 160)
atlanta = Serie('atlanta', 2018, 2)
tmep = Filme('todo mundo em panico', 1999, 100)
demolidor = Serie('demolidor', 2016, 2)

vingadores.dar_likes()
vingadores.dar_likes()
vingadores.dar_likes()
atlanta.dar_likes()
atlanta.dar_likes()
tmep.dar_likes()
tmep.dar_likes()
demolidor.dar_likes()
demolidor.dar_likes()

listinha = [atlanta, vingadores, demolidor, tmep]
minha_playlist = Playlist('fim de semana', listinha)

for programa in minha_playlist:
    print(programa)

print(f'Tamanho: {len(minha_playlist.listagem)}')

Se precisar de ajuda estamos aqui! Um abraço e boa aula

Na verdade o código esta correto, porém na hora de copiar para cá do meu Visual Studio Code ele perdeu toda a configuração. Porém tentei com exatamente o que foi informado acima por você e o erro persiste. Não estou conseguindo identificar exatamente onde esta errado, pois ele percorre todos os filmes e séries, mas ele vai além com isso ele esta indo a mais do que tem de itens em meu index, que no caso é 0 = Vingadores 1= Atlanta 2= Demolidor 3= Todo Mundo em Pânico

Total de 4 itens

Ele imprime correto todas as informações conforme abaixo:

Vingadores - Guerra Infinita - 2018 - 160 Min - Likes: 2 Atlanta - 2018 - 2 Temporadas - Likes: 2 Demolidor - 2016 - 2 Temporadas - Likes: 1 Todo Mundo Em Pânico - 1999 - 100 Min - Likes: 1

Mas ele fica travado, pois ele quer achar o índice 4 que não existe e por esse motivo fica meio que em looping travado.

Conforme imagem abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Fabio,

tenta rodar no seu prompt de comando, porque executei agora de novo é deu certo.

imagem do meu Visual Code