2014-02-28 2 views
2

Я попытался вычислить this алгоритм с питоном и не похоже на работу:Square алгоритм Root ошибка

lt = False 
x = 5 
g = 2 

while lt == False: 
    if g*g > (x-0.1) and g*g < (5.1): 
     lt = True 
    print(g+"IS THE SQUARE ROOT") 
else: 
    g = (g + x/g)/2 
    print(g) 

В цикле еще, я напечатал г, чтобы увидеть результат моего алгоритма в каждом цикле потому что раньше я испытывал медленные вычисления и хотел посмотреть, в чем проблема, и теперь print (g), похоже, постоянно возвращается 2. Я новичок в python, и проблема, вероятно, смотрит на меня в лицо, но я не могу похоже, это поможет, любая помощь будет очень признательна!

+1

Является ли отступ, который вы показываете в правильном вопросе (то есть, на самом деле это то, что в вашем коде)? В настоящее время он выглядит так, как блок 'else' привязан к циклу while, а не' if'. – Blckknght

+0

Какую версию python вы используете? Кажется, он использует целочисленное деление вместо плавающей запятой. '(2 + 5/2)/2 = (2 + 2)/2 = 2' Посмотрите здесь для получения дополнительной информации: http://stackoverflow.com/questions/2958684/python-division – clcto

+0

Что не так с использованием' g * * .5'? – hd1

ответ

0

Поменяйте пункт и блок else: и вызов print().

0

Проблема заключается в вашем сочетании вкладок и пробелов. Python ожидает, что вы будете последовательны, и it is preferred использовать четыре пробела для отступов. Вкладки - совсем другой персонаж и не всегда имеют одинаковую ширину. В некоторых средах они имеют ширину 4 символа. Python интерпретирует их шириной 8 символов.

Эти две линии используются пробелы:

if g*g > (x-0.1) and g*g < (5.1): 
    lt = True 

Все остальные строки с помощью вкладок.

1

Вы получаете 2, потому что питон округления чисел, потому что вы используете целые числа, вам нужно использовать floats так:

x = float(5) 
g = float(2) 

Сейчас:

>>g = (g + x/g)/2 
>>print(g) 
2.25 
+2

+1, но это верно только для python 2.x. Python3 делает деление с плавающей запятой по умолчанию и '//' является целым делением. – clcto

0

Проблема заключается в том, что питон раундов целые числа. Вам нужно ввести значения x и g в качестве поплавков вместо

x = float(5) 
g = float(2) 

Это должно сработать, удачи! :)

Это работает в python 2.x, но я не знаю, какую версию вы используете, поэтому это лучший ответ, который я могу предоставить.

2
x = float(5) 
g = float(2) 

Python rounds int in v2.x. Надеюсь это поможет.

Смежные вопросы