Python编程算法【十三】 个人所得税_简化版
【案例内容】
编写一个计算个人所得税的程序,要求输入金额后,能够输出应缴的个人所得税。个人所得税的征收办法如下:
起征点为2000元。
不超过500元的部分,征收5%
超过500~2000元的部分,征收10%
超过2000~5000元的部分,征收15%
超过5000~20000元的部分,征收20%
超过20000~40000元的部分,征收25%
超过40000~60000元的部分,征收30%
【解题思路】
bisect是python的内置模块,它的原理是通过二分查找法,快速实现有序序列(如列表)的查找和插入。本题就用到它的查找功能。 以本题为例,可将超出的征税金额的分界点放在列表里,比如:moneys = [0, 500, 2000, 5000, 20000, 40000, 60000, 80000, 100000] 再把各个税率分界点也放在一个列表里,比如:tax = [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45] 用变量 my_money 记录用户输入的金额,用变量 ex_money = my_money - 2000 记录超出2000的金额,当然前提要先判断 my_money 是否大于2000,如果大,则利用 bisect_left 的方法,在 moneys 列表中判断 ex_money 在哪个分界点的左侧,并记录下相应的序号(index) 举例来说:超出的金额,即 ex_money = 300,它在分界点500的左侧,因此序号 index = 1;再比如,ex_money = 7360,它在分界点20000的左侧,因此 index = 4;以此类推 另外,如果超出的金额刚好是分界点,比如600000,由于用的是 bisect_left 方法,所以也在分界点60000的左侧,即序号 index = 6 拿到序号后,再配合上 tax 列表,不就可以轻松计算出相应的税费了吗?
【Python代码】

当然本题的解法,比较简单粗暴,只是把超出2000的金额,直接参照题目相应的扣税条件,看看符合哪个税率条件,然后算出税费就结束了。实际上是要将超出起征点的金额,算出在每个征税范围内应缴纳的税费,然后再全部累计起来,得到最后应缴纳的税费。可留待给读者朋友们进一步实践。本题更主要的是向大家展示 bisect 模块的便利与高效之处,它能提高有序数组中查找某一数据的执行效率。