Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 即使条件的计算结果为true,代码也会跳过循环_Python_While Loop - Fatal编程技术网

Python 即使条件的计算结果为true,代码也会跳过循环

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值(它确实这样做了)

我无法让程序的这一部分进入while循环。插入
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