Python编写函数,计算某个员工的奖金发放额度,要求输入员工的营业额,输出对应的奖金总额

奖金计算规则如下:
营业额低于或等于20万元时,奖金为营业额的11%。营业额高于20万元,低于40万元时,低于20万元的部分按11%计算,高于20万元的部分,按8.5%计算; 依此类推,40万到60万之间时高于40万元的部分,按3%计算; 60万到100万之间时,高于60万元的部分,按1.5%计算;高于100万元时,超过100万元的部分按1%计算。


一些感悟:在刚敲这道题的代码的时候我只是单纯地按照数学的思维去敲,但是在这过程中会发现会做很多重复性的工作,于是想到了去使用递归。不妨先从数学的角度看看这道题奖金的计算过程。

设营业额为x

  • 当营业额低于或等于20万元时(x<=20),奖金为:0.11x
  • 当营业额高于20万元,低于40万元时(20<x<=40),奖金为:20×0.11+0.85(x-20)
  • 当营业额在40万到60万之间时(40<x<=60),奖金为:20×0.11+20×0.85+0.03(x-40)
  • 当营业额在60万到100万之间时(60<x<=100),奖金为:20×0.11+20×0.85+20×0.03+0.015(x-40)
  • 当营业额高于100万元时(x>100),奖金为:20×0.11+20×0.85+20×0.03+40×0.015+0.01(x-40)

从中可以发现要计算包括不同层次营业额的奖金,要依次单纯的列举出来重复的步骤有很多,这时就想到使用递归(正好课上也讲到这部分内容),于是决定自己写个递归试试。这里的递归通俗的理解,可以把每个条件语句想象成入口,return语句是出口。条件语句决定了应该进哪个门,return里边再调用自身就相当于出来的时候要通过不同的门,这样使用递归后比我之前写的代码要简洁很多。大致的思路如下:在这里插入图片描述

以下是最终代码:

def Cal_bonus(n: int) -> float:
    """按营业额不等份额分段计算奖金,输出每段奖金数和奖金总额"""

    # 营业额低于或等于20万元时
    if n <= 20:
        m = n
        b = m * 0.11
        print('*金额{:>2}万,比率{:>6},奖金{:.2f}万'.format(int(m), '11.00%', b))
        # 由于数字的长度不同,所以为了美观打印,数字单独需要右对齐,奖金保留两位小数,以下方法相同
        return b

    # 营业额高于20万元,低于40万元时
    elif 20 < n <= 40:
        m = n - 20
        b = m * 0.085
        print('*金额{:>2}万,比率{:>6},奖金{:.2f}万'.format(int(m), '8.50%', b))
        return Cal_bonus(20) + b

    # 营业额高于40万元,低于60万元时
    elif 40 < n <= 60:
        m = n - 40
        b = m * 0.03
        print('*金额{:>2}万,比率{:>6},奖金{:.2f}万'.format(int(m), '3.00%', b))
        return Cal_bonus(40) + b

    # 营业额高于60万元,低于100万元时
    elif 60 < n <= 100:
        m = n - 60
        b = m * 0.015
        print('*金额{:>2}万,比率{:>6},奖金{:.2f}万'.format(int(m), '1.50%', b))
        return Cal_bonus(60) + b

    # 营业额高于100万元时
    else:
        m = n - 100
        b = m * 0.01
        print('*金额{:>2}万,比率{:>6},奖金{:.2f}万'.format(int(m), '1.00%', b))
        return Cal_bonus(100) + b


def main():
    turnover = float(input('请输入营业额(万元):'))
    print('******奖金总计为:%.2f万元******' % Cal_bonus(turnover))


if __name__ == "__main__":
    main()

运算结果如下:
输入14:
在这里插入图片描述
输入36:
在这里插入图片描述
输入58:
在这里插入图片描述
输入99:
在这里插入图片描述
输入101:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值