因为特殊原因,昨天没有做题。今天继续~
原题链接:http://www.runoob.com/python/python-exercise-example2.html
题目:
企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
我的代码:
def cal(i): if i <=100000: bonus=i*0.1 elif 100000<i<=200000: bonus=10000+(i-100000)*0.075 elif 200000<i<=400000: bonus=10000+7500+(i-200000)*0.05 elif 400001<i<=600000: bonus=10000+7500+10000+(i-400000)*0.03 elif 600001<i<=1000000: bonus=10000+7500+10000+6000+(i-600000)*0.015 elif i>1000000: bonus=10000+7500+10000+6000+6000+(i-1000000)*0.01 #代码繁琐,而且每一个阶段获得的利润最大值都要手动去算,很麻烦 print(bonus)
思考:
看到了练习的答案,发现可以用for循环来实现,减少了要自己手动输入和计算的工作量!所以每个阶段的分界和利润比,都以可以迭代的列表的形式写入函数中,具体看下面。。。
def cal2(i): profit=[1000000,600000,400000,200000,100000,0] rate = [0.01,0.015,0.03,0.05,0.075,0.1] #同样的index,profit是该rate的下限,便于接下来由大到小迭代 bonus=0 for x in range(0,6): if i>profit[x]: #先判断i属于哪个级别开始算 bonus += (i-profit[x])*rate[x] i=profit[x] #把那个级别的下限赋值给i,继续for循环 print(bonus)
利用了列表可以迭代的特性,真的方便了很多~本来还想过用字典一一对应地存profit和rate,但是字典是没有顺序的,不能用于这样由大到小的循环判断。