2016-11-01 4 views
0

숫자 분석을 읽는 동안 아주 어리석은 지점에 머물러 있습니다.for 루프를 사용한 간단한 함수

그래서 다음과 같은 프로그램이 있습니다. 그리고 나는 왜 내가이 결과를 얻는 지 상상할 수 없다.

여기에서 을 heron(x,y)에 사용하면 어떻게됩니까?

오직 첫 번째 것이 제게 의미가 있기 때문입니다. 함수에서 i를 전혀 사용하지 않으면 숫자가 감소하는 이유는 무엇입니까?

def heron(x,y): 
    x=(x+y/x)*0.5 
    return x 

x=1 
y=2 
for i in range(5): 
    x=heron(x,y) 
    print('Approximation of square root : %.16f'%x) 

결과 :

Approximation of square root :1.5000000000000000 
Approximation of square root :1.4166666666666665 
Approximation of square root :1.4142156862745097 
Approximation of square root :1.4142135623746899 
Approximation of square root :1.4142135623730949 

편집 : 코드는 클래스 내 교수에 의해 주어진 내가 그것의 유일한 사용은 파이썬의 몇 가지 기본적인 것들을 설명했다 추측했다?

+5

루프 내에서 'x'의 값이 변경되기 때문에. –

+0

'heron'의 입력 변수에 전역 변수 이름을 사용하지 마십시오 –

+0

@ kiran.koduru 무엇을 의미합니까? – MooingRawr

답변

3

라인

for i in range(5): 

에만 의미

는 다음과 같은 다섯 번 마십시오.

실제 작업 heron의 인수의 일부로 x 사용하고 다시 상기 변경된 값을 할당

x = heron(x,y) 

에서 이루어진다. 따라서 y은 변경되지 않고 heron을 호출 할 때마다 x이 변경됩니다. 변경된 x은 다음 호출의 인수로 사용됩니다.

편집 : 어떤 알고리즘을 구현하려고하는지 모르기 때문에 이것이 올바른 구현인지 결정할 수 없습니다. 그러나 당신은 단지 물었습니다 :

i가 함수에서 전혀 사용되지 않는 이유는 무엇입니까?

+1

'i'가 사용되지 않으므로 'for range (5)'를 사용하는 것이 더 좋습니다 –

+0

아! 그래서 처음에는 x = 1을 가졌지 만 첫 번째 루프 이후에 x는 1.5와 똑같습니다. – RedRose23

+0

예, 'heron'에 대한 첫 번째 호출의 결과입니다. '1.5 '는'x'에 할당되고 두 번째 호출에 사용됩니다. –

-1

난 당신이 다음과 같이 코드를 수정해야합니다 생각 : -

def heron(x,y): 
    x=(x+y/x)*0.5 
    return x 

x=1 
y=2 
for i in range(5): 
    z=heron(x,y) 
    print 'Approximation of square root :%.16f'%z 
0

당신은 숫자의 루트 광장을 찾아 Heron's algorithm을 구현하기 위해 노력하고 있습니다.

각 단계에서 결과의 정밀도를 높이는 반복 알고리즘입니다.

구현시 x은 초기 솔루션이고 y은 루트 스퀘어를 찾고 싶은 번호입니다.

5 개의 반복 작업을 수행하고 있고 변수 i은 반복 작업을 수행 할 필요가 없습니다. _을 사용하여 불필요한 변수를 선언 할 수 있습니다.

원하는 정밀도를 정의하고 원하는 정밀도에 도달하기 위해 여러 번 반복 할 수 있습니다.

def heron(x,y): 
    x=(x+y/x)*0.5 
    return x 

x=1 
y=2 
numberOfIterations = 5 
for _ in range(numberOfIterations): 
    x=heron(x,y) 
    print('Approximation of square root : %.16f'%x) 
관련 문제