2014-10-15 1 views
0

나는 코더 바이트의 파이썬 배열 추가를하고 있었지만 도전 할 수는 없었다. 나는 다른 사용자의 올바른 코드를 보았고, 나는 그것에 당혹 스러웠다. 주로 return 문에서 "또는"무엇을합니까? 그것은이 문제에 대한 해결책을 완전히 이해하는 것을 방해합니다. 감사.파이썬에서 무엇을하는지 return 문 /리스트 부분 집합 합계에 대한 설명

질문은 다음과 같습니다. ArrayAdditionI (arr) 함수가 arr에 저장된 숫자의 배열을 가져 와서 배열의 숫자 조합을 합하여 배열의 가장 큰 숫자와 그렇지 않은 경우는 false를 돌려줍니다. 예를 들어, arr에 [4, 6, 23, 10, 1, 3]이 포함되어있는 경우 4 + 6 + 10 + 3 = 23이므로 출력은 true를 반환합니다. 배열은 비어 있지 않고 동일한 요소를 모두 포함하지 않으며, 음수를 포함 할 수 있습니다.

def subsetsum(target, arr): 
    if len(arr) == 0: 
     return target == 0 

    return subsetsum(target, arr[1:]) or subsetsum(target - arr[0], arr[1:]) 

def ArrayAdditionI(arr): 
    arr = sorted(arr) 
    target = arr[-1] 
    arr = arr[:-1] 
    return 'true' if subsetsum(target, arr) else 'false' 


# keep this function call here 
# to see how to enter arguments in Python scroll down 
print ArrayAdditionI(raw_input())   
+0

중복 가능성 (http://stackoverflow.com/questions/13870378/python-or-operator-weird-behavior) –

답변

0

"돌아 가기"와 관련하여 특별한 일을하지 않으므로 혼란 스럽습니다. 수익을 가져가 그냥 문 중 하나가 True로 평가되므로 True로 평가 윌 boolean expression

False or True 

의 봐. return을 사용한 예제는 부울 표현식을 평가 한 결과를 반환하는 것입니다. subsetsum() 호출 중 하나라도 True를 반환하면 True를 반환하고 그렇지 않으면 False를 반환합니다.

>>> False or True 
True 
>>> False or False 
False 
1

다음은이를 분해하는 방법은 다음과 같습니다

return subsetsum(target, arr[1:]) or subsetsum(target - arr[0], arr[1:]) 

이 양식 return a or ba = subsetsum(target, arr[1:])b = subsetsum(target - arr[0], arr[1:]) 있습니다.

bool (a)이 True 인 경우 a or b 표현식이 누락되어 a 값이 무엇이든 반환합니다. bool(a)False 인 경우 의 값을 확인하려면 b을 평가해야합니다.

따라서 return a or b은 bool (a)가 True 인 경우 b 논리가 누락 된 경우 b가 평가되지 않는다는 장점이있는 다음과 같은 약식입니다.

if bool(a): 
    return a 
else: 
    return b 
[파이썬 "또는"연산자 이상한 행동]의