【发布时间】:2013-07-17 00:36:17
【问题描述】:
在过去的一个小时里,我一直在尝试破解这个问题,但在这里遇到了一些麻烦。这就是问题
这种计算数字 n 平方根的方法开始于 对平方根进行(非零)猜测。然后它使用 原来的猜测计算新的猜测,根据公式
newGuess = ((n / oldGuess) + oldGuess) / 2.0;有两个变量
oldGuess和newGuess。将oldGuess初始化为n / 2.0并根据上述公式计算newGuess。采用 一个while循环迭代,只要绝对值oldGuess和newGuess之间的差异大于1.0E-06。不要忘记将oldGuess的值重置为newGuesswhile 循环中的值。在您的程序中,您将提示用户输入一个正数。 如果该数字为负数,则打印一条错误消息并要求用户 再试一次。对于正数,使用 以上方法。找出你得到的平方根之间的差 以及使用幂运算符获得的值。写 输出用户输入的值、您计算的平方根以及 差异(你的平方根 -
n ** 0.5)
这是我目前的程序
def main():
n = eval(input("Enter a positive number: "))
while (n <= 0):
print ("Error please re-input")
n = eval(input("Enter a positive number: "))
oldGuess = n / 2.0
newGuess = ((n / oldGuess) + oldGuess) / 2.0;
difference = n - n ** 0.5
while (difference < 1 * 10 ** -6):
print ("Error")
difference = abs(n - n ** 0.5)
print ("Difference:", difference)
main()
所以我真的不明白我们如何告诉程序进行猜测然后计算变量 n 的平方根。我什至不认为我的 while 语句在这种情况下是正确的。我不使用已经嵌入到 python 中的 squareroot 函数,所以它必须手动完成我相信仍然迷失了guess 函数的含义。
【问题讨论】:
-
这是一道作业题吗?
-
您希望在绝对差异大于而不是很小的情况下继续迭代。
-
使用
eval是危险的。请改用float -
如果你想实现一个平方根算法,
n ** 0.5真的不属于这里。 -
如果你不确定你的循环在做什么,要么添加
print调用来显示你,要么使用 interactive visualizer,内置调试器,你最喜欢的 IDE 的图形包装器调试器等并找出答案。这比猜测或尝试推理要容易得多。
标签: python python-3.3 square-root