Solucionado (ver solución)

Importante

Estás viendo la versión anterior de la nueva experiencia de Alura que estamos preparando para ti. Pronto tendrá una identidad visual completamente nueva, pensada para potenciar tus estudios.

Solucionado
(ver solución)
2
respuestas

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 respuestas
solución!

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!!