Percursos
/
Python
Python
/
Exercícios
/
Câmbio de moedas
Câmbio de moedas

Câmbio de moedas

Exercício de aprendizagem

Introdução

Números

Existem três tipos diferentes de números incorporados no Python: ints, floats e complex. No entanto, neste exercício vais lidar apenas com ints e floats.

ints

Os ints são números inteiros, por exemplo 1234, -10, 20201278.

Os inteiros em Python têm precisão arbitrária — o número de algarismos é limitado apenas pela memória disponível do sistema anfitrião.

floats

Os floats são números com parte decimal, por exemplo 0.0, 3.14, -9.01.

Os números de vírgula flutuante são normalmente implementados em Python com um double em C (15 casas decimais de precisão), mas a representação varia consoante o sistema anfitrião e outros detalhes de implementação. Isto pode causar algumas surpresas ao trabalhar com números de vírgula flutuante, mas é "suficientemente bom" para a maioria das situações.

Podes ver mais detalhes e discussões nos seguintes recursos:

Aritmética

O Python suporta totalmente a aritmética entre ints e floats. Converte os números mais estreitos para corresponderem aos seus equivalentes menos estreitos quando são usados com os operadores aritméticos binários (+, -, *, /, // e %).

O Python considera os ints mais estreitos do que os floats. Por isso, usar um float numa expressão garante que o resultado também será um float. No entanto, ao fazer uma divisão, o resultado é sempre um float, mesmo que só se usem números inteiros.

# The int is widened to a float here, and a float type is returned.
>>> 3 + 4.0
7.0
>>> 3 * 4.0
12.0
>>> 3 - 2.0
1.0
# Division always returns a float.
>>> 6 / 2
3.0
>>> 7 / 4
1.75
# Calculating remainders.
>>> 7 % 4
3
>>> 2 % 4
2
>>> 12.75 % 3
0.75

Se precisares de um resultado inteiro, podes usar // para truncar o resultado.

>>> 6 // 2
3
>>> 7 // 4
1

Para converteres um float num número inteiro, podes usar int(). Para converteres um número inteiro num float, podes usar float().

>>> int(6 / 2)
3
>>> float(1 + 2)
3.0

Instruções

O teu amigo Chandler planeia visitar países exóticos de todo o mundo. Infelizmente, o Chandler não é bom a matemática. Está bastante preocupado em ser enganado pelas casas de câmbio durante a viagem, e quer que lhe faças uma calculadora de moedas. Aqui estão as especificações dele para a aplicação:

1. Estimar o valor após o câmbio

Cria a função exchange_money(), que recebe 2 parâmetros:

  1. budget : O orçamento que planeias trocar.
  2. exchange_rate : A quantia de moeda nacional equivalente a uma unidade de moeda estrangeira.

Esta função deve devolver o valor da moeda trocada.

Nota: Se a tua moeda for USD e quiseres trocar USD por EUR com uma taxa de câmbio de 1.20, então 1.20 USD == 1 EUR.

>>> exchange_money(127.5, 1.2)
106.25

2. Calcular a moeda que sobra após um câmbio

Cria a função get_change(), que recebe 2 parâmetros:

  1. budget : O orçamento antes do câmbio.
  2. exchanging_value : A quantia de dinheiro que é retirada do orçamento para ser trocada.

Esta função deve devolver o dinheiro que sobra do orçamento.

>>> get_change(127.5, 120)
7.5

3. Calcular o valor das notas

Cria a função get_value_of_bills(), que recebe 2 parâmetros:

  1. denomination : O valor de uma única nota.
  2. number_of_bills : O número total de notas.

Este posto de câmbio só trabalha com dinheiro em determinados incrementos. O total que recebes tem de ser divisível pelo valor de uma "nota" ou unidade, o que pode deixar uma fração ou um resto. A tua função deve devolver apenas o valor total das notas (excluindo os montantes fracionários) que o posto devolveria. Infelizmente, o posto fica com o resto/troco como bónus extra.

>>> get_value_of_bills(5, 128)
640

4. Calcular o número de notas

Cria a função get_number_of_bills(), que recebe amount e denomination.

Esta função deve devolver o número de notas de moeda que podes receber dentro do amount indicado. Por outras palavras: quantas notas inteiras de moeda cabem no montante inicial? Lembra-te de que só podes receber notas inteiras, não frações de notas, por isso não te esqueças de dividir em conformidade. Na prática, estás a arredondar por defeito para a nota/denominação inteira mais próxima.

>>> get_number_of_bills(127.5, 5)
25

5. Calcular o que sobra depois de trocar por notas

Cria a função get_leftover_of_bills(), que recebe amount e denomination.

Esta função deve devolver o montante que sobra que não pode ser devolvido do amount inicial, dada a denominação das notas. É muito importante saber exatamente quanto é que o posto fica a ganhar.

>>> get_leftover_of_bills(127.5, 20)
7.5

6. Calcular o valor após o câmbio

Cria a função exchangeable_value(), que recebe budget, exchange_rate, spread e denomination.

O parâmetro spread é a percentagem cobrada como comissão de câmbio, escrita como um número inteiro. Tem de ser convertido em decimal, dividindo-o por 100. Se 1.00 EUR == 1.20 USD e o spread for 10, a taxa de câmbio real será: 1.00 EUR == 1.32 USD, porque 10% de 1.20 é 0.12, e esta comissão adicional é somada ao câmbio.

Esta função deve devolver o valor máximo da nova moeda depois de calcular a taxa de câmbio mais o spread. Lembra-te de que a denominação da moeda é um número inteiro e não pode ser subdividida.

Nota: O valor devolvido deve ser do tipo int.

>>> exchangeable_value(127.25, 1.20, 10, 20)
80
>>> exchangeable_value(127.25, 1.20, 10, 5)
95
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Câmbio de moedas?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.