Python編程算法【十三】 個(gè)人所得稅_簡化版
【案例內(nèi)容】
編寫一個(gè)計(jì)算個(gè)人所得稅的程序,要求輸入金額后,能夠輸出應(yīng)繳的個(gè)人所得稅。個(gè)人所得稅的征收辦法如下:
起征點(diǎn)為2000元。
不超過500元的部分,征收5%
超過500~2000元的部分,征收10%
超過2000~5000元的部分,征收15%
超過5000~20000元的部分,征收20%
超過20000~40000元的部分,征收25%
超過40000~60000元的部分,征收30%
【解題思路】
bisect是python的內(nèi)置模塊,它的原理是通過二分查找法,快速實(shí)現(xiàn)有序序列(如列表)的查找和插入。本題就用到它的查找功能。 以本題為例,可將超出的征稅金額的分界點(diǎn)放在列表里,比如:moneys = [0, 500, 2000, 5000, 20000, 40000, 60000, 80000, 100000] 再把各個(gè)稅率分界點(diǎn)也放在一個(gè)列表里,比如: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的金額,當(dāng)然前提要先判斷 my_money 是否大于2000,如果大,則利用 bisect_left 的方法,在 moneys 列表中判斷 ex_money 在哪個(gè)分界點(diǎn)的左側(cè),并記錄下相應(yīng)的序號(hào)(index) 舉例來說:超出的金額,即 ex_money = 300,它在分界點(diǎn)500的左側(cè),因此序號(hào) index = 1;再比如,ex_money = 7360,它在分界點(diǎn)20000的左側(cè),因此 index = 4;以此類推 另外,如果超出的金額剛好是分界點(diǎn),比如600000,由于用的是 bisect_left 方法,所以也在分界點(diǎn)60000的左側(cè),即序號(hào) index = 6 拿到序號(hào)后,再配合上 tax 列表,不就可以輕松計(jì)算出相應(yīng)的稅費(fèi)了嗎?
【Python代碼】?

當(dāng)然本題的解法,比較簡單粗暴,只是把超出2000的金額,直接參照題目相應(yīng)的扣稅條件,看看符合哪個(gè)稅率條件,然后算出稅費(fèi)就結(jié)束了。實(shí)際上是要將超出起征點(diǎn)的金額,算出在每個(gè)征稅范圍內(nèi)應(yīng)繳納的稅費(fèi),然后再全部累計(jì)起來,得到最后應(yīng)繳納的稅費(fèi)??闪舸o讀者朋友們進(jìn)一步實(shí)踐。本題更主要的是向大家展示 bisect 模塊的便利與高效之處,它能提高有序數(shù)組中查找某一數(shù)據(jù)的執(zhí)行效率。