python3练习100题——002

因为特殊原因,昨天没有做题。今天继续~

原题链接: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,但是字典是没有顺序的,不能用于这样由大到小的循环判断。

posted @ 2018-05-21 22:36  Drifter_y  阅读(3517)  评论(3编辑  收藏  举报