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

Consegui resolver criando uma classe, porém com dúvidas

Boa noite!

Segue a minha solução:

#códigos anteriores

class Conversao_de_moeda:

    def conversao(moeda_origem, moeda_destino, quantidade):
        valor_real_p_dolar = 5.50
        if moeda_origem == 'real' and moeda_destino == 'dolar':
            moeda_convertida = round(1 / valor_real_p_dolar * quantidade, 2)
            return f'As {quantidade} unidades de {moeda_origem} valem {moeda_convertida} unidades de {moeda_destino}.'

        elif moeda_origem == 'dolar' and moeda_destino == 'real':
            moeda_convertida = round(1 * valor_real_p_dolar * quantidade, 2)
            return f'As {quantidade} unidades de {moeda_origem} valem {moeda_convertida} unidades de {moeda_destino}.'

        else:
            return f'No momento não temos a conversão da moeda {moeda_origem} para a moeda {moeda_destino}.'

extrator_url = ExtratorURL('https://www.bytebank.com/cambio?quantidade=100&moedaOrigem=real&moedaDestino=dolar')
moeda_origem = extrator_url.get_valor_parametro("moedaOrigem")
moeda_destino = extrator_url.get_valor_parametro("moedaDestino")
quantidade = float(extrator_url.get_valor_parametro("quantidade"))

resultado = Conversao_de_moeda.conversao(moeda_origem, moeda_destino, quantidade)
print(resultado)

Consegui com que saísse o resultado desejado. Porém, fiquei com uma dúvida com o código pois ao tentar aplicar o init, conforme abaixo:

#códigos anteriores
class Conversao_de_moeda:
    def __init__(self):
        self.moeda_origem = moeda_origem
        self.moeda_destino = moeda_destino
        self.quantidade = quantidade

    def conversao(self, moeda_origem, moeda_destino, quantidade):
        valor_real_p_dolar = 5.50
        if self.moeda_origem == 'real' and self.moeda_destino == 'dolar':
            moeda_convertida = round(1 / valor_real_p_dolar * self.quantidade, 2)
            return f'As {self.quantidade} unidades de {self.moeda_origem} valem {moeda_convertida} unidades de {self.moeda_destino}.'

        elif self.moeda_origem == 'dolar' and self.moeda_destino == 'real':
            moeda_convertida = round(1 * valor_real_p_dolar * self.quantidade, 2)
            return f'As {self.quantidade} unidades de {self.moeda_origem} valem {self.moeda_convertida} unidades de {self.moeda_destino}.'

        else:
            return f'No momento não temos a conversão da moeda {self.moeda_origem} para a moeda {self.moeda_destino}.'

extrator_url = ExtratorURL('https://www.bytebank.com/cambio?quantidade=100&moedaOrigem=real&moedaDestino=dolar')
moeda_origem = extrator_url.get_valor_parametro("moedaOrigem")
moeda_destino = extrator_url.get_valor_parametro("moedaDestino")
quantidade = float(extrator_url.get_valor_parametro("quantidade"))

resultado = Conversao_de_moeda.conversao(moeda_origem, moeda_destino, quantidade)
print(resultado)

O resultado é um erro conforme print abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Poderiam me ajudar?

2 respostas
solução!

Olá Fabio, tudo bem com você?

Meus parabéns pela implementação e por se desafiar sempre, fico feliz que tenha compartilhado seu desenvolvimento com a comunidade do fórum Alura.

Quando definimos o uso do método inicializador __init__ nesse exemplo devemos passar por esse método os valores que serão os atributos do objeto criado pela classe, será necessário informarmos que a classe Conversao_de_moeda possui três atributos, sendo eles, moeda_origem, moeda_destino, quantidade, para informar que o objeto possui esses atributos, basta informá-lo ao lado do self, ficando da seguinte forma o método inicializador.

    def __init__(self, moeda_origem, moeda_destino, quantidade):
        self.moeda_origem = moeda_origem
        self.moeda_destino = moeda_destino
        self.quantidade = quantidade

Após realizarmos essas mudanças, o acesso desses valores será através do local de memória (self), assim, no método conversao podemos retirar os atributos, nesse exemplo não será necessário o uso de atributos para esse método. A primeira linha do método ficará da seguinte forma, apenas com o self:

def conversao(self):

Nesse mesmo método, no atributo de validação elif, no seu return, devemos retirar o self no momento da chamada da variável moeda_convertida, por ser uma variável criada dentro do método ela não foi salva no local de memória do objeto (self) em nenhum momento assim o retorno ficará da seguinte forma:

return f'As {self.quantidade} unidades de {self.moeda_origem} valem {moeda_convertida} unidades de {self.moeda_destino}.'

Por último, quando estamos trabalhando com classe, devemos criar primeiramente um objeto e salvá-lo em uma variável e após essa criação faremos o uso dos métodos no objeto criado. Abaixo, temos primeiramente a criação do objeto, passando os atributos: moeda_origem, moeda_destino, quantidade que serão usados pelo método __init__ e logo abaixo chamamos o método de conversão no objeto criado.

obj_resultado = Conversao_de_moeda(moeda_origem, moeda_destino, quantidade)
print(obj_resultado.conversao())

Criando o objeto dessa maneira, as seguintes linhas podem ser apagadas.

resultado = Conversao_de_moeda.conversao(moeda_origem, moeda_destino, quantidade)
print(resultado)

Após realizar as mudanças, basta executar o código.

A Proposta apresentada foi testada em conjunto com o código da aula, peço que execute os teste com as modificações apresentadas acima, caso ocorra algum erro, peço que envie o código completo para que possa ser realizada a comparação.

Fico à disposição.

Abraços e bons estudos.

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

Muito obrigado pela explicação dos pontos onde errei!! Entendi melhor a utilização do método init!!