2016-07-29 1 views
0

좋아, 나는이 질문에 이전에 대답하지 않았다고 생각한다.파이썬 튜플 및 재 할당 이해하기

정확히 어떻게 파이썬이이 루프를 실행하는지 궁금합니다. 참고로이 6.00SC MIT OCW에서 교훈 2의 일부는 다음과 같습니다 루프에 대한이 라인으로 라인을 실행하는 방법을

def evaluate_poly(poly, x): 
    """ Computes the polynomial function for a given value x. Returns that value. 

    Example: 
    >>> poly = (0.0, 0.0, 5.0, 9.3, 7.0) # f(x) = 7x^4 + 9.3x^3 + 5x^2 
    >>> x = -13 
    >>> print evaluate_poly(poly, x) # f(-13) = 7(-13)^4 + 9.3(-13)^3 + 5(-13)^2 
    180339.9 
    poly: tuple of numbers, length > 0 
    x: number 
    returns: float """ 

    ans = 0.0 
    for i in xrange(len(poly)): 
     ans += poly[i] * (x ** i) 
    return ans 

사람이 나에게 설명 할 수 있습니까? 나는 ans가 각 반복을 업데이트하는 5 번 (폴리 튜플의 길이)을 실행하기 위해 i 변수가 생성된다는 것을 알고 있습니다. 내가 혼란 스러울 때마다 매번 i의 재 할당이 있습니다. ANS 통해

번째 시간 = 0.0 + (5) * X ** (2)

그것은 그 폴리 [I]를 인덱스 번호 (5)을 잡고 있지만, 다음 X가 곱 날 것으로 보인다 이제 인덱스 위치 자체 인 i의 힘 (2). 정확히 무엇을 해야하는지, 그러나 나는 겉으로보기에 인덱스 된 숫자와 인덱스 된 위치가 될 수있는 방법을 이해할 수 없습니다.

나는 프로그래밍에 익숙하지 않으므로 모든 정보가 엄청난 도움이 될 것입니다.

감사합니다.

+0

줄 앞의'a ns = 0.0' put'import pdb; pdb.set_trace()'. [주제에 대한 좋은 자습서가 있습니다.] (https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/) –

+0

'x ** i'는 "x의 i의 힘"을 의미하고, 그것은 여러분이 다항식에서 볼 것을 기대하는 것입니다. – khelwood

+0

'x ** i'는'x'에'i'를 곱하지 않습니다. 그것은'i'의 힘에'x'입니다. –

답변

1

xrange는 0에서 매개 변수 빼기 1까지의 범위를 만들기 때문에 0,1,2,3,4 루프의 번호에 할당됩니다. 매개 변수는 5 (5)를 반환하는 len (poly)입니다. . 어레이 그러므로 나는 4까지 0에서 할당 (= 5-1)

는 첫 번째 반복 I는 0과 같다 :

폴리 [0] 실제로 폴리 첫번째 요소와 동일 (0.0)

수식은 다음과 같습니다.

ans += poly[i] * (x ** i) 
ans = ans + poly[i] * (x ** i) 
ans = 0.0 + poly[0] * (-13 in the power of 0) 
ans = 0.0 + 0.0 * (-13 in the power of 0) 
ans = 0.0 
,691,363,210

다음 반복 i는 1과 같다 :

ans = ans + poly[i] * (x ** i) 
ans = 0.0 + poly[1] * (-13 in the power of 1) 
ans = 0.0 + 0.0 * (-13 in the power of 1) 
ans = 0.0 

다음 반복 i가 2 같다 :

ans = ans + poly[i] * (x ** i) 
ans = 0.0 + poly[2] * (-13 in the power of 2) 
ans = 0.0 +  5.0 * (-13 in the power of 2) 

다음 반복 i가 3과 같다 :

ans = ans + poly[i] * (x ** i) 
ans = 5.0 * (-13 in the power of 2) + poly[3] * (-13 in the power of 3) 
ans = 5.0 * (-13 in the power of 2) +  9.3 * (-13 in the power of 3) 

마지막 반복 i가 4 같다 :

ans = ans + poly[i] * (x ** i) 
ans = 5.0 * (-13 in the power of 2) + 9.3 * (-13 in the power of 3) + poly[4] * (-13 in the power of 4) 
ans = 5.0 * (-13 in the power of 2) + 9.3 * (-13 in the power of 3) +  7.0 * (-13 in the power of 4) 
+0

이것은 내가 찾고있는 것입니다. 상세한 설명을 가져 주셔서 감사합니다. – Chris