鱼C论坛

 找回密码
 立即注册
查看: 14799|回复: 135

[技术交流] Python:每日一题 2

  [复制链接]
发表于 2017-3-24 22:16:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-24 22:17:05 | 显示全部楼层
  1. i = int(input('净利润:'))
  2. arr = [1000000,600000,400000,200000,100000,0]
  3. rat = [0.01,0.015,0.03,0.05,0.075,0.1]
  4. r = 0
  5. for idx in range(0,6):
  6.     if i > arr[idx]:
  7.         r += (i - arr[idx]) * rat[idx]
  8.         print((i-arr[idx]) * rat[idx])
  9.         i = arr[idx]
  10. print(r)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 10 反对 0

使用道具 举报

发表于 2017-3-24 22:43:41 | 显示全部楼层
  1. I = float(input('Input the interest:'))
  2. if I > 1000000: bonus = 39500.0 + (I - 1000000) * 0.01
  3. elif 600000 < I <= 1000000: bonus = 33500.0 + (I - 1000000) * 0.01
  4. elif 400000 < I <= 600000: bonus = 27500.0 + (I - 400000) * 0.03
  5. elif 200000 < I <= 400000: bonus = 17500.0 + (I - 200000) * 0.05
  6. elif 100000 < I <= 200000: bonus = 10000.0 + (I - 100000) * 0.075
  7. elif 100000 >= I > 0: bonus = I * 0.1
  8. else:
  9.     print('一毛钱都不给你!')
  10. try:
  11.     print(round(bonus, 2))
  12. except:
  13.     print('就是不给你!')
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
新手·ing + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

发表于 2017-3-31 23:54:33 | 显示全部楼层

虽然你的这个很看起来很简约,但是不符合一般的数学思维逻辑
在数学里面应该是这样:
  1. def test2(money):
  2.     if money <= 100000:
  3.         print (money*0.1)
  4.     elif money <= 200000:
  5.         print (10000+(money-100000)*0.075)
  6.     elif money <= 400000:
  7.         print (17500+(money-200000)*0.05)
  8.     elif money <= 600000:
  9.         print (27500+(money-400000)*0.03)
  10.     elif money <= 1000000:
  11.         print (33500+(money-600000)*0.015)
  12.     elif money > 1000000:
  13.         print (39500+(money-1000000)*0.01)
复制代码


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

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
新手·ing + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-11 13:27:05 | 显示全部楼层
  1. def sr():
  2.     try:
  3.         i=float(input('请输入利润(单位为元,精确到小数点后两位,输入0退出):'))
  4.         return i
  5.     except:
  6.         print('输入有误,请重新输入')
  7.         return sr()
  8. def js():
  9.     lr=sr()
  10.     if lr<=100000:
  11.         return lr*0.1
  12.     elif lr<=200000:
  13.         return 17500-(200000-lr)*0.075
  14.     elif lr<=400000:
  15.         return 27500-(400000-lr)*0.05
  16.     elif lr<=600000:
  17.         return 33500-(600000-lr)*0.03
  18.     elif lr<=1000000:
  19.         return 39500-(1000000-lr)*0.015
  20.     else:
  21.         return 39500+(lr-1000000)*0.01
  22. while True:
  23.     l=js()
  24.     if l==0:break
  25.     else:print(l)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 真的没鱼币了...

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-19 13:23:48 | 显示全部楼层
分成列表写方便修改吧,阅读上确实没有层层分支清晰
  1. # 利润从大到小排,单位是万元
  2. profits = [100, 60, 40, 20, 10, 0]
  3. # 利润和提成都可以往上加元素
  4. rates = [0.01 , 0.015, 0.03, 0.05, 0.075, 0.10]
  5. if len(profits) != len(rates):
  6.     raise IndexError # 两个列表不同长度算法会失效,先报错
  7. else:
  8.     pass # 防御性

  9. def bonus_cal(profit):
  10.     """根据利润计算奖金,跟所得税的超额累进同种形式"""
  11.     bonus = 0
  12.     for i in range(len(profits)):
  13.         # 开头确定利润的范围
  14.         if profit - profits[i] > 0:
  15.             bonus += (profit-profits[i])* rates[i] # 大于利润区域的部分
  16.             # 往后面奖金是固定的, 循环算完返回退出就是了
  17.             for j in range(i,len(profits)-1):
  18.                 bonus += (profits[j]-profits[j+1]) * rates[j+1]
  19.             return bonus
  20.         else:
  21.             pass # 防御性
  22.     print("没有利润还想要啥自行车!!") # 利润<=0 的情况
  23.    
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 4 反对 0

