Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Desafio: Conversão de moedas - dólar e real

Assumindo que o usuário não quer quebrar o código, se a moeda de origem for igual a de destino, mesmo não sendo dólar ou real o resultado será o mesmo.

import re

class Extrator_url:
    def __init__(self, url):
        self.url = self.sanitizar_url(url)
        self.validar_url()

    def sanitizar_url(self, url):
        if type(url) == str:
            return url.strip()
        else:
            return ""

    def validar_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 nao é válida!")

    def get_url_base(self):
        return self.url.split("?")[0]

    def get_url_parametros(self):
        if "?" in self.url:
            return self.url.split("?")[1].split("&")
        else:
            return ""

    def get_valor_parametros(self, valor):
        for x in self.get_url_parametros():
            if valor in x:
                return x.split("=")[1]
        return ""

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

    def __str__(self):
        return self.url

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


if __name__ == '__main__':

    url = "https://bytebank.com/cambio?moedaOrigem=dolar&moedaDestino=real&quantidade=100"
    extrator_url = Extrator_url(url)

    print(extrator_url.get_url_base())
    print(extrator_url.get_url_parametros())

    if extrator_url.get_url_parametros():
        moeda_origem = extrator_url.get_valor_parametros("moedaOrigem")
        moeda_destino = extrator_url.get_valor_parametros("moedaDestino")
        quantidade = float(extrator_url.get_valor_parametros("quantidade"))

        if moeda_origem == moeda_destino:
            print(f"{quantidade:.2f}")
        elif moeda_origem == "real" and moeda_destino == "dolar":
            print(f"{quantidade/5.5:.2f}")
        elif moeda_origem == "dolar" and moeda_destino == "real":
            print(f"{quantidade*5.5:.2f}")
        else:
            raise ValueError("Moedas desconhecidas!")

2 respostas

Ajustando isso para se encaixar na classe ficaria: Obs.: nenhum dos casos trata a falta de algum dos parâmetros, como eu disse, "assumindo que o usuário não tente quebrar o código...".

import re

class Extrator_url:
    def __init__(self, url):
        self.url = self.sanitizar_url(url)
        self.validar_url()

    def sanitizar_url(self, url):
        if type(url) == str:
            return url.strip()
        else:
            return ""

    def validar_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 nao é válida!")

    def get_url_base(self):
        return self.url.split("?")[0]

    def get_url_parametros(self):
        if "?" in self.url:
            return self.url.split("?")[1].split("&")
        else:
            return ""

    def get_valor_parametros(self, valor):
        for x in self.get_url_parametros():
            if valor in x:
                return x.split("=")[1]
        return ""

    def conversao(self):
        if extrator_url.get_url_parametros():
            moeda_origem = extrator_url.get_valor_parametros("moedaOrigem")
            moeda_destino = extrator_url.get_valor_parametros("moedaDestino")
            quantidade = float(extrator_url.get_valor_parametros("quantidade"))

            if moeda_origem == moeda_destino:
                return f"{quantidade:.2f}"
            elif moeda_origem == "real" and moeda_destino == "dolar":
                return f"{quantidade / 5.5:.2f}"
            elif moeda_origem == "dolar" and moeda_destino == "real":
                return f"{quantidade * 5.5:.2f}"
            else:
                raise ValueError("Moedas desconhecidas!")

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

    def __str__(self):
        return self.url

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


if __name__ == '__main__':

    url = "https://bytebank.com/cambio?moedaOrigem=dolar&moedaDestino=real&quantidade=100"
    extrator_url = Extrator_url(url)

    print(extrator_url.get_url_base())
    print(extrator_url.get_url_parametros())
    print(extrator_url.conversao())

solução!

Oi, Henrique! Tudo certo?

Projeto super bacana, parabéns pela elaboração! Obrigada também por compartilhá-lo aqui no fórum com a nossa comunidade, tenho certeza que servirá de inspiração para muitos colegas!

Não esqueça que caso surja alguma dúvida especifica estarei a disposição para ajudar, basta publicar aqui no fórum!

Um forte abraço e bons estudos!