CCF认证模拟-201612-2-工资计算-python-python存储机制问题
问题
思路
本题主要分为两种思路:
一种为正向,即一直使用循环语句和判断语句,通过计算所有情况最后得出结果
另一种是根据到手工资去推算税前所得工资
下面的示例是第二种方法,第一种方法比较常见
代码示例
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的存储机制问题
大致概括如下