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

Desafio Resolvido

Olá, segue resolução:

url = 'bytebank.com/cambio?quantidade=100&moedaOrigem=dolar&moedaDestino=real'
extrator_url = ExtratorURL(url)

valor_dolar = 5.50
moeda_origem = extrator_url.get_valor_parametro('moedaOrigem')
moeda_destino = extrator_url.get_valor_parametro('moedaDestino')
quantidade = extrator_url.get_valor_parametro('quantidade')
quantidade_float = float(quantidade)

if moeda_origem == 'real' and moeda_destino == 'dolar':
    valor_conversao = quantidade_float / valor_dolar
    print(f"O valor de R$ {quantidade_float:.2f} é o equivalente a US$ {valor_conversao:.2f}.")

elif moeda_origem == 'dolar' and moeda_destino == 'real':
    valor_conversao = quantidade_float * valor_dolar
    print(f"O valor de US$ {quantidade_float:.2f} é o equivalente a R$ {valor_conversao:.2f}.")

else:
    print('Conversão não disponível')
2 respostas
solução!

Achei a sua implementação muito legal!

Ela funciona mesmo se inverter a conversao de origem para dolar e destino para real. Como sugestão de melhoria, proponho esse formato de codigo abaixo:

  • Nele a validacao da string colocando todas verificacoes para lowercase;
  • metodos com responsabilidades separadas;
  • a responsabilidade de impressao apenas para um unico metodo;
  • e a facilidade de nao se preocupar em utilizar a verificao explicita para saber qual unidade de moeda utilizar se é R$ ou US$;
  • facilidade ao chamar a conversao com um unico metodo que se responsabiliza por identificar qual metodo de conversao sera utilizado;
  • e retorno de erro caso o tipo moeda seja desconhecido durante a conversao;
  • metodos que verificam se e dolar ou real; -

def get_lower_value(valor):
    return valor.lower()

def isReal(valor):
    return get_lower_value(valor) == 'real'

def isDolar(valor):
   return get_lower_value(valor) == 'dolar'


def get_unidade_moeda(tipo_moeda):
    if isReal(tipo_moeda):
        return 'R$'
    elif isDolar(tipo_moeda):
        return 'US$'
    else:
        return '?'

def imprime(quantidade_float,valor_conversao,moeda_origem,moeda_destino):
    print(f"O valor de {get_unidade_moeda(moeda_origem)} {quantidade_float:.2f} é o equivalente a {get_unidade_moeda(moeda_destino)} {valor_conversao:.2f}.")

def real_to_dolar(quantidade_float):
    return  quantidade_float / valor_dolar

def dolar_to_real(quantidade_float):
    return quantidade_float * valor_dolar

def get_conversao_to_dolar(moeda_origem,moeda_destino,quantidade_float):
    if isDolar(moeda_origem) and isReal(moeda_destino):
      return dolar_to_real(quantidade_float)
    else:
        raise Exception('tipos de moedas de destino e origem nao reconhecido')

def get_conversao(moeda_origem,moeda_destino,quantidade_float):
    if isReal(moeda_origem) and isDolar(moeda_destino):
        return real_to_dolar(quantidade_float)
    return get_conversao_to_dolar(moeda_origem,moeda_destino,quantidade_float)

url = "bytebank.com/cambio?quantidade=100&moedaOrigem=real&moedaDestino=dolar"
#url = 'bytebank.com/cambio?quantidade=100&moedaOrigem=dolar&moedaDestino=real'
extrator_url = ExtratorURL(url)



valor_dolar = 5.50
moeda_origem = extrator_url.get_valor_parametro('moedaOrigem')
moeda_destino = extrator_url.get_valor_parametro('moedaDestino')
quantidade = extrator_url.get_valor_parametro('quantidade')
quantidade_float = float(quantidade)


convertido = get_conversao(moeda_origem,moeda_destino,quantidade_float)
imprime(quantidade_float,convertido,moeda_origem,moeda_destino)

Espero ter ajudado, bons estudos!

Olá! Muito obrigado Julia.

Super completo, vou aplicar sim.

Obrigado, Att.