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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM