python百炼成钢实例002-个税计算-重点阶梯提取和enumerate函数--直接看方法3

实例002:“个税计算”
题目 企业发放的奖金根据利润提成。利润(I)低于或等于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%提成,从键盘输入当月利润I,求应发放奖金总数?

方法1:直接实现

# 方法1:文字直接实现
interest = int(input("请输入当月利润(单位:万元):"))
reward = 0
if (0 < interest <=10):
    reward = interest*0.1
elif 10 < interest < 20:
    reward = 10*0.1+(interest-10)*0.075
elif 20 <= interest < 40:
    reward = 10*0.1+(20-10)*0.075+(interest-20)*0.05
elif 40<= interest < 60:
    reward = 10 * 0.1 + (20 - 10) * 0.075 + (40 - 20) * 0.05 + (interest-40)*0.03
elif 60 <= interest < 100:
    reward = 10 * 0.1 + (20 - 10) * 0.075 + (40 - 20) * 0.05 + (60 - 40) * 0.03 + (interest-60)*0.015
elif interest >= 100:
    reward = 10 * 0.1 + (20 - 10) * 0.075 + (40 - 20) * 0.05 + (60 - 40) * 0.03 + (100-60)*0.015 + (interest-100)*0.01
else:
    print("输入有问题")

print("当月利润{},应发放奖金总数{}".format(interest,reward))

 

方法2:阶梯实现

# 方法2:提取利润阶梯
interest = int(input("请输入当月利润(单位:万元):")) # 当月利润
reward = 0 # 奖金额度
range_interest = [10,10,20,20,40] #10万之前提成对应0.1,扣除这10万,到20万之间的10万的提成为0.075
range_rate = [0.1,0.075,0.05,0.03,0.015,0.01]
for i in range(len(range_interest)):
    if interest < range_interest[i]:
        reward = range_rate[i]*interest +reward
        break
    else:
        interest=interest-range_interest[i]  # 大于10万,则减去之前的区间,剩下的再和区间比对
        reward = range_rate[i]*range_interest[i] # 这个区间对应的奖金

print("当月利润{},应发放奖金总数{}".format(interest,reward))

 

方法3:阶梯实现优化-引用函数enumerate,注意输入为浮点数时格式化

# 方法3:优化,学习函数-enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
# 注意小数的输入,不能用整形转化

interest = float(input("请输入当月利润(单位:万元):")) # 当月利润
reward = 0 # 奖金额度
range_interest = [10,10,20,20,40] #10万之前提成对应0.1,扣除这10万,到20万之间的10万的提成为0.075
range_rate = [0.1,0.075,0.05,0.03,0.015,0.01]
for i, range_interest_value in enumerate(range_interest):
    if interest < range_interest_value:
        reward = range_rate[i]*interest +reward
        break
    else:
        interest=interest-range_interest_value  # 大于10万,则减去之前的区间,剩下的再和区间比对
        reward = range_rate[i]*range_interest_value # 这个区间对应的奖金

print("当月利润{},应发放奖金总数{:.2}".format(interest,reward))

 

posted @ 2021-11-05 15:34  依羽杉  阅读(190)  评论(0编辑  收藏  举报