函数未返回值(Python 2.7)

1 投票
1 回答
4274 浏览
提问于 2025-04-18 11:47

我正在尝试在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

撰写回答