Python算法100例-2.4 个人所得税

完整源代码项目地址,关注博主私信'源代码'后可获取

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.确定程序框架
  • 5.完整的程序

1.问题描述

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

起征点为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%。

2.问题分析

分析题目特点,我们可以考虑使用Python语言的列表和元组来描述题目中的条件。下面先讲解Python语言中列表和元组的语法要点。

(1)列表

列表是以方括号“[]”包围的数据集合,列表元素之间使用逗号“,”分割。列表的元素类型可以是任何数据类型,也可以包含另一个列表,可以通过列表的下标来访问列表中的元素,下标从0开始。列表的内容是可变的,定义一个列表如下:

list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

其中list[0]=1,list[1]=2,以此类推。

使用for语句遍历这个列表如下:

for i in list:
    print(i, end=" ")
1 2 3 4 5 6 7 8 9 

将会打印出:1 2 3 4 5 6 7 8 9。

下面是列表常用的操作方法。

·list.append(x):添加元素,将元素x添加到列表list的尾部。

·list.extend(aList):添加元素,将列表aList中的所有元素添加到列表list的尾部。

·list.insert(index,x):添加元素,在列表list中的指定位置index处插入元素x。

·list.remove(x):删除元素,在列表list中删除首次出现的指定元素x。

·list.pop([index]):删除元素,删除并返回列表list中指定位置index处的元素,默认是最后一个元素。

·list.clear():删除元素,删除列表中的所有元素,并不是删除列表对象。

·list.index(x):返回第一个x的索引位置,若不存在x元素则抛出异常。

·list.index(x1,x2):从索引位置x2开始往后搜索的第一个x1。

·list.count(x):返回指定元素x在列表list中出现的次数。

·len(list):返回列表中包含元素的个数。

·list.reverse():翻转列表,所有元素原地翻转。

·list.sort():对原列表进行排序,默认是升序。

·list.sort(reverse=True):降序排序。

·list.copy():返回列表对象的浅复制。

(2)元组

Python的元组与列表相似,元组是以圆括号“()”包围的数据集合。与列表不同的是元组的元素一旦确定就不能再改变,它是不可变数据类型。因此它常常被用在不希望数据被其他操作所改变的场景中。

如果圆括号中不包含任何内容,就是一个空元组。

定义一个元组如下:

tuple = ('a', 'b', 'c', 'd')

遍历元组如下:

for i in tuple:
    print(i, end=" ")
a b c d 

将会打印输出:a b c d。

3.算法设计

根据列表和元组的相关知识,这里可以同时使用列表和元组来存放不同的税率范围。接着使用for循环遍历每一个征税范围,将个人收入中超出起征点的金额在每个征税范围内应缴纳的税款累加起来,就得到最后应缴纳的个人所得税。

4.确定程序框架

(1)定义列表TaxTable

其中,元素类型使用元组,该列表描述了征税的范围及对应不同范围的税率。定义如下:

#分为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, 1e10, 0.45)]

(2)定义计算税率的函数CaculateTax()

其中,profit为个人收入,TAXBASE是个税起征点。profit-TAXBASE是个人收入中超出个税起征点的部分,仍存入profit变量中,在CaculateTax()中要计算出这部分收入的纳税金额。

#计算税收
def CaculateTax(profit):
    tax = 0.0
    profit -= TAXBASE                                                       # 超过个税起征点的收入
    i = 0
    for i in range(len(TaxTable)):
        # 判断profit是否在当前的缴税范围内
        if (profit > TaxTable[i][0]):
            if (profit > TaxTable[i][2]): # profit超过当前的缴税范围
                tax += (TaxTable[i][1] - TaxTable[i][0]) * TaxTable[i][2]

            else:                                                           # profit未超过当前的缴税范围
                tax += (profit - TaxTable[i][0]) * TaxTable[i][2]

            profit -= TaxTable[i][1]
            if profit < 0:
                profit = 0

            print("征税范围:%6d~%6d  该范围内缴税金额:%6.2f  超出该范围的金额:%6d" % (TaxTable[i][0], TaxTable[i][1], tax, profit))
    return tax


在CaculateTax()函数中使用了for循环,循环变量为i,循环次数与TaxTable数组中的元素个数相同。在循环体中用profit(注意此时的profit中存放的是个人收入中超过个税起征点的部分)与征税范围做比较,如果TaxTable[i][1]>profit>TaxTable[i][0],即profit恰好处于某个范围内,则在该范围内应缴税金额为:(profit-TaxTable[i][0])*TaxTable[i][2];如果profit>TaxTable[i][1],则在该范围内应缴税金额为:(TaxTable[i][1]-TaxTable[i][0])*TaxTable[i][2]。

