0

因此,我尝试跟随 Python 中的 SICP 讲座,并为寻找平方根近似值的牛顿方法构建了简单的黑盒模型。

代码本身似乎工作正常,但我的函数一直返回 None?在下面的 tryfor 函数中,我已经使它既打印近似值又返回它,这样父函数就可以返回近似值。

我从 print 函数中知道我的代码可以找到正确的答案。但是,当我编写 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))
4

1 回答 1

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 不同。希望对你有帮助!!

于 2019-06-19T10:39:54.550 回答