天天看点

《Python语言程序设计》——3.4 实例研究:最小数量的硬币

本节书摘来自华章计算机《python语言程序设计》一书中的第3章,第3.4节,作者:[美]梁勇(y. daniel liang) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

现在,我们来看一个使用本节所讲的特性的示例程序。假如你想开发一个程序将一定数量的钱分类成几个更小货币单元。该程序让用户输入总金额,这是一个用美元和美分表示的浮点值,然后输出一个报告,罗列出等价的货币:美元、两角五分硬币、一角硬币、五分硬币以及美分个数,如示例运行所示。

你的程序应该报告最大数目的美元,然后依次是二角五分硬币、一角硬币、五分硬币以及美分个数,这样就得到最小量的硬币。

下面是编写这个程序的步骤:

1)提示用户输入一个十进制带小数点的数字,例如:11.56。

2)将钱数(11.56)转换成分数(1156)。

3)将分数除以100得到美元个数。使用分数%100得到余数即是剩余的分数。

4)将剩余的分数除以25得到两角五分硬币的个数。使用分数%25得到余数即是剩余的分数。

5)将剩余的分数除以10得到一角硬币的个数。使用分数%10得到余数即是剩余的分数。

6)将剩余的分数除以5得到五分硬币的个数。使用分数%5得到余数即是剩余的分数。

7)剩余的分数就是一美分硬币数。

8)显示结果。

完整的程序如程序清单3-4 所示。

程序清单3-4 computechange.py

《Python语言程序设计》——3.4 实例研究:最小数量的硬币
《Python语言程序设计》——3.4 实例研究:最小数量的硬币

变量amount存储的是来自控制台的变量(第2行)。这个变量保持不变,因为amount必须在程序的结尾显示结果。程序引入一个变量remainingamount(第5行)以存储变化的remainingamount。

变量amount是一个浮点数,代表的是美元和美分。它被转换为一个表示美分的整型变量remainingamount。例如:如果amount为11.56,那么remainingamount的初始值是1156。1156//100是11(第8行)。求余运算符得到除法的余数。因此,1156%100=56(第9行)。

这个程序是从remainingamount中提取出最大数目的两角五分硬币,然后获得一个新的remainingamount(第12~13行)。持续相同的过程,程序就可以在剩余数目中得到一角硬币、五分硬币和美分的最大数目。

如示例运行所示,结果中显示:0个一角硬币、1个五分硬币和1个美分。如果不显示0个一角硬币而只是显示1个五分硬币和1个美分的话就更好了。你将在下一章学习如何使用选择语句修改这个程序(参见编程题4.7)。

警告:这个例子涉及的一个严重问题是在将一个浮点数转换成整型remainingamount的时候可能会损失精度。这就可能导致一个不准确的结果。如果你试图输入10.03,10.03*100可能是1003.999 999 999 999 9。你就会发现程序最终结果为10美元和2美分。为了解决这个问题,输入用美分表示的整型数值(参见编程题3.8)。