题目:
某销售公司发放的奖金根据利润提成。利润低于或等于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)
注意,在字典中,利润阶梯是键,对应的提成率是值。循环中每次取出一个键值对,如果利润高于阶梯,就计算该部分的奖金,并将利润减去该部分,进入下一轮循环。这样就可以避免嵌套条件语句,使代码更简洁。