1
resposta

código antes do if vs código depois do if

class ExtratorArgumentosUrl:
    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)
        #moedaDestino = self.url[indiceInicialMoedaDestino:]

        indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
        indiceFinalMoedaOrigem = self.url.find("&")

        moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

        if moedaOrigem == 'moedadestino':
            self.trocaMoedaOrigem()
            indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
            indiceFinalMoedaOrigem = self.url.find("&")
            moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]


        indiceInicialMoedaDestino = self.encontraIndiceInicial(buscaMoedaDestino)
        moedaDestino = self.url[indiceInicialMoedaDestino:]

        return moedaOrigem, moedaDestino

    def encontraIndiceInicial(self, moedaBuscada):
        return self.url.find(moedaBuscada) + len(moedaBuscada)


    def trocaMoedaOrigem(self):
        self.url = self.url.replace('moedadestino', 'real', 1)
        print(self.url)




url = 'https://www.bytebank.com.br/cambio?moedaorigem=real&moedadestino=dolar'
argumentosUrl = ExtratorArgumentosUrl(url)
moedaOrigem, moedaDestino = argumentosUrl.extraiArgumentos()
print(moedaOrigem, moedaDestino)

Este é o código do primeiro video da aula 3: Se eu rodo dessa forma, o print retorna corretamente, real dolar. E se eu troco a palavra "real" da url por "moedadestino" também roda corretamente.

Porém, se eu pego essas linhas:

indiceInicialMoedaDestino = self.encontraIndiceInicial(buscaMoedaDestino)
moedaDestino = self.url[indiceInicialMoedaDestino:]

e deixo uma antes do if e outra depoi do if (no código acima estão as duas comentadas antes do if) ele para de funcionar, não entendo porque. Para mim ele funcionaria pois estão com a mesma identação

1 resposta

Olá Marcos.

Segui o que eu entendi da suas orientações e o código continuou funcionando e ficou com abaixo:

def extraiArgumentos(self):

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

        #indiceInicialMoedaDestino = self.encontraIndiceInicial(buscaMoedaDestino)
        #moedaDestino = self.url[indiceInicialMoedaDestino:]

        indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
        indiceFinalMoedaOrigem = self.url.find("&")

        moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

        indiceInicialMoedaDestino = self.encontraIndiceInicial(buscaMoedaDestino)

        if moedaOrigem == 'moedadestino':
            self.trocaMoedaOrigem()
            indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
            indiceFinalMoedaOrigem = self.url.find("&")
            moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

        moedaDestino = self.url[indiceInicialMoedaDestino:]

        return moedaOrigem, moedaDestino

Poderia verificar se é isso mesmo que você disse ? E se não for, por favor forneça o código que você propôs para eu conseguir analisar com você.

Consegui gerar um erro apenas quando fiz a indentação ficar "incorreta" , e uma das linhas ficar presa ao condicional if.

        if moedaOrigem == 'moedadestino':
            self.trocaMoedaOrigem()
            indiceInicialMoedaOrigem = self.encontraIndiceInicial(buscaMoedaOrigem)
            indiceFinalMoedaOrigem = self.url.find("&")
            moedaOrigem = self.url[indiceInicialMoedaOrigem:indiceFinalMoedaOrigem]

            moedaDestino = self.url[indiceInicialMoedaDestino:]

        return moedaOrigem, moedaDestino

E então obtive esse erro, de usar a moedaDestino antes dela ser criada.

Traceback (most recent call last):
  File "extrator.py", line 54, in <module>
    moedaOrigem, moedaDestino = argumentosUrl.extraiArgumentos()
  File "extrator.py", line 39, in extraiArgumentos
    return moedaOrigem, moedaDestino
UnboundLocalError: local variable 'moedaDestino' referenced before assignment

Poderia verificar se esse é o seu caso e se não for, por favor fornecer o código proposto e o erro que está aparecendo para você.

Bons Estudos.