使用道具 举报

发表于 2017-4-19 14:24:52 | 显示全部楼层
  1. class Bonus:

  2.     def __init__(self,n):
  3.         self.bonus=0

  4.         if n<=10:
  5.             self.bonus=self.bonus10(n)
  6.         elif n>10 and n<=20:
  7.             self.bonus=self.bonus10And20(n)
  8.         elif n>20 and n<=40:
  9.             self.bonus=self.bonus20And40(n)
  10.         elif n>40 and n<=60:
  11.             self.bonus=self.bonus40And60(n)
  12.         elif n>60 and n<=100:
  13.             self.bonus=self.bonus60And100(n)
  14.         elif n>100:
  15.             self.bonus=self.bonus100(n)

  16.     def bonus10(self,n=10):
  17.         return n*0.1

  18.     def bonus10And20(self,n=20):
  19.         num= (n-10)*0.075+self.bonus10()
  20.         return num
  21.    
  22.     def bonus20And40(self,n=40):
  23.         num=(n-20)*0.05 + self.bonus10And20()
  24.         return num
  25.    
  26.     def bonus40And60(self,n=60):
  27.         num=(n-40)*0.03 + self.bonus20And40()
  28.         return num
  29.    
  30.     def bonus60And100(self,n=100):
  31.         num=(n-60)*0.015 + self.bonus40And60()
  32.         return num
  33.    
  34.     def bonus100(self,n):
  35.         num=(n-100) * 0.01 + self.bonus60And100()
  36.         return num

  37.     def getBonus(self):
  38.        return self.bonus
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2017-5-7 20:13:45 | 显示全部楼层
solomonxian 发表于 2017-4-19 13:23
分成列表写方便修改吧,阅读上确实没有层层分支清晰

楼主,下面的这句代码看不懂,能不能解释下?谢谢
if profit - profit > 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-9 18:43:09 | 显示全部楼层
逝去的时光 发表于 2017-5-7 20:13
楼主,下面的这句代码看不懂,能不能解释下?谢谢
if profit - profit > 0
  1. if profit - profits[i] > 0:
复制代码

是这句吧?
左边时传入的参数,右边是列表里第i个元素
就是确认下传入的参数在哪个范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-21 20:43:58 | 显示全部楼层
  1. i=int(input('利润:'))
  2. if i <= 10000:
  3.     bonuses = i * 0.1
  4. elif 100000<i<=200000:
  5.     bonuses = 100000*0.1+(i-100000)*0.075
  6. elif 200000<i<=400000:
  7.     bonuses = 100000*0.1+100000*0.075+(i-200000)*0.05
  8. elif 400000<i<=600000:
  9.     bonuses = 100000*0.1+100000*0.75+200000*0.05+(i-400000)*0.03
  10. elif 600000<i<=1000000:
  11.     bonuses = 100000*0.1+100000*0.75+200000*0.05+200000*0.03+(i-600000)*0.15
  12. elif i>1000000:
  13.     bonuses = 100000*0.1+100000*0.75+200000*0.05+200000*0.03+400000*0.15+(i-1000000)*0.01
  14. else:
  15.     bonuses = 0
  16. print('奖金:',bonuses)
复制代码

小弟不才
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-22 19:25:33 | 显示全部楼层

