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

Retorno False ao verificar item na lista

Bom dia a todos!

Uma das aulas da formação de Python para Web contempla a explicação acerca da comparação de objetos em Python, cujo link segue: https://www.alura.com.br/artigos/como-comparar-objetos-no-python

Após a leitura do material, criei um código para comparação de animes. Abaixo, segue o código completo:

class Anime:

    def __init__(self, titulo, ano, quantidade_episodios):
        self.__titulo = titulo.title()
        self.__ano = ano
        self.__quantidade_episodios = quantidade_episodios

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

    @property
    def ano(self):
        return self.__ano

    @property
    def quantidade_episodios(self):
        return self.__quantidade_episodios

    @titulo.setter
    def titulo(self, titulo):
        self.__titulo = titulo.title()

    @ano.setter
    def ano(self, ano):
        self.__ano = ano

    @quantidade_episodios.setter
    def quantidade_episodios(self, quantidade_episodios):
        self.__quantidade_episodios = quantidade_episodios

    def __str__(self):
        return f"Título: {self.__titulo} | Ano: {self.__ano} | Quantidade de episódios: {self.__quantidade_episodios}"

    #Comparacao de igualdade - titulo e ano
    def __eq__(self, outro_anime):
        if(self.__titulo == outro_anime.titulo):
            return True
        return False

    #Comparacao de maior ou menor - quantidade de episodios
    def __gt__(self, outro_anime):
        if(self.__quantidade_episodios > outro_anime.quantidade_episodios):
            return "Sim"
        elif(self.__quantidade_episodios < outro_anime.quantidade_episodios):
            return "Não"
        else:
            return "Animes com mesma quantidade de episódios"


def verificar_anime_existente_na_lista(anime_procurado, lista_animes):
    for anime in lista_animes:
        return anime_procurado == anime

# Cria objetos
anime_01 = Anime("One Piece", 1999, 1044)
anime_02 = Anime("Dragon Ball Z", 1993, 225)
anime_03 = Anime("Dragon Ball Z", 2015, 131)

# Adiciona apenas os animes 2 e 3 na lista
lista_animes = [anime_02, anime_03]

# Verifica se o anime 1 existe na lista
print(f"O anime One Piece existe na lista: {verificar_anime_existente_na_lista(anime_01, lista_animes)}")

# Adiciona o anime 1 na lista
lista_animes.append(anime_01)

# Exibe todos os animes da lista
for anime in lista_animes:
    print(anime)

# Verifica se um anime 1 está inserido na lista
print(f"O anime One Piece existe na lista: {verificar_anime_existente_na_lista(anime_01, lista_animes)}")

# Animes iguais
print(f"Os animes {anime_02.titulo} e {anime_03.titulo} são iguais: {anime_02 == anime_03}")

# Animes diferentes
print(f"Os animes {anime_01.titulo} e {anime_02.titulo} são iguais: {anime_01 == anime_02}")

# Anime maior que o outro - mais episódios
print(f"O anime {anime_01.titulo} é maior que o anime {anime_02.titulo}: {anime_01 > anime_02}")



A partir deste código, temos o seguinte comportamento:

  • Crio 3 animes.
  • Adiciono apenas os animes 2 e 3 na lista.
  • Verifico se o anime 1 existe na lista --> False, correto!
  • Adicione o anime 1 na lista, com o método append().
  • Verifico se o anime 1 existe na lista --> False, :(

Desta forma, gostaria de saber o porquê de, após inserir o anime 1 na lista, o código ainda retorna False quando verifico a existência do referido anime na lista.

Obrigado e bons estudos para todos nós!

2 respostas
solução!

Olá, boa tarde. Sou novo no Python, então não sei se minha explicação vai ficar boa. O problema estava no método def verificar_anime_existente_na_lista(anime_procurado, lista_animes):, na linha 51. Pelo que entendi, ele não estava comparando os títulos.

Resolvi da seguinte forma:

Substitui o:

 for anime in lista_animes:
        return anime_procurado == anime

Por:

return anime_procurado in lista_animes

Desse modo, o método ficou assim:

def verificar_anime_existente_na_lista(anime_procurado, lista_animes):
        return anime_procurado in lista_animes

Espero ter ajudado.

Bom dia, Tauan!

Realmente, era justamente isso!

Muito grato pelo seu apoio! Bons estudos para nós!!