利润分类计算问题

今天遇到这样一个问题:企业发放的奖金根据利润I提成:

利润I低于或等于100000元的,奖金可提10%;
利润高于100000元,低于或等于200000元(100000<I≤200000)时,低于等于100000元部分按10%提成,高于100000元的部分,可提成 7.5%;
200000<I≤400000时,低于200000元部分仍按上述办法提成(下同),高于200000元的部分按5%提成;
400000<I≤600000元时,高于400000元的部分按3%提成;

600000<I≤1000000时,高于600000元的部分按1.5%提成;
I>1000000时,超过1000000元的部分按1%提成。

从键盘输入当月利润I,求应发奖金总数。

遇到这样一个问题,一般人可能会想到if,elif,但是我是一般人吗?

于是我对这个问题陷入了沉思,我想了一想,先把通解写出来吧:

profit = float(input())

# 初始化奖金总数
bonus = 0

if profit <= 100000:
    # 利润低于等于100000元,提成10%
    bonus = profit * 0.10
elif 100000 < profit <= 200000:
    # 利润在100000到200000之间
    bonus = 100000 * 0.10 + (profit - 100000) * 0.075
elif 200000 < profit <= 400000:
    # 利润在200000到400000之间
    bonus = 100000 * 0.10 + 100000 * 0.075 + (profit - 200000) * 0.05
elif 400000 < profit <= 600000:
    # 利润在400000到600000之间
    bonus = 100000 * 0.10 + 100000 * 0.075 + 200000 * 0.05 + (profit - 400000) * 0.03
elif 600000 < profit <= 1000000:
    # 利润在600000到1000000之间
    bonus = 100000 * 0.10 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (profit - 600000) * 0.015
else:
    # 利润超过1000000,超过部分按1%提成
    bonus = 100000 * 0.10 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (profit - 1000000) * 0.01

print("应发奖金总数为:",int(bonus),"元")

细看,这不对吧,要是他没完没了怎么办?

不如我们构造一个函数,一个名为 `run` 的函数。

创建了一个列表 `ranges`,其中包含了多个元组。每个元组包含两个值,第一个值是利润上限 `limit`,第二个值是对应的提成率 `rate`。这些元组表示了不同的利润范围和对应的提成率。

`for limit, rate in ranges:`:这一行启动了一个循环,用于遍历 `ranges` 列表中的元组,其中 `limit` 表示利润上限,`rate` 表示提成率。

`if profit <= limit:`:这一行检查当前的利润 `profit` 是否小于或等于当前范围的上限 `limit`。

如果 `profit` 小于或等于 `limit`,表示当前范围足够覆盖利润,那么计算当前范围内的奖金,并将其累加到 `bonus` 中,然后使用 `break` 退出循环,因为已经计算完奖金。

如果 `profit` 大于 `limit`,表示当前范围不够覆盖全部利润,那么计算当前范围内的奖金,并将其累加到 `bonus` 中,然后从 `profit` 中减去当前范围的上限 `limit`,以便在下一次迭代中处理剩余的利润。

总之,这段代码用于根据不同的利润范围和提成率计算奖金,并最得出计算得到的奖金。

def run(profit):
    x=100000
    bonus = 0
    ranges = [(x, 0.10), (x, 0.075), (2*x, 0.05), (2*x, 0.03), (4*x,0.015), (float('inf'), 0.01)]

    for limit, rate in ranges:
        if profit <= limit:
            bonus += profit * rate
            break
        else:
            bonus += limit * rate
            profit -= limit

    return bonus
profit = float(input())
result = run(profit)
print(int(result))

怎么样,是不是觉得我很牛逼?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值