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

Retornando false

Não sei por que está retornando false, dei uma olhada no código e não consegui encontrar o erro, podem me ajudar ?

class ExtratorArgumentosUrl:
    def __init__(self, url):
        if self.url_eh_valida(url):
            self.url = url.lower()
        else:
            raise LookupError ('URL INVÁLIDA !!!')

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

    def __str__(self):
        moeda_destino,moeda_origem = self.extrai_argumentos()
        representacao_string = (f'Valor: {self.extrai_valor()} \nMoeda Origem: {moeda_origem} \nMoeda Destino: {moeda_destino}')
        return representacao_string

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

    @staticmethod
    def url_eh_valida(url):
        if url and url.startswith("https://bytebank.com"):
            return True
        else:
            return False

    def extrai_argumentos(self):

        busca_moeda_origem = "moedaorigem=".lower()
        busca_moeda_destino = "moedadestino=".lower()


        indice_final_moeda_origem = self.url.find("&")
        indice_inicial_moeda_origem = self.encontra_indice_inicial(busca_moeda_origem)

        moeda_origem = self.url[indice_inicial_moeda_origem:indice_final_moeda_origem]

        if moeda_origem == "moedadestino":
            self.troca_moeda_origem()
            indice_final_moeda_origem = self.url.find("&")
            indice_inicial_moeda_origem = self.encontra_indice_inicial(busca_moeda_origem)

            moeda_origem = self.url[indice_inicial_moeda_origem:indice_final_moeda_origem]

        indice_inicial_moeda_destino = self.encontra_indice_inicial(busca_moeda_destino)
        indice_final_moeda_destino = self.url.find("&valor")
        moeda_destino = self.url[indice_inicial_moeda_destino:indice_final_moeda_destino]

        return moeda_destino, moeda_origem

    def encontra_indice_inicial(self, moeda_buscada):

        return self.url.find(moeda_buscada) + len(moeda_buscada)

    def troca_moeda_origem(self):

        self.url = self.url.replace("moedadestino", "real", 1)
        print(self.url)

    def extrai_valor(self):

        busca_valor = "valor=".lower()
        indice_inicial_valor = self.encontra_indice_inicial(busca_valor)
        valor = self.url[indice_inicial_valor:]
        return valor




from ExtratorArgumentosURL import ExtratorArgumentosUrl

url = "https://bytebank.com/cambio?moedaorigem=moedadestino&moedadestino=dolar&valor=1500"


argumentosUrl1 = ExtratorArgumentosUrl(url)
argumentosUrl2 = ExtratorArgumentosUrl(url)

print(argumentosUrl1)

print(argumentosUrl2 == argumentosUrl1)

2 respostas

Testei aqui e ele retorna false quando faço o print de um dos URls junto com a comparação. Se eu printo os 2 ou nenhum dos 2 ele me retorna True. Qual seria o motivo disso ?

solução!

Não sei se entendi bem sua dúvida, Caio. Mas olhando seu código, repare que a comparação feita no seu segundo print está comparando os dois objetos, e ainda que eles possuem o mesmo parâmetro de entrada, são objetivos distintos e portanto deveria retornar falso mesmo, ainda que a resposta dos dois seja a mesma.

Se você usar dentro do print str(argumentosUrl1) == str(argumentosUrl2), ele estará comparando a string de output dos seus método str, e nesse caso a resposta será True pois ambos retornarão a mesma string.

Ajudei? Era essa tua dúvida?

Ab