19. For - Else

모든 프로그래밍 언어에서 루프는 필수요소입니다. 마찬가지로 for 루프는 파이썬에서도 중요한 부분입니다. 그러나 입문자들이 for 루프에 대해서 잘 모르는 몇 가지가 있습니다. 하나씩 살펴보겠습니다.

잘 알고 있는 것부터 시작 해봅시다. for 루프를 아래와같이 사용한다는 것은 잘 알고 있습니다.

fruits = ['apple', 'banana', 'mango']
for fruit in fruits:
    print fruit.capitalize()

# Output: Apple
#         Banana
#         Mango

위 예제는 for 루프의 아주 기본적인 구조입니다. 그러면 파이썬의 for 루프의 좀 덜 알려진 특성들을 살펴보겠습니다.

19.1 else 문:

대부분 친숙 하지는 않겠지만, for 루프는 또한 else문을 가지고 있습니다. else문은 루프가 정상적으로 완료되면 실행됩니다. 이 의미는 루프가 어떤 break문도 만나지 않았다는 것입니다. 사용법을 이해하면 정말 유용합니다. 저는 정말 늦게 그것들을 알게 됐습니다.

루프를 실행하고 각 아이템을 검색하는 것이 일반적인 구조입니다. 아이템을 찾으면 break를 사용해서 루프를 빠져나옵니다. 루프를 종료시키는 두 가지 시나리오가 있습니다. 첫번째는 아이템을 발견하고 break를 만나 루프를 빠져나오는 것 입니다. 두번째 시나리오는 루프를 끝까지 도는 것입니다. 그러면 둘 중 어떤 것이 루프를 종료시키는 원인인지 궁금할 것입니다. 한 가지 방법은 플래그를 설정 한 다음 루프가 끝나면 플래그를 확인하는 것입니다. 다른 하나는 else 절을 ​​사용하는 것입니다.

for/else 루프의 기본 구조입니다.

for item in container:
    if search_somting(item): 
        # 찾았습니다!
        process(item)
        break
else:
    # 아무것도 찾지 못했을 떄
    not_found_in_container()

공식 문서에서 가져온 간단한 예시를 보겠습니다.

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print (n, '=', x, '*', n/x)
            break

위 결과값은 2와 10사이의 인수(소수가 아닌수)들입니다. 지금부터가 재미있는 부분입니다. else블록을 추가해서 소수들을 뽑아보겠습니다.

for n in range(2, 10):
    for x in range(2, n);
        if n % x == 0:
            print (n, '=', x, '*', n/x)
            break
    else:
        # 루프가 끝나고 요소를 못 찾았을 때 
        print (n, '은 소수입니다.')

results matching ""

    No results matching ""