파이썬에서 루프와 함께 else 문 사용하기
파이썬에는 다른 프로그래밍 언어에서는 보기 드문 독특한 기능이 있습니다. 바로 for 루프나 while 루프에 else 절을 붙일 수 있다는 점입니다. else 블록은 루프의 모든 반복이 정상적으로 완료된 후, 즉 프로그램 제어가 루프 블록을 벗어나기 직전에 실행됩니다.
while 루프와 else
다음 예제를 살펴보겠습니다. 카운터 변수 x가 5보다 작은 동안 루프가 실행되고, 조건이 거짓이 되어 루프가 종료되는 순간 else 블록이 실행됩니다.
x=0
while x<5:
x=x+1
print (x)
else:
print ("else block of loop")
print ("loop is over")실행 결과는 다음과 같습니다.
1 2 3 4 5 else block of loop loop is over
출력에서 확인할 수 있듯이, 1부터 5까지 출력된 후 루프의 else 블록이 먼저 실행되고, 그다음에 루프 외부의 "loop is over" 문장이 실행됩니다.
for 루프와 else
for 루프에서도 동일하게 동작합니다. 이터러블(iterable)의 모든 항목을 처리하고 난 뒤 else 블록이 실행됩니다.
for i in range(3):
print(i)
else:
print("반복이 모두 끝났습니다")break 문과 else의 관계
else 블록의 진짜 활용 가치는 break 문과 함께 사용할 때 드러납니다. 루프 안에서 break 문이 실행되면 루프가 강제로 종료되면서 else 블록은 건너뛰게 됩니다. 반대로 break 없이 루프가 끝까지 실행되면 else 블록이 실행됩니다.
numbers = [1, 3, 5, 7, 9]
for n in numbers:
if n % 2 == 0:
print("짝수 발견:", n)
break
else:
print("짝수가 없습니다")위 예제에서는 리스트에 짝수가 없으므로 break가 실행되지 않고, 그 결과 else 블록이 실행되어 "짝수가 없습니다"가 출력됩니다. 이처럼 루프-else 구조는 검색 작업에서 원하는 값을 찾지 못했을 때의 처리 로직을 if 플래그 변수 없이 간결하게 작성할 수 있게 해줍니다.
정리
- else 블록은 루프가 break 없이 정상적으로 완료되었을 때 실행됩니다.
- break 문으로 루프가 중단되면 else 블록은 실행되지 않고 건너뛰어집니다.
- 주로 검색 작업에서 값을 찾지 못한 경우의 후속 처리를 깔끔하게 표현하는 데 유용합니다.