使用for循环将每个征收范围遍历一遍,将各个范围内产生的缴税金额累加起来,就得到应该缴纳的个人所得税的总金额。

CaculateTax()函数的流程图如图所示。

在这里插入图片描述

5.完整的程序

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

%%time
# 个人所得税问题

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, 1e10, 0.45)]

#计算税收
def CaculateTax(profit):
    tax = 0.0
    profit -= TAXBASE                                               # 超过个税起征点的收入
    i = 0
    for i in range(len(TaxTable)):
        # 判断profit是否在当前的缴税范围内
        if (profit > TaxTable[i][0]):
            if (profit > TaxTable[i][2]):        # profit超过当前的缴税范围
                tax += (TaxTable[i][1] - TaxTable[i][0]) * TaxTable[i][2]

            else:                                                   # profit未超过当前的缴税范围
                tax += (profit - TaxTable[i][0]) * TaxTable[i][2]

            profit -= TaxTable[i][1]
            if profit < 0:
                profit = 0

            print("征税范围:%6d~%6d  该范围内缴税金额:%6.2f  超出该范围的金额:%6d" % (TaxTable[i][0], TaxTable[i][1], tax, profit))
    return tax

if __name__ == '__main__':
    print("请输入个人收入金额: ", end='\n')
    profit = int(input())
    print(f'输入的金额为:{profit}','\n')
    tax = CaculateTax(profit)
    print("您的个人所得税为 %12.2f" % tax)


请输入个人收入金额: 
输入的金额为:5678 

征税范围:     0~   500  该范围内缴税金额: 25.00  超出该范围的金额:  3178
征税范围:   500~  2000  该范围内缴税金额:175.00  超出该范围的金额:  1178
您的个人所得税为       175.00
CPU times: user 27.6 ms, sys: 6.23 ms, total: 33.8 ms
Wall time: 2.91 s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/405029.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jetson nano——安装archiconda

目录 1.archiconda3我在这提供了下载链接&#xff0c;点解下面链接即可1.看好文件所在位置&#xff0c;如果装错了&#xff0c;那么环境变量的路径自己进行相应的修改。2.添加环境变量 2.可能部分伙伴输入一些激活&#xff0c;啥的命令激活不了&#xff0c;那么输入下面这些代码…

初始Nginx(基本概念)

目录 一、Nginx的概念 二、Nginx常用功能 1、HTTP(正向)代理&#xff0c;反向代理 1.1正向代理 1.2 反向代理 2、负载均衡 2.1 轮询法&#xff08;默认方法&#xff09; 2.2 weight权重模式&#xff08;加权轮询&#xff09; 2.3 ip_hash 3、web缓存 三、基础特性 四…

【Java前端技术栈】Promise

一、Promise 基本介绍 1. 传统的 Ajax 异步调用在需要多个操作的时候&#xff0c;会导致多个回调函数嵌套&#xff0c;导致代码不够直观&#xff0c;就是常说的Callback Hell 2. 为了解决上述的问题&#xff0c;Promise对象应运而生&#xff0c;在 EMCAScript 2015当中已经成…

云HIS系统源码,基于云计算技术的B/S架构的云HIS系统,二甲医院信息管理系统

云HIS系统源码&#xff0c;采用云端SaaS服务的方式提供 基于云计算技术的B/S架构的云HIS系统&#xff0c;采用云端SaaS服务的方式提供&#xff0c;使用用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、智能…

lxml库和Xpath提取网页数据的基础与实战:完整指南与实战【第92篇—提取网页】

使用lxml库和Xpath提取网页数据的基础与实战 在网络爬虫和数据抓取中&#xff0c;从网页中提取所需信息是一项常见的任务。lxml库和Xpath是Python中用于解析和提取HTML/XML数据的强大工具。本文将介绍lxml库的基础知识&#xff0c;以及如何使用Xpath表达式来准确地提取网页数据…

CUDA自学笔记001 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

CUDA编程模型 我们使用CUDA_C语言进行CUDA编程&#xff0c; 1&#xff0c;CUDA编程模型提供了线程抽象接口用于控制GPU中的线程 2&#xff0c;CUDA编程模型提供了内存访问控制&#xff0c;我们可以实现主机和GPU设备内存的控制&#xff0c;我们可以实现CPU和GPU之间内存的数据传…

Fibonacci 数列与黄金分割【第十届】【省赛】【研究生组】

