#以下一段代码不知道哪里出了问题,望各位大佬指正一下
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
你这样是掉到无限递归里了,把你的判定改成
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
另外,建议在函数的文档字符串中添加输入和输出的说明,以方便其他人理解函数的作用。