因此,我试图跟随Python中的SICP讲座,并为牛顿方法找到平方根近似值构建了简单的黑盒模型。
代码本身似乎运行良好,但是我的函数不断返回None?在下面的tryfor函数中,我将其打印出来并返回了近似值,以便父函数可以返回近似值。
我从打印功能知道我的代码可以找到正确的答案。但是,当我编写print(NewtonSqrt(2))时,返回None-我的近似值尚未“返回”,为什么会这样。
def NewtonSqrt(x):
def improve(guess):
return (guess + (x/guess)) / 2
def goodenough(guess):
if abs(guess - (x/guess)) < 0.00001:
return True
def tryfor(guess):
if goodenough(guess) == True:
print(guess)
return guess
else:
tryfor(improve(guess))
return tryfor(1)
print(NewtonSqrt(2))
答案 0 :(得分:0)
除了优化的可能性外,代码还有两个问题。第一个是如果使用浮点数,则应尊重变量类型。使用
return (guess + (x/guess)) / 2.
代替
return (guess + (x/guess)) / 2
第二个是递归。 tryfor函数必须以return结尾:
def NewtonSqrt(x):
def improve(guess):
return (guess + (x/guess)) / 2.
def goodenough(guess):
if abs(guess - (x/guess)) < 0.00001:
return True
def tryfor(guess):
if goodenough(guess) == True:
#print(guess)
return guess
else:
return tryfor(improve(guess))
return tryfor(1)
print(NewtonSqrt(2))
现在输出将与None不同。我希望你觉得它有用!