当前位置: 移动技术网 > IT编程>脚本编程>Python > CCF认证模拟-201612-2-python-python存储机制问题

CCF认证模拟-201612-2-python-python存储机制问题

2020年07月04日  | 移动技术网IT编程  | 我要评论

问题

在这里插入图片描述
思路
本题主要分为两种思路:
一种为正向,即一直使用循环语句和判断语句,通过计算所有情况最后得出结果
另一种是根据到手工资去推算税前所得工资
下面的示例是第二种方法,第一种方法比较常见

代码示例

T = int(input())
S = 0
t = 0

a = [T-83500+22495, T-58500+13745, T-38500+7745, T-12500+1245, T-8000+345, T-5000+45, T-3500, T]
b = [0.45, 0.35, 0.3, 0.25, 0.2, 0.1, 0.03, 0]
c = [0, 45, 300, 900, 6500, 6000, 8750]
d = [83500, 58500, 38500, 12500, 8000, 5000, 3500, 0]

for i in range(len(a)):
    if a[i] > 0:
        for j in range(len(a)-i-1):
            t = t + c[j]
        S = S + T + t
        print(S)
        print(b[i]*d[i])
        print(1-b[i])
        S = (S-b[i]*d[i])/(1-b[i])
        break
# 100分
print(round(S))
# 80分
print(int(S))

首先说明一下,a和d可以通过计算得到,但为了展示方便,直接将其列出

a为判断税收七点的一个界限,后面加的数字为各阶段税收
举个例子:比如说税后工资为4999,那么工资一定是在5000以上的,所以再判断税收的时候需要考虑的是另一个区间的纳税比例

b为税收税率从小到大排列

c为税收金额从小到大排列

d为加上3500的不纳税金额以后的纳税区间

之后的循环,先判断其处在哪一个纳税区间,之后先计算处在 区间内部的税收,最后计算税前收入

S = (S-b[i]*d[i])/(1-b[i]) 所用的公式为: 

>                 (税前收入-之前整区间税前收入)x 当前区间税率 ==(当前收入-之前整区间税前收入)

存在问题描述

可以看到,在代码部分最后批注有一个80分的输出,即将S转换为int型
在debug的时候发现了一个有趣的问题即:

python存储机制问题:

测试用例

                              税前工资:100000    税后工资:70080

如下测试结果
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到如果将debug的结果人为带入计算是没有问题的,但是出现了一个有趣的问题:

在这里插入图片描述
如图,本来测试结果应该是10000,但是会出现一个无限循环的近似数
通过向老师请教,和查阅相关资料,了解到了python的存储机制问题
大致概括如下
在这里插入图片描述

本文地址:https://blog.csdn.net/qq_43923588/article/details/107112479

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网