Python练习题 002:奖金计算

【Python练习题 002】企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

好吧,学渣如我,能想到的就是老老实实写 if...elif...elif... 的循环函数,我自己看着都觉得累啊……

I = float(input("请输入当月利润,单位为万元:"))
if I <= 10:
    bns = 10 * 0.1
elif 10 < I <= 20:
    bns = 10 * 0.1 + (I-10) * 0.075
elif 20 < I <= 40:
    bns = 10 * 0.1 + 10 * 0.075 + (I-20) * 0.05
elif 40 < I <= 60:
    bns = 10 * 0.1+ 10 * 0.075 + 20 * 0.05 + (I-40) * 0.03
elif 60 < I <= 100:
    bns = 10 * 0.1+ 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (I-60) * 0.015
elif I > 100:
    bns = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (I-100) * 0.015
print(bns,'万元')

不过后来,查了下别人的做法,果然清新很多啊:

I = float(input("请输入当月利润,单位为万元:"))
bns = 0  #初始化奖金总数
cat = [100, 60, 40, 20, 10, 0]  #金额分6档
pct = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]  #每档的提成比例
for i in range(6):
    if I > cat[i]:
        I = I - cat[i]  #注意:刨掉档位金额后,应将值重新赋给I,每一档位分开计算
        bns = bns + I * pct[i]  #每一档位的奖金累计相加
print('当月应发放奖金总数为%s万元' % bns)

  

倒也不难理解:从高到低检查利润是否超过设置好的档位,超了就先计算这部分奖金,剩下的再继续逐级检查档位,累积计算奖金就可以了。

唉,我数学真的很烂……

PS:为啥代码框里最后一行总是显示异常呢……原来是模板的问题。换了个模板,代码框显示就正常了~~

++++++++++++++++++++++++++++++++++++++++++++++

题目出处:编程语言入门经典100例【Python版】