python初学者遇到的一些问题

#以下一段代码不知道哪里出了问题,望各位大佬指正一下


def bonus_calculator(x):
    '''
    输入利润(单位万元),返回提成
    '''
    if x <= 10:
        return  0.1*x
    elif 1020:
        return 1 + (x-10)*0.075
    elif 20<=x<40:
        return bonus_calculator(20)+(x-20)*0.05
    elif 40<=x<60:
        return bonus_calculator(40)+(x-40)*0.03
    elif 60<=x<100:
        return bonus_calculator(60)+(x-60)*0.015
    elif x>=100:
        return bonus_calculator(100)+(x-100)*0.01

img

你这样是掉到无限递归里了,把你的判定改成


def bonus_calculator(x):
    '''
    输入利润(单位万元),返回提成
    '''
    if x <= 10:
        return  0.1*x
    elif 10<x<=20:
        return 1 + (x-10)*0.075
    elif 20<x<=40:
        return bonus_calculator(20)+(x-20)*0.05
    elif 40<x<=60:
        return bonus_calculator(40)+(x-40)*0.03
    elif 60<x<=100:
        return bonus_calculator(60)+(x-60)*0.015
    elif x>100:
        return bonus_calculator(100)+(x-100)*0.01

改成这样后,可以避免递归调用的时候,再次回到自身的分支

你有时大于等于,有时小于等于,都不一致的吗
而且这样写很啰嗦啊

if x<10:
    ...
elif x<20:
    ...
elif x<40:
    ...
else:
    ...

这样写

该回答引用ChatGPT

在第8行和第10行的条件中,存在一个漏洞,当利润为10万元时,条件同时符合第一个和第二个条件。因此,应该将第二个条件修改为 "x <= 20",以避免重叠条件。

下面是修改后的代码:


def bonus_calculator(x):
    '''
    输入利润(单位万元),返回提成
    '''
    if x <= 10:
        return  0.1*x
    elif 10 < x <= 20:
        return 1 + (x-10)*0.075
    elif 20 < x <= 40:
        return bonus_calculator(20) + (x-20)*0.05
    elif 40 < x <= 60:
        return bonus_calculator(40) + (x-40)*0.03
    elif 60 < x <= 100:
        return bonus_calculator(60) + (x-60)*0.015
    elif x > 100:
        return bonus_calculator(100) + (x-100)*0.01

此外,第14行和第16行的条件语句中使用了 "<" 和 ">=" 运算符,这样做不严谨,因为可能会存在舍入误差,应该改为 "<=" 和 ">" 运算符。

修改后的代码如下:


def bonus_calculator(x):
    '''
    输入利润(单位万元),返回提成
    '''
    if x <= 10:
        return  0.1*x
    elif 10 < x <= 20:
        return 1 + (x-10)*0.075
    elif 20 < x <= 40:
        return bonus_calculator(20) + (x-20)*0.05
    elif 40 < x <= 60:
        return bonus_calculator(40) + (x-40)*0.03
    elif 60 < x <= 100:
        return bonus_calculator(60) + (x-60)*0.015
    elif x > 100:

    return bonus_calculator(100) + (x-100)*0.01

这样就可以避免条件重叠和舍入误差的问题了。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
你好,这段代码的问题在于第 10 行和第 13 行的条件判断写法有误。Python 中的判断符号应该使用 and 和 or 而不是 && 和 ||。

以下是正确的代码:

def bonus_calculator(x):
    '''
    输入利润(单位万元),返回提成
    '''
    if x <= 10:
        return 0.1 * x
    elif 10 < x < 20:
        return 1 + (x - 10) * 0.075
    elif 20 <= x < 40:
        return bonus_calculator(20) + (x - 20) * 0.05
    elif 40 <= x < 60:
        return bonus_calculator(40) + (x - 40) * 0.03
    elif 60 <= x < 100:
        return bonus_calculator(60) + (x - 60) * 0.015
    elif x >= 100:
        return bonus_calculator(100) + (x - 100) * 0.01


另外,建议在函数的文档字符串中添加输入和输出的说明,以方便其他人理解函数的作用。