Python 中的内置数字类型有三种:ints、floats 和 complex。不过在本练习中,你只会用到 ints 和 floats。
ints 是整数,例如 1234、-10、20201278。
Python 中的整数具有任意精度,位数只受宿主系统可用内存的限制。
floats 是带小数点的数字,例如 0.0、3.14、-9.01。
浮点数在 Python 中通常用 C 里的 double 实现(精度为 15 位小数),但其表示方式会因宿主系统和其他实现细节而有所不同。这在使用浮点数时可能带来一些意外,但对大多数场景来说已经“足够好”了。
更多细节和讨论,可以参考以下资源:
Python 完全支持 ints 和 floats 之间的算术运算。在使用二元算术运算符(+、-、*、/、// 和 %)时,它会把范围较窄的数字转换成与之对应的较宽类型。
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 的数学不太好。他非常担心在旅途中被货币兑换处骗,于是想让你帮他做一个货币计算器。以下是他为这个应用提出的要求:
创建exchange_money()函数,它接收 2 个形参:
budget:你计划兑换的金额。exchange_rate:与一单位外币等值的本币金额。这个函数应该返回兑换后货币的值。
注意: 如果你的货币是 USD,想按1.20的汇率把 USD 兑换成 EUR,那么1.20 USD == 1 EUR。
>>> exchange_money(127.5, 1.2)
106.25
创建get_change()函数,它接收 2 个形参:
budget:兑换前的金额。exchanging_value:从预算中扣除用于兑换的金额。这个函数应该返回预算中剩余的金额。
>>> get_change(127.5, 120)
7.5
创建get_value_of_bills()函数,它接收 2 个形参:
denomination:单张纸币的面值。number_of_bills:纸币的总张数。这个兑换处只处理以特定面额单位计量的现金。你收到的总额必须能被一张“纸币”(即一个单位)的面值整除,除不尽时会留下小数或余数。你的函数应该只返回兑换处返还的纸币总价值(不含小数部分)。遗憾的是,兑换处会把余数或零头当作额外的好处留下。
>>> get_value_of_bills(5, 128)
640
创建get_number_of_bills()函数,它接收amount和denomination。
这个函数应该返回在给定的 金额 内你能收到的 纸币张数。换句话说:起始金额能容纳多少张 整张纸币?记住,你只能收到 整张纸币,而不能收到纸币的零头,所以要相应地做除法。实际上,你是在向最接近的整张纸币/面值 向下 取整。
>>> get_number_of_bills(127.5, 5)
25
创建get_leftover_of_bills()函数,它接收amount和denomination。
这个函数应该返回在给定纸币面值的情况下,从起始 金额 中无法返还的 余额。准确知道兑换处会留下多少钱非常重要。
>>> get_leftover_of_bills(127.5, 20)
7.5
创建exchangeable_value()函数,它接收budget、exchange_rate、spread和denomination。
形参spread是作为兑换手续费收取的百分比,用整数表示。需要把它除以 100,转换为小数。如果1.00 EUR == 1.20 USD,而点差为10,那么实际汇率将是:1.00 EUR == 1.32 USD,因为 1.20 的 10% 是 0.12,这笔额外费用会计入兑换。
这个函数应该返回在计算了汇率加上点差之后,新货币的最大价值。记住,货币的面值是整数,不能再细分。
注意: 返回值应该是int类型。
>>> exchangeable_value(127.25, 1.20, 10, 20)
80
>>> exchangeable_value(127.25, 1.20, 10, 5)
95