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

Quando eu executo meu código aparece apenas o "dolar", não aparece o "real"

Esses são os meus códigos: main.py

from ExtratorArgumentoURL import extratorArgumentoURL

'''
url = "https://bytebank.com.br/cambio?moedaorigem=real&moedadestino=dolar&valor=700"

argumento = "Rodrigo de Oliveira Siqueira"
#            0123456789 11    15
ListaUrl = argumento.split(* *)
print(listaUrl)
'''

url = "moedaorigem=real&moedadestino=dolar"

argumentosUrl = extratorArgumentoURL(url)
moedaOrigem,moedaDestino = argumentosUrl.ExtraiArgumentos()
print(moedaOrigem, moedaDestino)

ExtratorArgumentoUrl.py

class extratorArgumentoURL:
    def __init__(self,url):
        if self.UrlEhValida(url):
            self.url = url
        else:
            raise LookupError("Url inválida")
    @staticmethod
    def UrlEhValida(url):
        if url:
            return True
        else:
            return False

    def ExtraiArgumentos(self):

        buscaMoedaOrigem = "moedaorigem"
        buscaMoedaDestino = "moedadestino"

        IndiceInicialMoedaDestino       = self.EncontraIndiceInicial(buscaMoedaDestino)

        IndiceInicialMoedaOrigem        = self.EncontraIndiceInicial(buscaMoedaOrigem)
        IndiceFinalMoedaOrigem = self.url.find(buscaMoedaOrigem) + len(buscaMoedaOrigem) + 1

        moedaOrigem = self.url [IndiceInicialMoedaOrigem:IndiceFinalMoedaOrigem]
        moedaDestino = self.url [IndiceInicialMoedaDestino:]

        return moedaOrigem, moedaDestino

    def EncontraIndiceInicial(self, moedaBuscada):
        return self.url.find(moedaBuscada) + len(moedaBuscada) + 1
2 respostas
solução!

Bom dia Matheus. Isso acontece porque seu IndifceFinalMoedaOrigem está fazendo um range com o mesmo valor posição nos dois lados do [12 :12 ]. Ele está contando assim:

IndiceInicialMoedaOrigem = moedadestino= -> 12 posições

IndiceFinalMoedaOrigem = moedadestino= -> 12 posições

12 - 12 = 0 retorna ' '

O que você poderia fazer é alterar o range IndiceFinalMoedaOrigem para

    IndiceFinalMoedaOrigem = self.url.find('&')

Assim seu range vai fazer: IndiceFinalMoedaOrigem = moedadestino=real -> 16 posições

16 - 12 = 4 retorna 'real'

Você também pode, para especificar melhor sua busca, caso tenha varios argumentos na mesma URL, utilizar os parâmetros do find para iniciar a busca de uma posição diferente mais próxima do & já que o find para no primeiro & que acha.

IndiceFinalMoedaOrigem = self.url.find('&', IndiceInicialMoedaOrigem)

Desse jeito o find vai iniciar do próprio IndiceInicialMoedaOrigem, caso tenha algum parâmetro anterior a ele com & separando, ele vai ignorar.

Ahh entendi muito obrigado!!!