函数未返回值(Python 2.7)
我正在尝试在Python 2.7中实现一个二分法函数。对于为什么我的代码没有返回我在测试中所包围的根,我感到非常困惑。
当我在代码中加入打印语句时,很明显算法找到了根,但我一定在实际的语法上遗漏了一些基本的东西(我对Python完全是个新手)。
代码在这里:
def bisection(a,b,fun,tol):
c = (a+b)/2.0
if (b-a)/2.0 <= tol:
#Debugging print statement 1:
#print 'SOL1: c = ', c
return c
if fun(c) == 0:
#Debugging print statement 2:
#print 'SOL2: c = ', c
return c
elif fun(a)*fun(c) < 0:
b = c
else:
a = c
print 'a =', a
print 'b =', b
bisection(a, b, fun, tol)
def tstr(x):
return 2*(x**2) - 3*x + 1
sol = bisection(0, 0.9, tstr, 0.01)
1 个回答
4
你忽略了最后的递归调用;你确实需要明确地返回它的返回值:
return bisection(a, b, fun, tol)
在这里不使用 return
意味着递归调用的返回值会被忽略,而外层的调用函数没有明确的 return
语句,所以它会返回 None
。
通过这个修改,sol
实际上是被设置了:
>>> sol = bisection(0, 0.9, tstr, 0.01)
a = 0.45
b = 0.9
a = 0.45
b = 0.675
a = 0.45
b = 0.5625
a = 0.45
b = 0.50625
a = 0.478125
b = 0.50625
a = 0.4921875
b = 0.50625
>>> sol
0.49921875