问题是字符串实际上没有被计算。它只是被转换成float,所以错误提示您正在做的是将“0**2”转换成float,这是不可能的,您可以做的是使用eval函数来计算任何给定的字符串,然后比较结果。
你只需要做这样一个小小的改变:
result=eval(function.replace("x",str(x)))
这还不是最好的方法,您应该在那里使用生成器:
def maxf(function,interval):
maxresult = 0
for x in range(interval[0]-1,interval[1]+1):
yield eval(function.replace("x",str(x))), x
print(max(maxf("x**2", [1, 3])))
a_list = [1,3]
max_item = max(a_list, key=lambda x: eval("x**2"))
print(eval("x**2".replace("x", str(max_item))), max_item)