如何使用嵌套循环找到数字的平方根?

时间:2018-10-20 16:07:43

标签: python

def main():
    num = int(input("What number? "))
    err = 0.0001
    square_root(num, err)

def square_root(num, err):

    for x in range(num):
        guess=1
        next_guess=guess-((guess*guess)-num)/(2*guess)
        guess=next_guess     
        print(guess, end=' ' )
    print()

在课堂上,我们最近开始使用嵌套循环,我们的任务之一是使用循环,使用Isaac Newton的微积分方程求数的平方根,以求平​​方根。

老师(试图)教我们如何使用滑动窗技术来解决它,但是对我来说这没有任何意义。

此代码的问题是它不会更改“ guess”变量,而是会反复打印出相同的数字。它也无法正确解决。例如,如果我将13作为输入,它将输出7.0,这是不正确的,因为13的平方根是3.6。

2 个答案:

答案 0 :(得分:2)

您每次循环都在重置guess。您可以将guess的初始化移到循环外:

def square_root(num, err):
    guess = 1
    for x in range(num):
       next_guess=guess-((guess*guess)-num)/(2*guess)
       guess=next_guess     

    return guess

print(square_root(49, .001))

这在7.0上非常快地收敛,但是您可以考虑接受参数遍历循环的次数。例如,在上面寻找2的平方根不会给出很好的结果 因为它只循环两次。一种选择是使用您传入的err值并运行循环,直到您的猜测仅改变该数量。像这样:

def square_root(num, err):
    guess = 1.0
    curr_err = guess-((guess*guess)-num)/(2*guess)
    while(curr_err > err):
        next_guess=guess-((guess*guess)-num)/(2*guess)
        curr_err = abs(guess - next_guess)
        guess=next_guess     

    return guess

print(square_root(2, .000001))

#1.4142135623730951

通过此操作,您可以调整err以获得越来越准确的结果。

答案 1 :(得分:1)

我会尝试查看python sqrt()或pow(num,0.5)函数的工作方式,或者查看this tutorial,它很好地解释了滑动窗口技术,我建议这样做。