1
resposta

Desafio - Conversor de Moedas (Real-Dólar)

import re

class ExtratorURL:
    def __init__(self, url):
        self.url = self.sanitiza_url(url)
        self.valida_url()

    def sanitiza_url(self, url):
        return url.strip()

    def valida_url(self):
        if not self.url:  # Essa validação já existia
            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.")

    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

    def __len__(self):
        return len(self.url)

    def __str__(self):
        return "Original: " + self.url + "\n" + "Base: " + self.get_url_base() + "\n" + "Paremetros: " + self.get_url_parametros()

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

    # converter Real para dolar
    def converte(self, moeda_origem, quantidade):
        valor_dolar = 5.50
        if moeda_origem == "real":
            convertido = float(quantidade) / valor_dolar
        else:
            convertido = float(quantidade) * valor_dolar
        return convertido

extrator_url = ExtratorURL("bytebank.com/cambio?quantidade=100&moedaOrigem=real&moedaDestino=dolar")
moeda_origem = extrator_url.get_valor_parametro("moedaOrigem")
quantidade = extrator_url.get_valor_parametro("quantidade")
valor = extrator_url.converte(moeda_origem, quantidade)

print(extrator_url)
print("O tamanho da String é de " + str(len(extrator_url)) + " caracteres")
print("Valor convertido: " + str(valor))

Olá a todos, criei uma função para a conversão, mas certeza que tá ruim. Quais alternativas para essas duas gambiarras: float(quantidade) e str(valor)?

1 resposta

Olá Luiz, tudo bom? No caso do float(quantidade) não vejo nada de errado em ter que fazer o casting nesse caso, é até uma prática usual, além do mais que você está realizando uma operação aritmética, então teria que realizar essa mudança de um jeito ou de outro. Já no segundo caso do str(valor), não seria necessário realizar essa mudança para string, existem várias formas de representar inteiros em strings, como:

print(f'Valor convertido: {valor}')
print('Valor convertido: {}'.format(valor))
print('Valor covertido: ', valor)

Esses são só alguns exemplos de formatação de strings, caso queira ver mais sugiro dar uma olhada na documentação sobre strings que você irá encontrar muita coisa.