【问题标题】:Code skips the loop even though the condition evaluates to true即使条件评估为真,代码也会跳过循环
【发布时间】:2013-06-15 21:05:28
【问题描述】:

我无法让这部分程序进入 while 循环。插入polyx_0epsilon 的值后,程序使用函数evaluate_poly() 计算ans 的值,该函数正常工作,在我的具体实例中给出了答案-13.2119。我使用的 epsilon 值为0.0001。由于abs(ans) 实际上大于epsilon,为什么它会跳过循环?

我在 x_01 = 0 行的正下方放置了一个 print ans 语句,以确保它在 while 循环之前正确计算,并且还有一个 print epsilon 语句以确保它正确地接受了我的 epsilon 值(其中确实如此)。

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

【问题讨论】:

  • >>> abs(-13.2119) > 0.0001 返回True

标签: python while-loop


【解决方案1】:

您在循环中放置了两个返回语句。当第一个被击中时,该功能仅立即退出。因此,不仅在第一个循环中退出了 while 循环,而且永远不会到达 print 语句。

【讨论】:

    【解决方案2】:

    你的循环中有return ans。因此,此时函数将退出,并且永远无法到达 print

    如果ans 真的是-13.2119,那么它确实进入了循环,但由于return,它不会执行其中的所有操作。

    即使您删除循环内的return ans 行,其末尾也有return x_01。因此,在这种情况下,循环最多会运行一次,这将使其与 if 语句相同。

    【讨论】:

    • 所以如果我将返回 ans 添加到函数体的末尾,它会执行函数体的其余部分吗?该程序的目标是找到一个 x_0 的值,该值将给出
    • @BradGalpin:您需要从循环中删除 return 语句,因为它们将立即退出函数。但是现在ans 没有在循环内更新,所以它会无限运行。您需要将ans 更新为循环中的新值。最后你可能想返回 x 而不是 ans
    • 啊好的,我认为 return 语句会更新 while 循环上方的 ans,然后导致它重新评估 while 循环。此外,while 循环中的打印语句只是为了帮助我尝试找出事情发生/没有发生的地方。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2020-04-29
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多