мои результаты округлены, я хочу получить полный ответ, пожалуйста - PullRequest
0 голосов
/ 29 февраля 2020

Вот мой код в Python:

def my_sqrt(a):
    x=1
    while True:
        y=(x+a/x)/2.0
        if y==x:
            break
        x=y
        return y

Вывод, который я получаю:

>>> my_sqrt(1.0)
>>> my_sqrt(2)
1.5

Ищу получить:

my_sqrt(1.0)-->1.0
my_sqrt(2)-->1.41421356237

1 Ответ

1 голос
/ 29 февраля 2020

return завершает функцию и немедленно возвращается. Он имеет отступ, поэтому он находится в l oop и работает безоговорочно в конце первой итерации. Отложите его для запуска после завершения l oop из-за break:

def my_sqrt(a):
    x = 1
    while True:
        y = (x + a / x) / 2.0
        if y == x:
            break
        x = y
    return y

В качестве альтернативы, поскольку return завершает функцию и, следовательно, l oop, вам даже не нужно break:

def my_sqrt(a):
    x = 1
    while True:
        y = (x + a / x) / 2.0
        if y == x:
            return y
        x = y
...