2
respostas

IN não funciona corretamente.

Olá, pessoal. Aqui no meu código quando eu peço para imprimir true or false quando eu quero saber se existe um programa dentro da minha lista, ao invés de retornar False o programa quebra.

print(demolidor in playlist_fim_de_semana)
Tamanho do playlist: 3
Traceback (most recent call last):
  File "/home/case/PycharmProjects/oo2/modelo.py", line 79, in <module>
    print(demolidor in playlist_fim_de_semana)
NameError: name 'demolidor' is not defined

Alguém sabe me dizer o que fiz de errado?


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

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

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

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

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

    def __str__(self):
        return f"{self._nome} - {self.ano} - {self.likes} 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 - {self.likes} 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 - {self.likes} Likes"

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

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

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

    @property
    def tamanho(self):
        return len(self._programas)


vingadores = Filme("vingadores - guerra infinita", 2018, 160)
atlanta = Serie("atlanta", 2018, 2)
tmep = Filme("todo mundo em pânico", 1999, 100)

vingadores.dar_like()
tmep.dar_like()
tmep.dar_like()
tmep.dar_like()
tmep.dar_like()
tmep.dar_like()
atlanta.dar_like()
atlanta.dar_like()
atlanta.dar_like()

filmes_e_series = [vingadores, atlanta, tmep]

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

print(f"Tamanho do playlist: {len(playlist_fim_de_semana.listagem)}")

print(demolidor in playlist_fim_de_semana)

for programa in playlist_fim_de_semana:
    print(programa)
2 respostas

Olá Camila,

verifique esse trecho de código,

print(demolidor in playlist_fim_de_semana)

pois conforme o erro exibido

NameError: name 'demolidor' is not defined

vc não atribui valor algum para essa variável antes de utilizá-la.

O erro diz que a variável 'demolidor' não foi inicializada. Provavelmente você queria saber se a string demolidor estava contida na playlist, se for o caso você teria que colocar demolidor entre aspas:

print('demolidor' in playlist_fim_de_semana)

Se você escreve demolidor sem aspas ele pensa que é uma variável e como ela não foi declarada, o python não sabe o valor que deve procurar e indica esse erro... Se você quer usar uma variável poderia usar algo como:

filme_a_procurar = 'demolidor'
print( filme_a_procurar in playlist_fim_de_semana)

Tecnicamente você pode declarar uma variável cujo nome é também seu conteúdo, mas isso pode tornar seu código um pouco confuso:

demolidor = 'demolidor'
print( demolidor in playlist_fim_de_semana)