Python:每日一题 2
本帖最后由 新手·ing 于 2017-3-24 22:17 编辑题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 i = int(input('净利润:'))
arr =
rat =
r = 0
for idx in range(0,6):
if i > arr:
r += (i - arr) * rat
print((i-arr) * rat)
i = arr
print(r)
I = float(input('Input the interest:'))
if I > 1000000: bonus = 39500.0 + (I - 1000000) * 0.01
elif 600000 < I <= 1000000: bonus = 33500.0 + (I - 1000000) * 0.01
elif 400000 < I <= 600000: bonus = 27500.0 + (I - 400000) * 0.03
elif 200000 < I <= 400000: bonus = 17500.0 + (I - 200000) * 0.05
elif 100000 < I <= 200000: bonus = 10000.0 + (I - 100000) * 0.075
elif 100000 >= I > 0: bonus = I * 0.1
else:
print('一毛钱都不给你!')
try:
print(round(bonus, 2))
except:
print('就是不给你!') 新手·ing 发表于 2017-3-24 22:17
虽然你的这个很看起来很简约,但是不符合一般的数学思维逻辑
在数学里面应该是这样:
def test2(money):
if money <= 100000:
print (money*0.1)
elif money <= 200000:
print (10000+(money-100000)*0.075)
elif money <= 400000:
print (17500+(money-200000)*0.05)
elif money <= 600000:
print (27500+(money-400000)*0.03)
elif money <= 1000000:
print (33500+(money-600000)*0.015)
elif money > 1000000:
print (39500+(money-1000000)*0.01)
不过话说回来,编程的思想有时候的确应该更抽象一些,不能固守于数学的逻辑思维方式
继续这个系列,记录一下!
def sr():
try:
i=float(input('请输入利润(单位为元,精确到小数点后两位,输入0退出):'))
return i
except:
print('输入有误,请重新输入')
return sr()
def js():
lr=sr()
if lr<=100000:
return lr*0.1
elif lr<=200000:
return 17500-(200000-lr)*0.075
elif lr<=400000:
return 27500-(400000-lr)*0.05
elif lr<=600000:
return 33500-(600000-lr)*0.03
elif lr<=1000000:
return 39500-(1000000-lr)*0.015
else:
return 39500+(lr-1000000)*0.01
while True:
l=js()
if l==0:break
else:print(l) 分成列表写方便修改吧,阅读上确实没有层层分支清晰
# 利润从大到小排,单位是万元
profits =
# 利润和提成都可以往上加元素
rates =
if len(profits) != len(rates):
raise IndexError # 两个列表不同长度算法会失效,先报错
else:
pass # 防御性
def bonus_cal(profit):
"""根据利润计算奖金,跟所得税的超额累进同种形式"""
bonus = 0
for i in range(len(profits)):
# 开头确定利润的范围
if profit - profits > 0:
bonus += (profit-profits)* rates # 大于利润区域的部分
# 往后面奖金是固定的, 循环算完返回退出就是了
for j in range(i,len(profits)-1):
bonus += (profits-profits) * rates
return bonus
else:
pass # 防御性
print("没有利润还想要啥自行车!!") # 利润<=0 的情况
class Bonus:
def __init__(self,n):
self.bonus=0
if n<=10:
self.bonus=self.bonus10(n)
elif n>10 and n<=20:
self.bonus=self.bonus10And20(n)
elif n>20 and n<=40:
self.bonus=self.bonus20And40(n)
elif n>40 and n<=60:
self.bonus=self.bonus40And60(n)
elif n>60 and n<=100:
self.bonus=self.bonus60And100(n)
elif n>100:
self.bonus=self.bonus100(n)
def bonus10(self,n=10):
return n*0.1
def bonus10And20(self,n=20):
num= (n-10)*0.075+self.bonus10()
return num
def bonus20And40(self,n=40):
num=(n-20)*0.05 + self.bonus10And20()
return num
def bonus40And60(self,n=60):
num=(n-40)*0.03 + self.bonus20And40()
return num
def bonus60And100(self,n=100):
num=(n-60)*0.015 + self.bonus40And60()
return num
def bonus100(self,n):
num=(n-100) * 0.01 + self.bonus60And100()
return num
def getBonus(self):
return self.bonus
solomonxian 发表于 2017-4-19 13:23
分成列表写方便修改吧,阅读上确实没有层层分支清晰
楼主,下面的这句代码看不懂,能不能解释下?谢谢
if profit - profit > 0 逝去的时光 发表于 2017-5-7 20:13
楼主,下面的这句代码看不懂,能不能解释下?谢谢
if profit - profit > 0
if profit - profits > 0:
是这句吧?
左边时传入的参数,右边是列表里第i个元素
就是确认下传入的参数在哪个范围 i=int(input('利润:'))
if i <= 10000:
bonuses = i * 0.1
elif 100000<i<=200000:
bonuses = 100000*0.1+(i-100000)*0.075
elif 200000<i<=400000:
bonuses = 100000*0.1+100000*0.075+(i-200000)*0.05
elif 400000<i<=600000:
bonuses = 100000*0.1+100000*0.75+200000*0.05+(i-400000)*0.03
elif 600000<i<=1000000:
bonuses = 100000*0.1+100000*0.75+200000*0.05+200000*0.03+(i-600000)*0.15
elif i>1000000:
bonuses = 100000*0.1+100000*0.75+200000*0.05+200000*0.03+400000*0.15+(i-1000000)*0.01
else:
bonuses = 0
print('奖金:',bonuses)
小弟不才 渡漫 发表于 2017-5-21 20:43
小弟不才
兄弟要刷题啊 temp = input ("please enter the profit:")
I = int (temp)
bonus = 0
if I <= 100000:
bonus = I * 0.1
elif 100000 < I <= 200000:
bonus = 10000 + 0.075 * (I - 100000)
elif 200000 < I <= 400000:
bonus = 17500 + 0.05 * (I - 200000)
elif 400000 < I <= 600000:
bonus = 27500 + 0.03 * (I - 400000)
elif 600000 < I <= 1000000:
bonus = 33500 + 0.015 * (I - 600000)
elif I > 1000000:
bonus = 39500 + 0.01 * (I - 1000000)
print ("bonus:",bonus) n=int(input("请输入利润:"))
if(n<=100000):
result=n*0.1
elif(n<=200000):
result=10000+(n-100000)*0.075
elif(n<=400000):
result=17500+(n-200000)*0.05
elif(n<=600000):
result=27500+(n-400000)*0.03
elif(n<=1000000):
result=33500+(n-600000)*0.015
elif():
result=39500+(n-1000000)*0.01
x=int(result)
print(x)
#Pf是profits利润;Bn是bonus,奖金。
Pf= input('请输入企业利润:')
Pf= int(Pf)
Bn=0
if Pf<=100000:
Bn=Pf*0.1
if 100000<Pf<=200000:
Bn=100000*0.1
Bn=(Pf-100000)*0.075+Bn
if 200000<Pf<=400000:
Bn=100000*0.1+100000*0.075
Bn=(Pf-200000)*0.05+Bn
if 400000<Pf<=600000:
Bn=100000*0.1+100000*0.075+200000*0.05
Bn=(Pf-400000)*0.03+Bn
if 600000<Pf<=1000000:
Bn=100000*0.1+100000*0.075+200000*0.05+200000*0.03
Bn=(Pf-600000)*0.015+Bn
if 1000000<Pf:
Bn=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015
Bn=(Pf-1000000)*0.01+Bn
print('应发奖金为:',Bn)
---------------------------------------------------------------------------
看了前几楼的代码,挺有意思的,首先是@solomonxian的,类似的东西以后可以考虑使用两个数组。
还有就是@余欲渔这个了,用这个建立向函数这种方法,看起来很舒服,还有那个try的用法,以前一直对要求输入的数据类型没有办法,这个可以用了!
收获颇丰!! 楼主好人,对于新手来说很好理解 楼主,关于命题有个疑问,20万到40万之间时,高于20万元的部分,可提成5%;是指仅仅计算高于20万的部分么
看了所有的代码。总结一下,
1.显然,if...elif...语句的运算量最小,框架选用它没错。
2.列表的引用,是非常不错的。列表的优点在于它的全局性和直观性。全局性就不提了,直观性还是很重要的,便于修改。毕竟大家不是为了做黑客,写出来的东西便于浏览修改和使用才是关键。
3.最后,报错机制值得学习。 l = int(input('Please enter profit:'))
award = 0
if l > 100:
award = (l - 100) * 0.01
l = 100
if l > 60:
award += (l - 60) * 0.015
l = 60
if l > 40:
award += (l - 40) * 0.03
l = 40
if l > 20:
award += (l - 20) * 0.05
l = 20
if l > 10:
award += (l - 10) * 0.075
l = 10
if l > 0:
award += l * 0.1
print(award)
Please enter profit:15
1.375 本帖最后由 不得了! 于 2017-7-9 15:28 编辑
def RecursionExpression(profit):
if profit > 600000:
if profit > 1000000:
return (profit - 1000000) * 0.01 + RecursionExpression(1000000)
else:
return (profit - 600000) * 0.015 + RecursionExpression(600000)
else:
if profit > 400000:
return (profit - 400000) * 0.03 + RecursionExpression(400000)
else:
if profit > 200000:
return (profit - 200000) * 0.05 + RecursionExpression(200000)
else:
if profit <= 100000:
return profit*0.1
else:
return (profit - 100000) * 0.075 + RecursionExpression(100000)
while 1:
try:
i = float(input("你的利润是多少啊?"))
print("你的提成是" + str(RecursionExpression(i)))
except TypeError:
print("输入有误!\n重新输入\n\n")
递归好像挺好,我不知道我有没有理解错意思
def profit_count(x):
if x >= 1000000:
return 39500+((x-1000000)*0.01)
if x >= 600000:
return 33500+((x-600000)*0.015)
if x >= 400000:
return 27500+((x-400000)*0.03)
if x >= 200000:
return 17500+((x-200000)*0.05)
if x >= 100000:
return 10000+((x-100000)*0.075)
return x*0.1