兄弟要刷题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-5-25 12:04:07 | 显示全部楼层
  1. temp = input ("please enter the profit:")
  2. I = int (temp)
  3. bonus = 0
  4. if I <= 100000:
  5.         bonus = I * 0.1
  6. elif 100000 < I <= 200000:
  7.         bonus = 10000 + 0.075 * (I - 100000)
  8. elif 200000 < I <= 400000:
  9.         bonus = 17500 + 0.05 * (I - 200000)
  10. elif 400000 < I <= 600000:
  11.         bonus = 27500 + 0.03 * (I - 400000)
  12. elif 600000 < I <= 1000000:
  13.         bonus = 33500 + 0.015 * (I - 600000)
  14. elif I > 1000000:
  15.         bonus = 39500 + 0.01 * (I - 1000000)
  16. print ("bonus:",bonus)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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)
      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-1 15:00:45 | 显示全部楼层
  1. #Pf是profits利润;Bn是bonus,奖金。

  2. Pf= input('请输入企业利润:')
  3. Pf= int(Pf)
  4. Bn=0

  5. if Pf<=100000:
  6.     Bn=Pf*0.1

  7. if 100000<Pf<=200000:
  8.     Bn=100000*0.1
  9.     Bn=(Pf-100000)*0.075+Bn

  10. if 200000<Pf<=400000:
  11.     Bn=100000*0.1+100000*0.075
  12.     Bn=(Pf-200000)*0.05+Bn

  13. if 400000<Pf<=600000:
  14.     Bn=100000*0.1+100000*0.075+200000*0.05
  15.     Bn=(Pf-400000)*0.03+Bn

  16. if 600000<Pf<=1000000:
  17.     Bn=100000*0.1+100000*0.075+200000*0.05+200000*0.03
  18.     Bn=(Pf-600000)*0.015+Bn

  19. if 1000000<Pf:
  20.     Bn=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015
  21.     Bn=(Pf-1000000)*0.01+Bn

  22. print('应发奖金为:',Bn)
复制代码


---------------------------------------------------------------------------
看了前几楼的代码,挺有意思的,首先是@solomonxian的,类似的东西以后可以考虑使用两个数组。
还有就是@余欲渔这个了,用这个建立向函数这种方法,看起来很舒服,还有那个try的用法,以前一直对要求输入的数据类型没有办法,这个可以用了!
收获颇丰!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-13 10:16:46 | 显示全部楼层
楼主好人,对于新手来说很好理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 00:27:00 | 显示全部楼层
楼主,关于命题有个疑问,20万到40万之间时,高于20万元的部分,可提成5%;是指仅仅计算高于20万的部分么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 09:47:39 | 显示全部楼层
看了所有的代码。总结一下,
1.显然,if...elif...语句的运算量最小,框架选用它没错。
2.列表的引用,是非常不错的。列表的优点在于它的全局性和直观性。全局性就不提了,直观性还是很重要的,便于修改。毕竟大家不是为了做黑客,写出来的东西便于浏览修改和使用才是关键。
3.最后,报错机制值得学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-19 22:53:15 | 显示全部楼层
  1. l = int(input('Please enter profit:'))

  2. award = 0

  3. if l > 100:
  4.     award = (l - 100) * 0.01
  5.     l = 100
  6. if l > 60:
  7.     award += (l - 60) * 0.015
  8.     l = 60
  9. if l > 40:
  10.     award += (l - 40) * 0.03
  11.     l = 40
  12. if l > 20:
  13.     award += (l - 20) * 0.05
  14.     l = 20
  15. if l > 10:
  16.     award += (l - 10) * 0.075
  17.     l = 10
  18. if l > 0:
  19.     award += l * 0.1
  20. print(award)
复制代码
  1. Please enter profit:15
  2. 1.375
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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")

递归好像挺好,我不知道我有没有理解错意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-15 11:18:58 | 显示全部楼层
  1. def profit_count(x):
  2.     if x >= 1000000:
  3.         return 39500+((x-1000000)*0.01)
  4.     if x >= 600000:
  5.         return 33500+((x-600000)*0.015)
  6.     if x >= 400000:
  7.         return 27500+((x-400000)*0.03)
  8.     if x >= 200000:
  9.         return 17500+((x-200000)*0.05)
  10.     if x >= 100000:
  11.         return 10000+((x-100000)*0.075)
  12.     return x*0.1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 08:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表