學習軌道
/
Python
Python
/
練習
/
貨幣兌換
貨幣兌換

貨幣兌換

學習練習

簡介

數字

Python 內建了三種不同的數字型態:ints、floats 和 complex。不過,這個練習只會用到 ints 和 floats。

ints

ints 是整數,例如 1234、-10、20201278。

Python 的整數具有任意精度,位數只受限於主機系統的可用記憶體。

floats

floats 是含有小數點的數字,例如 0.0、3.14、-9.01。

浮點數在 Python 中通常是用 C 的 double 實作(精確度為 15 位小數),但實際的表示方式會依主機系統和其他實作細節而有所不同。在處理浮點數時,這可能會帶來一些意想不到的結果,不過對大多數情況來說已經「夠好了」。

你可以在下列資源中看到更多細節與討論:

算術

Python 完整支援 ints 和 floats 之間的算術運算。與二元算術運算子(+、-、*、/、// 和 %)搭配使用時,Python 會把較窄的數字轉換成較寬一方的型態。

Python 認為 ints 比 floats 窄,所以在運算式中使用浮點數,結果也一定是浮點數。不過進行除法時,即使只用整數,結果也一定是浮點數。

# 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

如果需要整數結果,可以用 // 截去小數部分。

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

要把浮點數轉成整數,可以使用 int();要把整數轉成浮點數,可以使用 float()。

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

說明

你的朋友 Chandler 計劃到世界各地充滿異國風情的國家旅行。可惜的是,Chandler 的數學不太好。他很擔心在旅途中被貨幣兌換騙錢,所以希望你能幫他做一個貨幣計算機。以下是他為這個應用程式所列的規格:

1. 估算兌換後的價值

建立exchange_money()函式,它接受 2 個參數:

  1. budget:你打算兌換的金額。
  2. exchange_rate:相當於一單位外幣的本國貨幣金額。

這個函式應該回傳兌換後的貨幣價值。

注意: 如果你的貨幣是 USD,而你想以1.20的匯率把 USD 兌換成 EUR,那麼1.20 USD == 1 EUR。

>>> exchange_money(127.5, 1.2)
106.25

2. 計算兌換後剩下的貨幣

建立get_change()函式,它接受 2 個參數:

  1. budget:兌換前的金額。
  2. exchanging_value:從預算中取出用來兌換的金額。

這個函式應該回傳預算中剩下的金額。

>>> get_change(127.5, 120)
7.5

3. 計算紙鈔的價值

建立get_value_of_bills()函式,它接受 2 個參數:

  1. denomination:單張紙鈔的面額。
  2. number_of_bills:紙鈔的總張數。

這個兌換窗口只收受特定面額單位的現金。 你收到的總金額必須能被一張「紙鈔」或單位的價值整除,而這可能會留下小數或餘數。 你的函式應該只回傳兌換窗口會找給你的紙鈔總價值(不含小數部分)。 可惜的是,剩下的餘數或零頭就歸兌換窗口所有,當作額外的好處。

>>> get_value_of_bills(5, 128)
640

4. 計算紙鈔的張數

建立get_number_of_bills()函式,接受amount和denomination。

這個函式應該回傳在給定的_amount_之內,你能收到的_紙鈔張數_。 換句話說:起始的金額裡可以容納多少張_整張的紙鈔_? 記住,你只能收到_整張的紙鈔_,不能收到不足一張的部分,所以要記得據此做除法。 實際上,你就是_向下_取整到最接近的整張紙鈔或面額。

>>> get_number_of_bills(127.5, 5)
25

5. 計算兌換成紙鈔後的剩餘金額

建立get_leftover_of_bills()函式,接受amount和denomination。

這個函式應該回傳在給定紙鈔面額的情況下,無法從你起始的_amount_中兌換回來的_剩餘金額_。 確切知道兌換窗口能留下多少錢,非常重要。

>>> get_leftover_of_bills(127.5, 20)
7.5

6. 計算兌換後的價值

建立exchangeable_value()函式,接受budget、exchange_rate、spread和denomination。

參數spread是以整數表示、作為兌換手續費收取的百分比。 你需要將它除以 100 換算成小數。 如果1.00 EUR == 1.20 USD,而spread是10,實際的匯率會是:1.00 EUR == 1.32 USD,因為 1.20 的 10% 是 0.12,而這筆額外的手續費會加到兌換上。

這個函式應該回傳在計算匯率加上spread之後,新貨幣的最大價值。 記住,貨幣的面額是整數,無法再細分。

注意: 回傳值應為int型別。

>>> exchangeable_value(127.25, 1.20, 10, 20)
80
>>> exchangeable_value(127.25, 1.20, 10, 5)
95
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Python Exercism

準備好開始 貨幣兌換 了嗎?

註冊 Exercism,透過 17 個概念146 個練習 和真人引導來學習並精通 Python,全部免費。