1
resposta

Soluçaõ do Desafio

No meu caso eu fixei os parâmetros que iria procurar na url, sendo que independiente do orden que eles se encontram na url eu sempre vou ter um array [moedaOrigem, moedaDestino, quantidade] e usei um loop para procurar os valores dos parámetros na url

Adicionei no init o valor da cotação do dolar, e o metodo que permite mudar o valor da cotação

import re

class ExtratorURL: def init(self,url): self.valordolar = 5.50 self.url = self.sanitizaurl(url) self.valida_url()

@property
def valor_dolar(self):
    return self._valor_dolar

def set_valor_dolar(self, valor_dolar):
    self._valor_dolar = valor_dolar

# Apaga espaços brancos da URL
def sanitiza_url(self, url):
    return url.strip() if type(url) == str else ""

# Validad que a URL seja True
def valida_url(self):
    if not self._url:
        raise ValueError("A url está vazia")

    padrao_url = re.compile("(http(s)?://)?(www.)?bytebank.com(.br)?/cambio")

    match = padrao_url.match(self._url)

    if not match:
        raise ValueError("A URL não é válida")

# Retorno a base da URL
def get_url_base(self):
    return self._url[:self._url.find("?")]

# Retornas os parâmetros da URL
def get_url_parametros(self):
    return self._url[self._url.find("?"):]

# Procura os parâmetros e retorna a lista dos valores
def get_valor_parametro(self):
    url_parametros = self.get_url_parametros()
    if len(url_parametros) > 0:
        parametro_busca_list = ["moedaOrigem", "moedaDestino", "quantidade"]
        parametro = []

        for parametro_busca in parametro_busca_list:
            indice_parametro = url_parametros.find(parametro_busca)
            indice_valor = indice_parametro + len(parametro_busca) + 1
            indice_e_comercial = url_parametros.find("&", indice_valor)

            valor = url_parametros[indice_valor:] if indice_e_comercial == -1 \
                else url_parametros[indice_valor: indice_e_comercial]

            parametro.append(valor)

    return parametro

def conversao(self):
    dados = self.get_valor_parametro()

    if dados[0].lower() == "real" and dados[1].lower() == "dolar":
        valor = int(dados[2])/self.valor_dolar
        print(f"A taxa de conversão é de $1 = R$ {self.valor_dolar}\n"
              f"O valor de R$ {dados[2]} é igual a $ {valor}")
    elif dados[0].lower() == "dolar" and dados[1].lower() == "real":
        valor = int(dados[2]) * self.valor_dolar
        print(f"A taxa de conversão é de $1 = R$ {self.valor_dolar}\n"
              f"O valor de $ {dados[2]} é igual a R$ {valor}")
    else:
        print(f"O câmbio de {dados[0]} para {dados[1]} não está disponível")

extrator_url = ExtratorURL("https://bytebank.com/cambio?moedaOrigem=dolar&moedaDestino=real&quantidade=100") valor_quantidade = extrator_url.get_valor_parametro() extrator_url.conversao()

1 resposta

Olá, Oslien! Tudo bem?

Muito bom! Parabéns!

Sua solução para o desafio proposto ficou excelente.

Caso tenha ficado com alguma dúvida não deixe de compartilhar com a gente aqui no fórum.

Continue praticando.

Bons estudos.

Até mais!