【夜曲编程】No.10 (困难)

夜曲编程No.10——奖金几何

  • 题目:
  • 思路:
  • 解题方法和参考代码(本人所写)
    • 方法一——列表法
      • Code1
    • 方法二——键值对法
      • Code2

题目:

某销售公司发放的奖金根据利润提成。利润低于或等于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%提成。
定义函数func(),传入参数profit为利润,计算出奖金数额,最后通过参数profit为140000调用func()函数,并格式化输出:“本月奖金为xx元”。

思路:

 根据利润的提成门槛金额,从高到低依次遍历,将多出来的那部分与提成比率相乘,理论上是每一段提成累加,但是可以用 += 运算符来实现每一段的自动累加运算,我用了两种方法,详见下文。

解题方法和参考代码(本人所写)

方法一——列表法

Code1

def func(profit):
    threshold = [1000000, 600000, 400000, 200000, 100000, 0]
    rate = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
    bonus = 0
    for i in range(len(threshold)):
        if profit > threshold[i]:
            bonus += (profit - threshold[i]) * rate[i]
            profit = threshold[i]
    print("本月奖金为{}元".format(bonus))

func(140000)

  这种方法的原理比较简单,此处不需要详细解释,其中最关键的一步是:

profit = threshold[i]

 这样才能实现后面每一段的提成累加进去,最终输出结果为本月奖金为13000.0元

方法二——键值对法

Code2

 可以使用一个字典来存储利润阶梯和对应的提成率,然后在循环中逐个比较利润和阶梯,累加奖金。具体实现如下:

def func(profit):
    rate_dict = {1000000: 0.01, 600000: 0.015, 400000: 0.03, 200000: 0.05, 100000: 0.075, 0: 0.1}
    bonus = 0
    for threshold, rate in rate_dict.items():
        if profit > threshold:
            bonus += (profit - threshold) * rate
            profit = threshold
    print(f"本月奖金为{int(bonus)}元")

func(140000)

 注意,在字典中,利润阶梯是键,对应的提成率是值。循环中每次取出一个键值对,如果利润高于阶梯,就计算该部分的奖金,并将利润减去该部分,进入下一轮循环。这样就可以避免嵌套条件语句,使代码更简洁。
【夜曲编程】No.10 (困难)_第1张图片

你可能感兴趣的:(夜曲编程,Python入门,python)