Python 即使条件的计算结果为true,代码也会跳过循环
我无法让程序的这一部分进入while循环。插入Python 即使条件的计算结果为true,代码也会跳过循环,python,while-loop,Python,While Loop,我无法让程序的这一部分进入while循环。插入poly、x_0和epsilon的值后,程序使用函数evaluate_poly()计算ans的值,该函数工作正常,在我的特定实例中给出了答案-13.2119。我使用的ε值是0.0001。既然abs(ans)实际上大于epsilon为什么它要跳过循环 我在x_01=0行的正下方放置了一个print ans语句,以确保它在while循环之前正确计算,并且还放置了一个print epsilon语句,以确保它正确地接受了我的epsilon值(它确实这样做了)
poly
、x_0
和epsilon
的值后,程序使用函数evaluate_poly()
计算ans
的值,该函数工作正常,在我的特定实例中给出了答案-13.2119
。我使用的ε值是0.0001
。既然abs(ans)
实际上大于epsilon
为什么它要跳过循环
我在x_01=0
行的正下方放置了一个print ans
语句,以确保它在while循环之前正确计算,并且还放置了一个print epsilon
语句,以确保它正确地接受了我的epsilon
值(它确实这样做了)
循环中有
返回ans
。因此,此时该函数将退出,并且永远不会到达print
如果ans
真的是-13.2119,那么它确实进入了循环,因为返回
,所以它不会执行循环中的所有操作
即使删除循环中的
return ans
行,在其末尾也会有return x_01
。因此,在这种情况下,循环最多运行一次,这将使其与if
语句相同。在循环中放置两个return语句。当第一个被点击时,该函数只会立即退出。因此,不仅在第一个循环中退出while循环,而且永远不会到达print语句。>abs(-13.2119)>0.0001
返回True
因此,如果我将返回ans添加到函数体的末尾,它将执行函数体的其余部分?程序的目标是找到一个x_0的值,该值将给出小于0.0001的ans(不确定这是否对您的答案有任何影响)@BradGalpin:您需要从循环中删除return
语句,因为它们将立即退出函数。但是现在,ans
没有在循环中更新,因此它将无限运行。您需要将ans
更新为循环中的新值。您可能希望在最后返回x,而不是ans
。啊,好的,我认为return语句会更新while循环上方的ans,然后使其重新计算while循环。此外,while循环中的print语句仅用于帮助我尝试定位发生/未发生事件的位置。谢谢你的帮助
def compute_root(poly, x_0, epsilon):
"""uses newton's method to find a root of a polynomial function"""
ans = evaluate_poly(poly, x_0)
x_01 = 0
while abs(ans) > epsilon:
Dpoly = compute_deriv(poly)
Fprime = evaluate_poly(Dpoly, x_01)
return ans
x_01 = x_0 - (ans/Fprime)
print x_01
return x_01
print ans