Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

3
respostas

[Projeto] Desafio: conversor de moedas

Início
-------- // Valor em reais
-------- função converterRSparaUSS (reais):
---------------- // Programa principal
---------------- exibir “Conversor de valores R$ → US$:”
---------------- exibir “Digite o valor em R$:”
---------------- valorRS = (ler do usuário)
---------------- txCambio = a
---------------- retorno (valorRS * a)
-------- f = converterRSparaUSS (valorRS)
-------- exibir “{valorRS} equivale a {f} US$.”
Fim

3 respostas

Olá, Evandro. Como vai?

Você organizou a ideia do conversor separando a função converterRSparaUSS do programa principal, o que ajuda bastante a deixar o algoritmo mais claro. Um ponto legal para ajustar é deixar a taxa de câmbio como parâmetro da função, assim o cálculo fica mais flexível quando o valor do dólar mudar. Uma dica interessante para o futuro é estruturar a função recebendo tanto o valor em reais quanto a taxa:

function converterRSparaUSS(reais, txCambio) {
    return reais / txCambio;
}

let valorRS = 100;
let txCambio = 5;
let valorUSS = converterRSparaUSS(valorRS, txCambio);

console.log(valorRS + " reais equivalem a " + valorUSS + " dolares");

Esse código recebe o valor em reais, divide pela taxa de cambio e retorna o valor convertido em dolares. Pensando nessa lógica, como você adaptaria o algoritmo para também converter de dólares para reais?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Oi Lorena, bom dia. Tudo bem?
Uma dúvida: a linguagem que você fez esse código é em Java? Eu tenho um pouco de noção em Python e lá a gente 'retorna' a função após. Há algum problema se eu fizer parecido com o que você fez em Python? Confesso que função é meu 'calo de Aquiles em Python'. Muito Obrigado pelo feedback.

Início
-------- // Valor em reais
-------- função converterMoedas (valor_final,txCambio):
---------------- moeda_origem = digite a moeda de origem: (R) Real ou (D) Dólar
---------------- valor_origem = digite quanto você quer converter
---------------- moeda_convers = digite para qual moeda você quer converter: (R) Real ou (D) Dólar
---------------- Se moeda_origem == "R" E moeda_convers == "D":
------------------------ txCambio = digite a taxa de câmbio hoje
------------------------ valor_final = valor_origem/txCambio
---------------- Se moeda_origem == "D" E moeda_convers == "R":
------------------------ txCambio = digite a taxa de câmbio hoje
------------------------ valor_final = valor_origem*txCambio
-------- Retorne (valor_final)
Fim

Oi, Evandro! Tudo ótimo por aqui, e com você?

Excelente pergunta! O código de exemplo que usei na resposta anterior foi escrito em JavaScript (que é bem comum no desenvolvimento web), mas você tem toda razão em notar a semelhança. Java, JavaScript, Python e muitas outras linguagens compartilham conceitos parecidos, mudando apenas a forma de escrever (a sintaxe).

Não há problema nenhum em fazer em Python, pelo contrário! Usar a linguagem com a qual você já tem afinidade é a melhor forma de estudar. E pode ficar tranquilo: funções costumam gerar dúvidas no começo, mas, assim que pegamos a lógica de "entrada, processamento e saída", tudo clareia.

Analisando a lógica que você propôs no seu novo algoritmo, você teve uma ótima iniciativa ao permitir que o usuário escolha a direção da conversão (Real para Dólar ou Dólar para Real). Isso deixa o programa completo!

Para te ajudar a superar esse "calcanhar de Aquiles", vamos ajustar dois pontos importantes sobre como as funções operam:

  1. Onde pedir os dados: Em vez de colocar os comandos de leitura (digite a moeda..., digite a taxa...) dentro da função, o ideal é deixar que o programa principal faça as perguntas ao usuário. A função deve focar apenas em receber esses valores prontos, calcular e devolver o resultado.
  2. Parâmetros de entrada: Os parâmetros que colocamos entre parênteses na função servem para enviar os dados que ela precisa para calcular. No seu rascunho, valor_final foi colocado ali, mas ele na verdade é o resultado que a função vai descobrir e devolver através do return.

Veja como essa sua mesma ideia fica estruturada de forma limpa em Python:

A função recebe apenas o valor a ser convertido, a taxa de câmbio e a direção da conversão. Ela faz o cálculo e faz o return do resultado:

def converter_moedas(valor_origem, tx_cambio, moeda_origem):
    # se a origem é Real, dividimos pela taxa para achar o Dólar
    if moeda_origem == "R":
        valor_final = valor_origem / tx_cambio
    # se a origem é Dólar, multiplicamos pela taxa para achar o Real
    else:
        valor_final = valor_origem * tx_cambio
        
    return valor_final  # Devolve o resultado para quem chamou a função

O programa principal (Interação com o usuário)

Aqui fora é onde fazemos as perguntas e chamamos a função passando os dados capturados:

# 1. Coleta dos dados
origem = input("Digite a moeda de origem: (R) Real ou (D) Dólar: ").upper()
valor = float(input("Digite o valor que você quer converter: "))
taxa = float(input("Digite a taxa de câmbio atual: "))

# 2. chamada da função guardando o retorno em uma variável
resultado = converter_moedas(valor, taxa, origem)

# 3. exibição do resultado
if origem == "R":
    print(f"R$ {valor} equivale a US$ {resultado:.2f}")
else:
    print(f"US$ {valor} equivale a R$ {resultado:.2f}")

Repare como o return da função entrega o valor calculado direto para a variável resultado no programa principal.

Conseguiu perceber a diferença entre o que a função recebe de informação e o que ela devolve no final?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!