# 第17期—奖金计算

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

企业发放的奖金根据利润提成。
利润低于或等于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%提成

级数 利润 奖金提成比例
1 不超过10万元 10%
2 超过10万元至20万元的部分 7.5%
3 超过20万元至40万元的部分 5%
4 超过40万元至60万元的部分 3%
5 超过60万元至100万元的部分 1.5%
6 超过100万元的部分 1%

输入利润,求应发放奖金总数~

# 2 解题思路

  • 首先用input函数获取用户输入的利润总额
  • 然后根据奖金提成比例计算奖金
  • 最后输出计算结果

# 3 解题方法

# 方法一

profit = float(input("请输入利润,单位为万元:"))
assert profit >= 0, "请输入非负数!"

if profit <= 10:
    bonus = profit * 0.1
elif 10 < profit <= 20:
    bonus = 10 * 0.1 + (profit-10) * 0.075
elif 20 < profit <= 40:
    bonus = 10 * 0.1 + 10 * 0.075 + (profit-20) * 0.05
elif 40 < profit <= 60:
    bonus = 10 * 0.1+ 10 * 0.075 + 20 * 0.05 + (profit-40) * 0.03
elif 60 < profit <= 100:
    bonus = 10 * 0.1+ 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (profit-60) * 0.015
else:
    bonus = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (profit-100) * 0.01
    
print(f"奖金为{bonus:0.2f}万元")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

第1行: 用input函数获取用户输入的利润总额,float函数转化为浮点数,赋值给变量profit
第2行: 用assert断言函数限定变量profit大于0,若大于0,执行后面的代码,否则报错“AssertionError: 请输入非负数!”
第4-15行: 用if...elif...else语句对用户输入的利润总额进行判断,根据奖金提成比例计算奖金
第17行: print函数输出最终计算结果,保留两位小数

# 方法二

profit = float(input("请输入利润,单位为万元:"))
assert profit >= 0, "请输入非负数!"

bonus = 0
value = [100, 60, 40, 20, 10, 0]
rates = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
for i in range(6):
    if profit > value[i]:
        temp = (profit - value[i]) * rates[i]
        bonus += temp
        profit = value[i]
print(f"奖金为{bonus:0.2f}万元")
1
2
3
4
5
6
7
8
9
10
11
12

第1行: 用input函数获取用户输入的利润总额,float函数转化为整型,赋值给变量profit
第2行: 用assert断言函数限定变量profit大于0,若大于0,执行后面的代码,否则报错“AssertionError: 请输入非负数!”
第4行: 创建存储奖金总额的变量bonus,初始赋值为0
第5行: 创建列表value,传入的参数为利润的界限值
第6行: 创建列表rates, 传入的参数为对应的奖金提成比例
第7行: 由于列表value共有6个参数,即利润总额划分为6个档位,用for循环遍历value这一列表中每一个元素的索引值
第8行: 当用户输入的利润总额大于列表value中的利润值时,进入循环
第9行: 通过列表的索引,计算每一个档位的奖金
第10行: 在每次循环中,每个档位的奖金temp与变量bonus相加,并将求和结果再赋值给变量bonus
第11行: 为变量 profit 赋值为value[i],直到变量 profit不满足条件,退出循环
第12行: print函数输出最终计算结果,保留两位小数

以利润 105 万为例
第一次循环,i = 0,
temp = (105 - 100) * 0.01 = 5 * 0.01
bomus = 0 + 5 * 0.01
profit = 100
第二次循环,i = 1,
temp = (100 - 60) * 0.015 = 40 * 0.015
bomus = 0 + 5 * 0.01 + 40 * 0.015
profit = 60
第三次循环,i = 2,
temp = (60 - 40) * 0.03= 20 * 0.03
bomus = 0 + 5 * 0.01 + 40 * 0.015 + 20 * 0.03
profit = 40
第四次循环,i = 3,
temp = (40 - 20) * 0.05= 20 * 0.05
bomus = 0 + 5 * 0.01 + 40 * 0.015 + 20 * 0.03 + 20 * 0.05
profit = 20
第五次循环,i = 4,
temp = (20 - 10) * 0.075= 10 * 0.075
bomus = 0 + 5 * 0.01 + 40 * 0.015 + 20 * 0.03 + 20 * 0.05 + 10 * 0.075
profit = 10
第六次循环,i = 5,
temp = (10 - 0) * 0.1= 10 * 0.1
bomus = 0 + 5 * 0.01 + 40 * 0.015 + 20 * 0.03 + 20 * 0.05 + 10 * 0.075 + 10 * 0.1
profit = 0
退出循环

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM