欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-08 10:30:25
问题思路本题主要分为两种思路:一种为正向,即一直使用循环语句和判断语句,通过计算所有情况最后得出结果另一种是根据到手工资去推算税前所得工资下面的示例是第二种方法,第一种方法比较常见代码示例T = int(input())S = 0t = 0a = [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,...

问题

CCF认证模拟-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

如下测试结果
CCF认证模拟-python存储机制问题

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

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

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

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

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