鱼C论坛

 找回密码
 立即注册
查看: 17446|回复: 136

[技术交流] 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 | 显示全部楼层
i = int(input('净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(0,6):
    if i > arr[idx]:
        r += (i - arr[idx]) * rat[idx]
        print((i-arr[idx]) * rat[idx])
        i = arr[idx]
print(r)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 10 反对 0

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

虽然你的这个很看起来很简约,但是不符合一般的数学思维逻辑
在数学里面应该是这样:
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)

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

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

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

评分

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

查看全部评分

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

使用道具 举报

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

评分

参与人数 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[i] > 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-9 18:43:09 | 显示全部楼层
逝去的时光 发表于 2017-5-7 20:13
楼主,下面的这句代码看不懂,能不能解释下?谢谢
if profit - profit > 0
if profit - profits[i] > 0:
是这句吧?
左边时传入的参数,右边是列表里第i个元素
就是确认下传入的参数在哪个范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
#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的用法,以前一直对要求输入的数据类型没有办法,这个可以用了!
收获颇丰!!
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-24 19:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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