2012-05-14 3 views
1

임 파이썬 초보자, 그리고 내가 순서에서 가장 큰 조각을 계산하기 위해이 특정 코드를 통해 온은 그러나 단순히 캔트 다음 코드이 문장 블록은 파이썬에서 정확히 무엇을합니까?

best = A[0] 
for size in range(1,n+1): 
    cur = sum(A[:size]) 
    for i in range(n-size): 
     cur += A[i+size] -= A[i] # <- what happens here? 
     best = max(best, cur) 

에게에 어떤 생각을 이해하는 것 방법 코드 기능과 특히 그 라인은 도움이 될 것입니다!

+1

파이썬에서 구문 오류로'... + = ... - = ...'. – eumiro

+0

@eumiro, 정정 해! – KodeSeeker

+1

이 코드의 소스가 있습니까? – Levon

답변

2

먼저 코드의 오류는 =입니다. 작업 코드 : 루프의 외부 size 세트 cur 1에 그렇다면이 A의 제 size 항목의 합으로 설정되어 시작하여, 더 큰 슬라이스가 만들어

n = len(A) 
best = A[0] 
for size in range(1,n+1): 
    cur = sum(A[:size]) 
    for i in range(n-size): 
     cur += A[i+size] - A[i] # <- what happens here? 
     best = max(best, cur) 

.

내부 루프에서이 슬라이스는 슬라이스 오른쪽에 값 (A[i+size])을 추가하고 슬라이스의 첫 번째 값 (A[i])을 뺀 값으로 오른쪽으로 "이동"됩니다.

마지막으로 best은 새로 계산 된 합계와 지금까지 발견 된 최대 값 중 큰 값으로 설정됩니다.

결국 best은 가장 큰 합계를 포함합니다. A에 음수 값이 포함되어 있지 않으면 대답은 간단합니다 : sum(A).

편집 : 버그가 있음을 눈치 채 셨습니다. 슬라이스 크기 1 (best = A[0])을 제외하고는 가장 왼쪽 슬라이스가 계산되지 않았습니다. 따라서 A = [4, 3, 2] 일 경우 9 대신 5을 출력합니다. 내부 for 루프 위에 best = max(best, cur) 행을 추가하여 수정하십시오.

+0

thanks mate! 파이썬은 다른 언어에서 오는 동안 이상하게 보일 수 있습니다! 따라서 의심! :) – KodeSeeker

2

일반적으로 표현식은 최종 할당을하기 전에 왼쪽에서 오른쪽으로 평가됩니다.

그러나 유효한 구문이라고 생각하지 않습니다.이 코드의 소스가 있습니까? ,

cur += A[i+size] -= A[i] 

A[i+size] -= A[i] 

cur += A[i+size] 

엉덩이된다 :

In [246]: a = 5 
In [247]: b = 10 
In [248]: c = 0 

In [249]: c += a -= b 
    File "<ipython-input-249-67e83b5a3545>", line 1 
    c += a -= b 
      ^
SyntaxError: invalid syntax 

당신은 두 개의 별도의 문으로이 라인을 깨는 시도 할 수 :

이 간단한 코드가 실패 uming 당신이 충실하게 몇몇 저자는 코드가 최종 사본에 포함 된 테스트하지 않는 코드를 복사, 그래서 운영자가 엉망이 된 오류를 의심하여 ​​

(특히 -=는 다른 운전자, 예를 들어, - 될 수 있음) 그런데 here (페이지 하단)의 에라타을 확인했습니다. 이 오류는 표시되지 않으며 동료 독자에게 제출하는 것이 좋습니다.

+0

, 그것을 보아 주셔서 감사합니다! :) – KodeSeeker

관련 문제