题目描述 Fibonacci 数列是非常著名的数列&#xff1a; F [ 1 ] 1 , F [ 2 ] 1 F[1]1,F[2]1 F[1]1,F[2]1&#xff0c;对于 i > 3 &#xff0c; F [ i ] F [ i − 1 ] F [ i − 2 ] 。 i>3&#xff0c;F[i]F[i−1]F[i−2]。 i>3&#xff0c;F[i]F[i−1]F[i−2]。…

系列五十二、idea中统一配置生成Java类的作者信息

一、idea中统一配置生成Java类的作者信息 1.1、位置 1.2、脚本 /*** Author : 一叶浮萍归大海* Date: ${DATE} ${TIME}* Model Description: * Description:*/

PowerDesigner:pdm文件与sql文件互相转,数据库类型切换

PowerDesigner 依据sql文件生成pdm file——reverse engineer—— database 依据pdm文件导出sql 选中——database——generate database 切换库类型

【MATLAB GUI】 4. 坐标区和表

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 文章目录 坐标区表 坐标区 任务要求设计一个图像显示界面&#xff0c;根据选定的周期做出相应的sin函数图像 使用坐标区、弹出式菜单、普通按钮设计页面&#xff0c;弹出式菜单string设置为1、2、3、4代…

LAPACK xgeqr2.f 算法总结推导

以 DGEQR2 函数为例&#xff0c;其分为两步&#xff1a; 先计算Householder vector&#xff0c;调用了 DLARFG( ) 然后实施了Householder 变换&#xff0c;调用了 DLARF( ) 接下来先分析DLARFG( )的算法 源代码如下&#xff1a; *> \brief \b DLARFG generates an e…

Bert基础(一)--自注意力机制

1、简介 当下最先进的深度学习架构之一&#xff0c;Transformer被广泛应用于自然语言处理领域。它不单替代了以前流行的循环神经网络(recurrent neural network, RNN)和长短期记忆(long short-term memory, LSTM)网络&#xff0c;并且以它为基础衍生出了诸如BERT、GPT-3、T5等…

开源软件:塑造软件行业未来的协作与创新之力

随着信息技术的迅猛发展&#xff0c;开源软件已经逐渐成为软件开发的潮流&#xff0c;以其独特的低成本、可协作性和透明度等特性&#xff0c;在全球范围内引起了广泛的关注和应用。越来越多的企业和个人选择使用开源软件&#xff0c;这不仅推动了软件行业的繁荣&#xff0c;还…

Android约束布局中用ConstraintHelper实现过渡动画效果

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一.创建一个类CircularRevealHelper继承ConstraintHelper代码如下 /*** Author: ly* Da…

sambamba — samtools 的高效平替工具

sambamba — samtools 的高效平替工具 sambamba 是一个 BAM 文件处理工具。 sambamba 它使用了 D 语言的多线程和异步 IO 特性&#xff0c;实现了高效的并行化处理。sambamba 可以在多核 CPU 上同时运行多个任务&#xff0c;利用硬盘和内存的带宽&#xff0c;提高了处理速度。…

多模态MLLM都是怎么实现的(1)

好多读者私信说想了解一下多模态的内容,我这人最大的优点就是听劝... 好,那么好 , 今天开始陆续写点多模态内容,没想好是不是要写个专栏(因为我之前挖的坑太多...),然而还是开了,今天先写点基础做个seed 有想了解一下多模态扫盲的读者,可以自己先看看这篇论文 2311.131…

代码随想录算法训练营day24|理论基础、77. 组合

理论基础 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法&#xff08;理论篇&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。回溯是递归的副产品&#xff0c;只要有递归…

原型设计工具Axure RP

Axure RP是一款专业的快速原型设计工具。Axure&#xff08;发音&#xff1a;Ack-sure&#xff09;&#xff0c;代表美国Axure公司&#xff1b;RP则是Rapid Prototyping&#xff08;快速原型&#xff09;的缩写。 下载链接&#xff1a;https://www.axure.com/ 下载 可以免费试用…

Javascript数字精度丢失的问题

一、问题 0.1 0.2 0.3 // false 二、浮点数 “浮点数”是一种表示数字的标准&#xff0c;整数也可以用浮点数的格式来存储 我们也可以理解成&#xff0c;浮点数就是小数 在JavaScript中&#xff0c;现在主流的数值类型是Number&#xff0c;而Number采用的是IEEE754规范中…

springboot集成mqtt

文章目录 前言一、MQTT是什么&#xff1f;二、继承步骤1.安装MQTT2.创建项目&#xff0c;引入依赖3. 对应步骤2的代码3 测试 总结mqtt 启动后访问地址 前言 随着物联网的火热,MQTT的应用逐渐增多 曾经也有幸使用过mqtt,今天正好总结下MQTT的使用; 一、MQTT是什么&#xff1f;…