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!