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。
答案 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,它很好地解释了滑动窗口技术,我建议这样做。