2016-09-20 2 views
-2

매개 변수와 같지 않은 목록의 모든 숫자를 추가하는 함수를 작성하려고합니다. 작동하지 않는 코드는 다음과 같습니다.매개 변수와 다른 숫자를 목록에 추가하려면 어떻게합니까?

def suminout(nums,a,b): 
    total=0 
    for i in range(len(nums)): 
     if nums[i]!=a or nums[i]!=b: 
      total=total+nums[i] 
    return total 

목록의 모든 내용이 합산 된 것으로 보입니다.

예를 들어

, 내가 전화하는 경우 : 그것은 그러나 7을 반환해야 suminout ([1,2,3,4], 1,2) , 나는 10

어떤 생각을 무엇입니까?

+5

당신은'and' 대신 or''의 필요합니다. 아니면 그냥 합계를해라. – Kasramvd

+0

@ Kasramvd 나는 a와 b를 튜플이 아니라 딕트 (dictle)에 넣을 의도가 있다고 생각한다. 즉, 코드에 구문 오류가 추가됩니다. – euphoria83

+1

@ euphoria83'{a, b}'는 [설정]입니다 (https://docs.python.org/3.4/library/stdtypes.html#set-types-set-frozenset) –

답변

0

당신은 and 대신 or 사용해야합니다.

def suminout(nums,a,b): 
    total=0 
    for i in range(len(nums)): 
     if nums[i]!=a and nums[i]!=b: 
      total=total+nums[i] 
    return total 

귀하의 for 논리가 더로 (len()range()를 사용하지 않고) 단순화 할 수있다 : 숀에서 언급 한 바와 같이 sum()list comprehension을 사용하여 달성하기

for num in nums: 
    if num not in [a, b]: # same as: num != a and num != b 
     total += num # same as: total = total + num 

더 나은 방법입니다. OR 대신 지능형리스트의 filter()을 사용할 수 있습니다 :

>>> my_list = [1, 2, 3, 4] 
>>> sum(filter(lambda x: x !=1 and x!=4, my_list)) 
5 
1

Kasramvd가 그렇게 지적했듯이, 당신은 분리가 필요하지 않습니다.

다음은 동일한 일을하는 목록 이해입니다.

def suminout(nums, a, b): 
    total = 0 
    total = sum([x for x in nums if (x!=a and x!=b)]) 
    return total 
+1

'total = 0' 당신의 코드 –

+0

@MoinuddinQuadri 나는 알고있다. 그냥 OP와 비슷한 질문을합니다. – seanmus

+0

나는 그것이 유사한 코드를 유지하고 있기 때문에 그것이라고 생각하지 않는다. 만약 그렇다면,'sum()'을 사용하지 않았을 것이고 에러를 지적했을 것입니다. 나는'sum()'이이 결과를 얻는 더 좋은 방법이라는 데 동의한다. 그리고 이것을 사용한다면'total = 0'은 필요 없습니다. 그것이 내 요점이었습니다. –

0

또는를 :

def suminout(nums, a, b): 
    total = 0 
    total = sum([x for x in nums if x not in (a,b)]) 
    return total 
관련 문제