python税后工资计算器

 

 

 

介绍

重新实现上一个挑战中的个税计算器,可以计算并处理多人的工资并打印税后工资。

项目需求改变:

  1. 输出税后工资
  2. 计算过程需要扣除社会保险费用
  3. 支持多人同时计算工资
  4. 打印税后工资列表

个税计算公式:

  1. 应纳税所得额 = 工资金额 - 各项社会保险费 - 起征点(3500元)
  2. 应纳税额 = 应纳税所得额 × 税率 - 速算扣除数

其中各项社会保险费我们在本程序中需要计算,计算公式由于各地不一样,我们此处使用国内某一城市的计算比例,占工资金额的比例如下:

  • 养老保险:8%
  • 医疗保险:2%
  • 失业保险:0.5%
  • 工伤保险:0%
  • 生育保险:0%
  • 公积金:6%

注意,此处不考虑社保缴费基数的问题。直接使用工资金额计算社保费用即可。

税率及速算扣除数对应表:

应纳税所得额税率速算扣除数(元)
不超过 1500 元 3% 0
超过 1500 元至 4500 元 10% 105
超过 4500 元至 9000 元 20% 555
超过 9000 元至 35000 元 25% 1005
超过 35000 元至 55000 元 30% 2755
超过 55000 元至 80000 元 35% 5505
超过 80000 元 45% 13505

例如工资金额为 5000,那么五险一金缴纳 825 元,应纳税所得额为 675(5000-825-3500),应纳税额为 20.25 元(675*3% - 0)。税后工资为 4154.75(5000-825-20.25)。

程序的输入为员工的工号和工资金额,输入的格式为 工号:工资 工号:工资,程序使用 Python3 运行,执行过程如下:

注意:输出必须严格按照上述格式,在冒号的两边不能有空格

需要注意,程序执行的参数有一个或多个,并且参数为工号及工资金额,工资金额需要为整数,如果参数数量不准确或者无法转成整数,需要打印下面这一行的错误信息:

目标

完成任务需要达成的目标:

  1. 程序存放的位置 /home/shiyanlou/calculator.py
  2. 程序可以处理1个及多个员工工资计算,输出的内容为1行或多行,每行内容必须为工号:税后工资
  3. 程序返回的税后工资数字保留两位小数,如果是整数,仍然需要保留xxx.00 这种形式

注意

  1. try except 判断异常的时候只需要包含可能出现异常的代码,比如将输入的字符串转换成 int 的时候,不需要包含所有的代码
  2. Python 中对每行的缩进要求严格,务必不要TAB与空格混用,建议使用空格来进行缩进,缩进使用4个空格。

提示语

  • 参数列表是 sys.argv[1:](这种切片的方式是去掉第一个 sys.argv[0]之后的参数列表),然后使用 for 循环取出每个参数 for arg in sys.argv[1:]:,arg 的值类似 101:3500 的字符串,然后使用这个字符串的 arg.split(':') 分成两部分的列表,前一部分是101,后面的是 3500,注意这都是字符串,再使用 int() 转成数字。
  • 将参数转成整数可以使用 int() ,如果不能正确转成整数(例如 int('abcd')),需要处理异常并打印上面的错误信息。
  • 输出保留两位小数可以使用字符串的 format 函数格式化
  • 命令行参数获取方法是使用 sys 模块的 sys.argv,其中 sys.argv[0] 为脚本名称, sys.argv[1] 为第一个参数,示例:

  • 多个参数的处理方式可以使用列表或字典来存储、计算、输出员工工资信息
  • 计算社保及个税的过程可以写成函数,调用起来更方便

最后,因为后续的挑战将会用到现在写的代码,请使用 下载代码 保存到本地或者提交到自己的 Github。

知识点

  • Python3 基础语法
  • 列表及字典
  • 格式化输出
  • 命令行参数
  • 函数
#!/usr/bin/env python3
  2 import sys
  3 num = []
  4 mon = []
  5 i = 0
  6 def calculator():
  7 
  8         for argv in sys.argv[1:]:
  9             try:
 10                 #num.append(int(argv.split(':')[0]))
 11                 l = argv.split(':')
 12                 num.append(int(l[0]))
 13                 #mon.append(int(argv.split(':')[1]))
 14                 mon.append(int(l[1]))
 15             except:
 16                 print("Parameter Error")
 17 
 18         for i in range(len(mon)):
 19             m = mon[i]
 20             if m > 3500:
 21                 salary = m * 0.835 - 3500
 22                 if salary > 80000:
 23                     cal_salary = m * 0.835-(salary * 0.45 - 13505)
 24                 elif salary > 55000:
 25                     cal_salary = m * 0.835-(salary * 0.35 - 5505)
 26                 elif salary > 35000:
 27                     cal_salary = m * 0.835-(salary * 0.3 - 2755)
 28                 elif salary > 9000:
 29                     cal_salary = m * 0.835-(salary * 0.25 - 1005)
 30                 elif salary > 4500:
 31                     cal_salary = m * 0.835-(salary * 0.2 - 555)
 32                 elif salary > 1500:
 33                     cal_salary = m * 0.835-(salary * 0.1 - 105)
 34                 else:
 35                     cal_salary = m * 0.835-(salary * 0.03)
 36             else:
 37                     cal_salary = m * 0.835
 38             print("{}:{:.2f}".format(num[i],cal_salary))
 39 
 40             #for i in range(len(num)):
 41             #    n = num[i]
 42             #    print("{}:{:0.2f}".format(n,cal_salary))
 43             #    break
 44 calculator()

 

posted @ 2018-05-18 22:20  时代的稻草人  阅读(4082)  评论(0编辑  收藏  举报