Python Square Root不起作用

时间:2014-09-26 22:04:32

标签: python loops infinite

当我运行此功能时,它会无限次地交替打印3和4。我不明白它为什么会继续下去,也不应该至少打印5?

a = 15
x = 5
while True:
    print x
    y = (x + a/x) / 2
    if y == x:
        break
    x = y

3 个答案:

答案 0 :(得分:1)

你正在进行整数除法。将常量更改为

a = 15.0
x = 5.0

此外,由于数字将float检查一些允许的精度,而不是尝试使用完全相等。

while True:
    print x
    y = (x + a/x)/2
    if abs(y - x) < 0.0001:
        break
    x = y

输出

5
4.0
3.875
3.87298387097

答案 1 :(得分:1)

我可以告诉你正在使用python 2,所以/在这种情况下是整数除法。为了强制浮点除法,有几种方法可以做到,但这可能是最简单的。

y = (x + 1.0 * a / x) / 2

答案 2 :(得分:1)

我希望这个小代码跟踪可以帮助您查看错误:

First Loop

y= (5 +  (15/5)  ) /2
y= (5 + 3) /2
y=4

4 !=5

x=4

第二个循环

y= (4+(15/4))/2
y= (4+3)/2
y=3

3!=4
x=3

第三循环

y=(3+(15/3))  /2
y=(3+5) /2
y=8/2
y=4

4!=3
x=4

会重复......