4
respostas

Meu codigo so esta retornando False

    def __eq__(self, outra):
        return self.url == outra.url

print(objeto == objeto2)
4 respostas

Oi Caio, tudo bem?

Por gentileza, poste seu código completo para que possamos analisar o porquê do retorno False.

Fico no aguardo.

Aqui esta o codigo:

class ExtratorArgumentoURL:
    def __init__(self,url):
        if self.stringEhValida(url):
            self.url = url.lower()
            print("URL valida")
        else:
            raise LookupError("Url inválida")

    @staticmethod

    def stringEhValida(url):
        if url and url.startswith("https://www.bytebank.com.br"):
            return True
        else:
            return False
    def retornaMoedas(self):

        buscaMoedaDestino = "moedadestino="
        buscaMoedaOrigem = "moedaorigem="

        inicioSubstringMoedaOrigem = self.encontraIndiceInicioSubstring(buscaMoedaOrigem)
        finalSubstringMoedaOrigem = self.url.find("&")
        moedaOrigem = self.url[inicioSubstringMoedaOrigem:finalSubstringMoedaOrigem]

        if moedaOrigem == "moedadestino":
            self.substituiValorBosta()
            inicioSubstringMoedaOrigem = self.encontraIndiceInicioSubstring(buscaMoedaOrigem)
            finalSubstringMoedaOrigem = self.url.find("&")
            moedaOrigem = self.url[inicioSubstringMoedaOrigem:finalSubstringMoedaOrigem]

        inicioSubstringMoedaDestino = self.encontraIndiceInicioSubstring(buscaMoedaDestino)
        finalSubstringMoedaDestino = self.url.find("&valor")
        moedaDestino = self.url[inicioSubstringMoedaDestino:finalSubstringMoedaDestino]
        valor = self.extraiValor()
        valor = self.url[valor: ]

        return moedaOrigem, moedaDestino, valor


    def encontraIndiceInicioSubstring(self, moedaOuValor):
            return self.url.find(moedaOuValor) + len(moedaOuValor)

    def substituiValorBosta(self):
        self.url = self.url.replace("moedadestino", "real", 1)

    def extraiValor(self):
        SubstringValor = self.url.find("valor")
        inicioSubstringValor = SubstringValor + len("valor") + 1
        return inicioSubstringValor

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

    def __str__(self):
        moedaOrigem, moedaDestino, valor = self.retornaMoedas()
        return "O valor da transacao: {} \nA moeda origem: {} \nA moeda destino: {}".format(valor, moedaOrigem, moedaDestino)

    def __eq__(self, outra):
        return self.url == outra.url



link = "https://www.bytebank.com.br/cambio?moedaorigem=moedadestino&moedadestino=dolar&valor=700"

objeto = ExtratorArgumentoURL(link)
moedaOrigem, moedaDestino, valor = objeto.retornaMoedas()
objeto2 = ExtratorArgumentoURL(link)

print(objeto.url == objeto2.url)

print(objeto)
print(objeto2)

Caio, o False está acontecendo porque você chama o objeto.retornaMoedas() antes de comparar se o objeto1 é igual ao objeto2, e o método retornaMoedas modifica a url do objeto1, logo, a url do objeto1 e do objeto2 não serão iguais. Para corrigir isso, basta alterar a ordem das operações. Exemplo:

link = "https://www.bytebank.com.br/cambio?moedaorigem=moedadestino&moedadestino=dolar&valor=700"

objeto = ExtratorArgumentoURL(link)
objeto2 = ExtratorArgumentoURL(link)

print(objeto.url == objeto2.url)

moedaOrigem, moedaDestino, valor = objeto.retornaMoedas()

Resultado: True

Qualquer dúvida é só falar. Abraços e bons estudos!

Obrigado Nadia, testei e deu certo! :)