【个税计算】企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
用if-
用if-elif-else的方法,很常规的方法。就直接给代码。
l = int(input ('请输入l(万元):')) if l <= 10: x = l * 0.10 print (x) elif l <= 20: x = 10 *0.1 + (l - 10) * 0.075 print (x) elif l <= 40: x = 10 * 0.1 + 10 * 0.075 + (l - 20 ) * 0.05 print(x) elif l <= 60: x = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (l - 40) * 0.03 print(x) elif l <= 100: x = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (l - 60) * 0.15 print(x) else: x = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.15 + (l - 100)* 0.01 print(x)
刚开始的时候是出现的这种错误,第一行当时写的是 l = input ('请输入l(万元):'),是因为input返回的是str型,不能和int型直接比较。所以要int(),将str转化为int。
用列表的方法,很巧妙的方法。借鉴的方法,越看越能感受到它的巧妙之处。
def getBonus_2(I): I = I/10000 #简化运算 bonus = 0 rates = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1] stra = [100, 60, 40, 20, 10, 0] for i in range(len(rates)): # len(rates)= 6 i:0,1,2,3,4,5, if(I > stra[i]): bonus += (I - stra[i])*rates[i] I = stra[i] return bonus*10000 profit = eval(input("请输入利润值:")) print("您所获的金额是{0:.0f}元".format(getBonus_2(profit)))
定义两个列表rates,star。rates用来表示每一部分的提成的百分比,star表示不同阶段的利润的分界点。而且star与rates要一一对应。当输入65的时候:
65 < 100,继续向下比较,
65 > 60, bouns = ( 65 - 60) * 0.015, I = 60 ;
60 > 40 , bouns = (60 - 40) * 0.03 + ( 65 - 60) * 0.015, I = 40;
40 > 20 , bouns = (40 - 20 ) * 0.05 + (60 - 40) * 0.03 + ( 65 - 60) * 0.015, I = 20
20 > 10 , bouns = (20 - 10) * 0.075 + (40 - 20 ) * 0.05 + (60 - 40) * 0.03 + ( 65 - 60) * 0.015, I = 10
10 > 0 , bouns = (10 - 0) * 0.1 + (20 - 10) * 0.075 + (40 - 20 ) * 0.05 + (60 - 40) * 0.03 + ( 65 - 60) * 0.015, I = 0
大概过程就是这样。