본문 바로가기

반복문 else

1. else

반복문의 else는 break 없이 정상 종료되었을 때만 실행됩니다. break로 중단된 경우에는 else 블록이 실행되지 않습니다.

if문 뿐만 아니라 while, for문에서도 else문을 사용할 수 있습니다. 여기서의 else는 if에서의 else처럼 '그렇지 않으면'이라는 의미 보다는 '그런 다음'이라는 의미가 더 강하기 때문에 then으로 쓰여야 된다는 논의가 있기도 했습니다.

반복문이 break 등에 의해 중단 없이 정상적으로 반복이 종료된 후 특정 코드를 실행하게 해야 할 때 while~else, for~else를 사용할 수 있습니다.

2. for, else

for문에서의 else는 루프가 정상 종료되었을 때나 처음부터 자료형이 비어있었을 때 실행됩니다. 중간에 break문을 만나면 else문은 실행하지 않습니다.

for 변수 in 범위:
    pass # 반복 실행할 코드
else:
    pass # 반복문이 모두 실행되어 종료되고 실행할 코드

바다에 100마리의 물고기가 있고 배에 실을 수 있는 물고기의 수는 5마리라고 가정하도록 하겠습니다.

물고기 5마리를 잡으면 물고기를 더 이상 싣지 못하니 ‘만선입니다. 물고기를 다 잡았습니다.’ 라는 메시지를 띄워줍니다. 이후 break문을 만나 코드 실행이 종료됩니다.

for i in range(100):
    print(f'{i} 물고기를 잡았습니다.')
    if i == 5:
        print('만선입니다. 물고기를 다 잡았습니다.')
        break
else:
    print('아직 여유가 좀 있지만, 물고기가 더 없는 것 같으니 이정도로 만족하고 돌아갑시다.')

print('수고하셨습니다.')

이번에는 바다에 물고기가 range(5), 즉 0번부터 4번까지 다섯 마리만 있습니다. 배에 실을 수 있는 물고기는 여전히 5마리인데, i == 5가 되는 순간이 끝내 오지 않습니다. i는 4까지만 올라가고 반복이 끝나기 때문입니다.

그렇기 때문에 조건문 안에 있는 break문이 한 번도 실행되지 않고 반복문이 정상 종료됩니다. 이렇게 끝까지 다 돌고 나면 else문이 실행됩니다.

for i in range(5):
    print(f'{i} 물고기를 잡았습니다.')
    if i == 5:
        print('만선입니다. 물고기를 다 잡았습니다.')
        break
else:
    print('아직 여유가 좀 있지만, 물고기가 더 없는 것 같으니 이정도로 만족하고 돌아갑시다.')
print('수고하셨습니다.')

위 코드에서 1번 예제처럼 break문 없이 정상 종료되었을 때에는 else문이 실행됩니다. 그러나 2번 예제처럼 break문이 있을 경우에는 else문을 실행하지 않게 됩니다.

3. while, else

for와 마찬가지로 while문에서도 else는 정상 종료되었을 때 실행됩니다. 단, 처음부터 while의 조건문이 False일 경우에도 실행한다는 점을 기억해주세요.

while 조건:
    pass # 반복 실행할 코드
else:
    pass # while 반복문이 모두 실행되어 종료되고 실행할 코드

아래의 예시에서는 반복문이 정상 종료됩니다. 따라서 else문이 실행됩니다.

n = 0
while n < 5:
    print(f'현재 숫자는 {n}입니다.')
    n += 1
else:
    print('반복문을 종료합니다.')

아래와 같은 경우 break문으로 종료가 되기 때문에 else문을 실행시키지 않습니다.

n = 0
while n < 5:
    print(f'현재 숫자는 {n}입니다.')
    n += 1
    if n > 3:
        break
else:
    print('반복문을 종료합니다.')