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

Solução do Desafio

Importações

import re

Classe ExtratorURL:

class ExtratorURL:
    def __init__(self, url):
        self.url = self.__sanitiza_url(url)
        self.__valida_url()

    # Declarando os GETTERS
    @property
    def moedaOrigem(self):
        return self.get_valor_parametro("moedaOrigem")

    @property
    def moedaDestino(self):
        return self.get_valor_parametro("moedaDestino")

    @property
    def quantidade(self):
        return int(self.get_valor_parametro("quantidade"))

    # Declarando métodos privados
    def __sanitiza_url(self, url):
        if type(url) == str:
            return url.strip()
        else:
            return ""

    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.")

    # Declarando os demais métodos
    def get_url_base(self):
        indice_interrogacao = self.url.find("?")
        url_base = self.url[:indice_interrogacao]
        return url_base

    def get_url_parametros(self):
        indice_interrogacao = self.url.find("?")
        url_parametros = self.url[indice_interrogacao + 1:]
        return url_parametros

    def get_valor_parametro(self, parametro_busca):
        indice_parametro = self.get_url_parametros().find(parametro_busca)
        indice_valor = indice_parametro + len(parametro_busca) + 1

        indice_e_comercial = self.get_url_parametros().find('&', indice_valor)
        if indice_e_comercial == -1:
            valor = self.get_url_parametros()[indice_valor:]
        else:
            valor = self.get_url_parametros()[indice_valor:indice_e_comercial]
        return valor

    # Sobrescrevendo métodos build-in
    def __len__(self):
        return len(self.url)

    def __str__(self):
        separador = "==" * 20
        titulo = "Extrator URL".center(40)
        return f"\n{separador}\n{titulo}\n{separador}\n\tURL: {self.url} \n\tBase: {self.get_url_base()} \n\tParâmetros: {self.get_url_parametros()}"

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

Classe CalcularConversao:

class CalcularConversao(ExtratorURL):
    def __init__(self, url):
        super().__init__(url)

    def calcular_valor_conversao(self):
        if self.moedaOrigem == "real":
            conversao = self.quantidade / VALOR_DOLAR
        else:
            conversao = self.quantidade * VALOR_DOLAR

        return conversao

    def __str__(self):
        separador = "==" * 20
        titulo = f"CONVERSOR {self.moedaOrigem.title()} -> {self.moedaDestino.title()}".center(40)

        if self.moedaDestino == "real":
            simbolo = "$"
        else:
            simbolo = "R$"

        cabecalho = f"\n{separador}\n{titulo}\n{separador}"
        parametros = f"""
    Origem: {self.moedaOrigem}
    Destino: {self.moedaDestino} 
    Quantidade: {self.quantidade}
    """
        resultado_conversao = f"Resultado: {simbolo}{self.calcular_valor_conversao():.2f}"
        return f"{super().__str__()}{cabecalho}{parametros}{resultado_conversao}"

Iniciando o programa:

# 1 dolar = 5.50 reais
VALOR_DOLAR = 5.50

# URL de conversão REAL -> DOLAR
url_real_dolar = "www.bytebank.com.br/cambio?moedaOrigem=real&quantidade=100&moedaDestino=dolar"
conversor_real_dolar = CalcularConversao(url_real_dolar)
print(conversor_real_dolar)

# URL de conversão DOLAR -> REAL
url_dolar_real = "https://bytebank.com/cambio?moedaOrigem=dolar&quantidade=50&moedaDestino=real"
conversor_dolar_real = CalcularConversao(url_dolar_real)
print(conversor_dolar_real)

Resultado:

========================================
              Extrator URL              
========================================
    URL: www.bytebank.com.br/cambio?moedaOrigem=real&quantidade=100&moedaDestino=dolar 
    Base: www.bytebank.com.br/cambio 
    Parâmetros: moedaOrigem=real&quantidade=100&moedaDestino=dolar
========================================
        CONVERSOR Real -> Dolar         
========================================
    Origem: real
    Destino: dolar 
    Quantidade: 100
    Resultado: R$18.18

========================================
              Extrator URL              
========================================
    URL: https://bytebank.com/cambio?moedaOrigem=dolar&quantidade=50&moedaDestino=real 
    Base: https://bytebank.com/cambio 
    Parâmetros: moedaOrigem=dolar&quantidade=50&moedaDestino=real
========================================
        CONVERSOR Dolar -> Real         
========================================
    Origem: dolar
    Destino: real 
    Quantidade: 50
    Resultado: $275.00
1 resposta
solução!

Bom dia!

Sua resolução ficou excelente! Você fez um ótimo uso do aprendizado.

Parabéns pelo empenho nos estudos e continue praticando.

Para que mais pessoas consigam visualizar a sua solução proposta, é recomendado que você marque este tópico como solucionado. Assim pode ajudar ainda mais pessoas :)

Bons estudos!