新手·ing 发表于 2017-3-24 22:16:33

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,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

新手·ing 发表于 2017-3-24 22:17:05

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)

ooxx7788 发表于 2017-3-24 22:43:41

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('就是不给你!')

gopythoner 发表于 2017-3-31 23:54:33

新手·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)

不过话说回来,编程的思想有时候的确应该更抽象一些,不能固守于数学的逻辑思维方式
继续这个系列,记录一下!

余欲渔 发表于 2017-4-11 13:27:05

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)

solomonxian 发表于 2017-4-19 13:23:48

分成列表写方便修改吧,阅读上确实没有层层分支清晰
# 利润从大到小排,单位是万元
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 的情况
   

puying2017 发表于 2017-4-19 14:24:52

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

逝去的时光 发表于 2017-5-7 20:13:45

solomonxian 发表于 2017-4-19 13:23
分成列表写方便修改吧,阅读上确实没有层层分支清晰

楼主,下面的这句代码看不懂,能不能解释下?谢谢
if profit - profit > 0

solomonxian 发表于 2017-5-9 18:43:09

逝去的时光 发表于 2017-5-7 20:13
楼主,下面的这句代码看不懂,能不能解释下?谢谢
if profit - profit > 0

if profit - profits > 0:
是这句吧?
左边时传入的参数,右边是列表里第i个元素
就是确认下传入的参数在哪个范围

渡漫 发表于 2017-5-21 20:43:58

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)

小弟不才

新手·ing 发表于 2017-5-22 19:25:33

渡漫 发表于 2017-5-21 20:43
小弟不才

兄弟要刷题啊

NwkerWang 发表于 2017-5-25 12:04:07

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)

Wofficre 发表于 2017-5-25 16:48:04

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)
      

抑痒指 发表于 2017-6-1 15:00:45

#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的用法,以前一直对要求输入的数据类型没有办法,这个可以用了!
收获颇丰!!

老司机带带我哟 发表于 2017-6-13 10:16:46

楼主好人,对于新手来说很好理解

yijie513 发表于 2017-6-15 00:27:00

楼主,关于命题有个疑问,20万到40万之间时,高于20万元的部分,可提成5%;是指仅仅计算高于20万的部分么

Messj 发表于 2017-6-15 09:47:39

看了所有的代码。总结一下,
1.显然,if...elif...语句的运算量最小,框架选用它没错。
2.列表的引用,是非常不错的。列表的优点在于它的全局性和直观性。全局性就不提了,直观性还是很重要的,便于修改。毕竟大家不是为了做黑客,写出来的东西便于浏览修改和使用才是关键。
3.最后,报错机制值得学习。

Teagle 发表于 2017-6-19 22:53:15

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:27:43

本帖最后由 不得了! 于 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")

递归好像挺好,我不知道我有没有理解错意思

776667 发表于 2017-7-15 11:18:58

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
页: [1] 2 3 4 5 6 7
查看完整版本: Python:每日一题 2