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!

1
resposta

[Desafio] Conversor de moedas

Usei um dicionário (moedas) para organizar as informações. Isso é superior a vários if/else, pois facilita adicionar novas moedas sem alterar a lógica do menu.
A função converter_moeda agora não apenas divide o valor pela taxa, mas subtrai 1% do resultado final, simulando uma taxa de serviço real de corretagem ou IOF.
O código percorre o dicionário (for key, info in moedas.items()) para gerar o menu automaticamente. Se você decidir mudar o nome de uma moeda, o menu se atualizará sozinho.
Segurança: O programa continua tratando entradas inválidas, garantindo que o usuário não consiga "quebrar" o sistema digitando textos onde deveriam estar números.

def converter_moeda(valor_reais, taxa_cambio):
    """Calcula a conversão aplicando a taxa de serviço de 1%."""
    
    # 1% de taxa sobre o valor convertido (ou sobre o original, aqui aplicado ao final)
    
    valor_liquido = valor_reais / taxa_cambio
    taxa_servico = valor_liquido * 0.01
    return valor_liquido - taxa_servico

def sistema_conversor():
    # Dicionário com as 4 moedas mais usadas (Taxas aproximadas)
    moedas = {
        "1": {"nome": "Dólar Americano (USD)", "taxa": 5.50},
        "2": {"nome": "Euro (EUR)", "taxa": 6.00},
        "3": {"nome": "Libra Esterlina (GBP)", "taxa": 7.10},
        "4": {"nome": "Iene Japonês (JPY)", "taxa": 0.035}
    }
    
    print("--- Conversor Global de Moedas (Taxa de 1% aplicada) ---")
    
    try:
        valor = float(input("Digite o valor em Reais (R$): "))
        if valor < 0:
            print("Erro: Valor negativo não permitido.")
            return
    except ValueError:
        print("Erro: Valor inválido.")
        return

    print("\nEscolha a moeda para conversão:")
    for key, info in moedas.items():
        print(f"{key} - {info['nome']}")
    
    escolha = input("\nDigite o número da opção desejada: ")
    
    if escolha in moedas:
        moeda_escolhida = moedas[escolha]
        resultado = converter_moeda(valor, moeda_escolhida["taxa"])
        print(f"\nResultado em {moeda_escolhida['nome']}: {resultado:.2f}")
        print("(Valor já com desconto da taxa de serviço de 1%)")
    else:
        print("Opção inválida!")

sistema_conversor()
1 resposta

Oi, Eugênio. Tudo bem com você?

Obrigado por compartilhar sua solução para o desafio do conversor de moedas. Sua proposta amplia a atividade de maneira interessante ao utilizar um dicionário para concentrar as informações das moedas, tornando a manutenção mais simples caso seja necessário adicionar ou remover opções no futuro. Também foi uma boa escolha separar a conversão na função converter_moeda, pois isso favorece a reutilização do código e deixa a lógica principal mais organizada. Além disso, o tratamento de ValueError e a validação de valores negativos contribuem para tornar a aplicação mais robusta diante de entradas inválidas.

A geração automática do menu com for key, info in moedas.items() é uma solução escalável e evita duplicação de código. A inclusão da taxa de serviço de 1% também é válida, já que você explicou essa adaptação e ela preserva a lógica principal do exercício. Como sugestão de evolução, seria interessante permitir que o usuário realizasse várias conversões na mesma execução, utilizando um laço de repetição, ou exibir o valor convertido antes e depois da aplicação da taxa para facilitar a comparação dos resultados.

Como você adaptaria esse programa para obter as taxas de câmbio de uma fonte externa, em vez de mantê-las fixas no dicionário?

Parabéns pela implementação e por compartilhar sua solução no fórum. Continue explorando novas formas de evoluir seus projetos. O fórum está à disposição para acompanhar seu aprendizado.

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