Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Meu código está retornando errado

Estou tentando fazer o projeto proposto, mas a saída não está como esperado. Não sei aonde estou errando.

class ExtratorArgumentosUrl:
    def __init__(self, url):
        if self.url_eh_valida(url):
            self.url = url.lower()
        else:
            raise LookupError('Url Inválida!')

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

    def extrai_argumentos(self):
        busca_moeda_origem = "moedaorigem=".lower()
        busca_moeda_destino = "moedadestino=".lower()

        inicio_substring_moeda_origem = self.encontra_indice_inicio_substring(busca_moeda_origem)
        final_substring_moeda_origem = self.url.find("&")
        moeda_origem = self.url[inicio_substring_moeda_origem:final_substring_moeda_origem]
        if moeda_origem == 'moedadestino':
            self.troca_moeda_origem()
            inicio_substring_moeda_origem = self.encontra_indice_inicio_substring(busca_moeda_origem)
            final_substring_moeda_origem = self.url.find("&")
            moeda_origem = self.url[inicio_substring_moeda_origem:final_substring_moeda_origem]
        inicio_substring_moeda_destino = self.encontra_indice_inicio_substring(busca_moeda_destino)
        final_substring_moeda_destino = self.encontra_indice_inicio_substring("&valor")
        moeda_destino = self.url[inicio_substring_moeda_destino:final_substring_moeda_destino]

        return moeda_origem, moeda_destino

    def retorna_valor(self):
        busca_valor = "valor".lower()
        inicio_substring_valor = self.encontra_indice_inicio_substring(busca_valor)
        valor = self.url[inicio_substring_valor:]
        return valor

    def encontra_indice_inicio_substring(self, moeda_ou_valor):
        return self.url.find(moeda_ou_valor) + len(moeda_ou_valor)

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


Esse é o do meu ExtratorArgumentosUrl.py

from ExtratorArgumentosUrl import ExtratorArgumentosUrl
url = 'https://www.bytebank.com.br/cambio?moedaorigem=real&moedadestino=dolar&valor=150'
argumentosurl = ExtratorArgumentosUrl(url)
moedaOrigem, moedaDestino = argumentosurl.extrai_argumentos()
valor = argumentosurl.retorna_valor()
print(moedaOrigem, moedaDestino, valor)

Esse é o meu main.py

A saída está sendo: "real dolar&valor =150"

Desde já agradeço.

1 resposta
solução!

Olá Heloisy, tudo bem?

Eu ainda não fiz essa aula, mas vou tentar te ajudar!

O erro está acontencendo porque você está fazendo o seguinte:

final_substring_moeda_destino = self.encontra_indice_inicio_substring("&valor")

Porém, o método encontra_indice_inicio_substring retorna o valor do índice considerando a string também. Logo, o retorno do índice faz com que ele acabe incluindo o "&valor" na moeda de destino. Uma forma de resolver isso seria utilizando a busca direto da url, conforme você fez mais acima:

final_substring_moeda_destino = self.url.find("&valor")

Quanto ao valor aparecendo com o sinal de igual antes =150: no método retorna_valor, seu termo de busca está sendo apenas valor:

busca_valor = "valor".lower()

Como ele usa a mesma função que falamos anteriormente, você pode resolver isso incluindo o sinal de igual na busca do termo:

busca_valor = "valor=".lower()

Com essas duas modificações, o output passa a ser:

real dolar 150

Espero ter ajudo você. Caso tenha, não se esqueça de marcar essa resposta como solução.

Cussa