2017-01-14 7 views
0

저는 Python 2.7.12를 사용합니다. 제가 공부하고있는 알고리즘의 책은 파이썬 3을 사용합니다. 지금까지는 대부분의 알고리즘을 파이썬 2로 쉽게 바꿀 수 있지만,이 제곱근 함수는 뉴턴의 법칙을 사용하여 여전히 나를 잊어 버렸습니다. 여기 Python 3 함수가 Python 2.7.12에서 작동하지 않습니다

원래 파이썬 3

def square_root(n): 
    root = n/2 #initial guess will be 1/2 of n 
    for k in range(20): 
     root = (1/2) * (root + (n/root)) 
    return root 

을에, 코드입니다 그리고 여기 파이썬 2.7.12에서 함수를 호출 할 때 오류입니다 :

print square_root(9) 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 4, in square_root 
ZeroDivisionError: integer division or modulo by zero 

내가 좋겠를 Python 2.7에서이 함수를 작성하는 법을 알고 싶다.

답변

3

파이썬 2에서는 두 피연산자 모두 정수 인 경우 /으로 나눗셈을 수행합니다. 1/20입니다. 파이썬 3에서 /은 항상 적절한 나누기 (1/2 == 0.5)를 사용하고 //은 정수 나누기를 수행합니다.

스크립트 상단에 from __future__ import divison을 추가하면 Python 3 동작을 얻을 수 있습니다.

+1

을 :) 아마 완료 파이썬 3에서이 작업이 적절한 분할 된 것을 추가 할 가치가 있고 난 눈치 부동 – hansaplast

+0

를 산출 :) – RemcoGerlich

+1

그래서 __future__에서 나누기를 가져올 필요가 없습니다. (1/2) 대신 n/2.0과 0.5를 사용하십시오. :디 – Dalen

1

파이썬 2에서 두 정수의 나눗셈은 항상 정수가되고 파이썬 3에서는 부동입니다. 알고리즘 문제를 해결하려면, 힘 파이썬이 부동 소수점 연산자 사용하기 : 당신이 3 초 나를 이길

def square_root(n): 
    root = n/2.0 #initial guess will be 1/2 of n 
    for k in range(20): 
     root = (1.0/2) * (root + (n/root)) 
    return root