2015-01-19 4 views
1

나는 Python online exercise에서 일하고 있습니다.int리스트에 int가 연속적으로 존재하는지 확인합니다

작업은에 :

 
Given an array of ints, return True if the array contains a 2 next to a 2 somewhere. 

    has22([1, 2, 2]) → True 
    has22([1, 2, 1, 2]) → False 
    has22([2, 1, 2]) → False 

내가 지금까지 가지고 코드 :

def has22(nums): 
    for i in range (len(nums)-1): 
    if nums[i+1]==2 and nums[i]==2: 
     return True 
     break 

모든 True 인스턴스를 반환하지만 나는 False에 대한 문을 포함하는 방법을 생각할 수 없다 인스턴스 (나는 제어 흐름 솔루션을 고수하고 싶다). 어떤 제안?

답변

3

당신은 return 문 후 휴식을 필요로하지 않으며, 당신은 추가 내부 문 "거짓을 반환 할"필요가 당신의 당신은 any를 사용하여 기능을 단순화 할 수

def has22(nums): 
    for i in range (len(nums)-1): 
    if nums[i+1]==2 and nums[i]==2: 
    return True 
    return False 
+0

귀하의 코드가 작동합니다. 그러나 내가 그것을 undertastand, for 루프와 반환 False statemnt은 루프 안의 False가 아닌 같은 레벨에있다. 함수가 호출되면 for 루프가 시작되고 if 문을보고 정의 된 범위 내의 조건이 충족되면 True를 반환하고 그렇지 않으면 False를 반환하여 다음 명령문으로 이동합니다. 그 맞습니까? – MyCarta

+1

네, 맞습니다. "루프"가 조건을 만족하는 요소를 찾지 못하면 다음 문을 실행합니다. - 거짓을 반환합니다. –

3

루프와 generator expression에 대한 :

def has22(nums): 
    return any(nums[i+1] == nums[i] == 2 for i in range(len(nums)-1)) 

데모 :

>>> def has22(nums): 
...  return any(nums[i+1] == nums[i] == 2 for i in range(len(nums)-1)) 
... 
>>> has22([1, 2, 2]) 
True 
>>> has22([1, 2, 1, 2]) 
False 
>>> has22([2, 1, 2]) 
False 
>>> 
+0

mmm, 저는 아이디어가 마음에 들지만 어떤 것이 내장되어 있어도이 온라인 연습은 그렇지 않습니다. 그것을 받아들이는 것처럼 보입니다. 오류 메시지 : 컴파일 문제 : 오류 : 'any'가 정의되지 않았습니다. – MyCarta

+1

반드시 Python 2.4 또는 이전 버전을 사용해야합니다. –

관련 문제