2
respostas

[Projeto] Desafio de Conversão dolar e real

Código passado durante o curso:

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

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

    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_paramentro(self,parametro_busca):
        indice_parametro=self.get_url_parametros().find(parametro_busca)
        indice_comercial=self.get_url_parametros().find('&',indice_parametro)
        indice_valor=self.get_url_parametros().find('=',indice_parametro)+1
        if(indice_comercial!=-1):
            valor=self.get_url_parametros()[indice_valor:indice_comercial]
        else:
            valor=self.get_url_parametros()[indice_valor:]
        return valor

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

    def __str__(self):
        return self.url + "\n" + "Parâmetros: " + self.get_url_parametros() + "\n" + "URL Base: " + self.get_url_base()

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

Metodo de Conversão:

def converte(self,dolar):
        quantidade=self.get_valor_paramentro('quantidade')
        moeda=self.get_valor_paramentro('moedaOrigem')
        if moeda=='real':
            return int(quantidade)/dolar
        else:
            return int(quantidade)*dolar
url=ExtratorURL("bytebank.com/cambio?moedaDestino=real&quantidade=100&moedaOrigem=dolar")
print(url.converte(5))

500

2 respostas

Olá Vitor, tudo bem com você?

Meus parabéns pela resolução do desafio, fico feliz que tenha compartilhado-o com a comunidade do fórum Alura. O método converte criado para a classe ExtratorURL atende bem a proposta do desafio.

Gostaria de aproveitar a oportunidade e deixar uma dica de implementação para o método converte. Nesse método o valor da quantidade está sendo convertido para o tipo int, caso o valor da quantidade fornecida na url seja um valor do com casas decimais, exemplo: 100.5, será levantado erro de valor (ValueError) informando que não foi possível realizar a transformação em um número inteiro.

Recomendo que no método converte, o valor da quantidade seja transformado para o tipo float. Assim, poderá ser fornecido valores com casas decimais ou sem para a quantidade, como apresentado abaixo.

Método converte

def converte(self, dolar):
    quantidade = self.get_valor_paramentro('quantidade')
    moeda = self.get_valor_paramentro('moedaOrigem')
    if moeda == 'real':
        return float(quantidade) / dolar
    else:
        return float(quantidade) * dolar
url_com_decimal = ExtratorURL("bytebank.com/cambio?moedaDestino=real&quantidade=100.5&moedaOrigem=dolar")
print(url_com_decimal.converte(5))

url_sem_decimal = ExtratorURL("bytebank.com/cambio?moedaDestino=real&quantidade=100&moedaOrigem=dolar")
print(url_sem_decimal.converte(5))

Resultado

502.5
500.0

Após a mudança descrita acima, salve o arquivo e execute-o.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Espero ter ajudado, em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Tem razão, devia ter me atentado a isso. Muito obrigado pela dica