【趣学Python算法100例】个人所得税

问题描述

编写一个计算个人所得税的程序,要求输入收入金额后,能够输出应缴的个人所得税。个人所得税征收办法如下:

起征点为2000元。

  • 不超过500元的部分,征收5%。
  • 超过500~2000元的部分,征收10%。
  • 超过2000~5000元的部分,征收15%。
  • 超过5000~20000元的部分,征收20%。
  • 超过20000~40000元的部分,征收25%。
  • 超过40000~60000元的部分,征收30%。
  • 超过60000~80000元的部分,征收35%。
  • 超过80000~100000元的部分,征收40%。
  • 超过100000元以上的,征收45%。

解决思路

根据上述代码,计算个人所得税的解决思路可以分为几个主要步骤:

解决思路:

  1. 定义起征点和税率表 :
    • 设定一个常量 TAXBASE 为 2000,表示个人所得税的起征点。
    • 创建一个列表 TaxTable,包含多个元组,每个元组代表一个税率区间。每个元组由三个元素组成:起始点、截止点和对应的税率。
  2. 获取用户输入 :
    • 提示用户输入个人收入金额,将其存储在变量 profit 中。
  3. 计算应纳税收入 :
    • 从输入的收入中减去起征点 TAXBASE,得到应纳税收入。如果计算后的收入小于等于0,直接返回税额为0。
  4. 逐步计算税额 :
    • 遍历税率表 TaxTable,对于每个税率区间:
      • 检查应纳税收入是否超过当前区间的起始点。
      • 计算在当前税率区间内的应税收入,即在当前区间的起始点和截止点之间的部分,使用 min 函数确保不超过应纳税收入。
      • 根据当前区间的税率计算税额,并将其累加到总税额中。
      • 更新剩余的应纳税收入。
      • 打印当前征税区间的信息,包括范围、在该区间内缴税的金额及超出该范围的剩余收入。
  5. 输出结果 :
    • 在计算完成后,返回总的税额,并打印最终的个人所得税金额。

完整的程序

根据上面的分析,编写程序如下:

python 复制代码
TAXBASE = 2000

# 分为9个阶段,每个阶段包含起始点、截止点和税率
TaxTable = [
    (0, 500, 0.05),
    (500, 2000, 0.10),
    (2000, 5000, 0.15),
    (5000, 20000, 0.20),
    (20000, 40000, 0.25),
    (40000, 60000, 0.30),
    (60000, 80000, 0.35),
    (80000, 100000, 0.40),
    (100000, float('inf'), 0.45)  # 用float('inf')表示无穷大
]

# 计算税收
def calculate_tax(profit):
    tax = 0.0
    profit -= TAXBASE  # 超过个税起征点的收入

    if profit <= 0:
        return tax  # 如果没有应纳税收入,直接返回

    for start, end, rate in TaxTable:
        if profit > start:
            taxable_income = min(profit, end) - start
            tax += taxable_income * rate
            profit -= taxable_income

            print(f"征税范围:{start:6}~{end:6}  该范围内缴税金额:{taxable_income * rate:6.2f}  超出该范围的金额:{profit:.2f}")

            if profit <= 0:
                break  # 如果利润不足以再征税,退出循环

    return tax

if __name__ == '__main__':
    profit = float(input("请输入个人收入金额: "))
    tax = calculate_tax(profit)
    print(f"您的个人所得税为 {tax:.2f}")

行结果

在vscode下运行程序,屏幕上提示"请输入个人收入金额:",输入5678,运行结果如下图所示。

相关推荐
Sakura_j_h_2 分钟前
给 FastAPI 接大模型:超时、重试和 token 成本该怎么管
python·大模型·fastapi·超时重试·token计费
forest_097 分钟前
用Python复刻ClaudeDuet:主动式Agent四件套,定时晨报、后台巡检、危险动作审批(附完整可运行代码)
人工智能·python·架构·prompt·agi
小小张说故事31 分钟前
Python 的函数调用到底贵在哪?拆开一次 call:51 纳秒栈帧与 *args 的 40 纳秒罚单
python
程序猿乐锅1 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节
lzqrzpt1 小时前
太阳能控制器选型要点:电路工艺与工程适配技术解析
python·1024程序员节
code2cat2 小时前
Java高级篇之Hibernate:让对象映射到表,理解持久化与事务
java·后端·hibernate·1024程序员节
Younglina2 小时前
三个晚上,我和 WorkBuddy 做了个生图网站
前端·后端·ai编程
databook2 小时前
时间序列数据中,如何找出缺失值
python·数据分析
金銀銅鐵3 小时前
[Java] 用 CLI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
陈随易3 小时前
副业搞钱点子之收入查看器
前端·后端