Python & AI Tutorials Logo
Python 프로그래밍

11. while 반복문으로 동작 반복하기

프로그램은 종종 어떤 동작을 여러 번 반복해야 합니다. 여러분은 이미 8장에서 if 문으로 어떻게 결정을 내리는지 보았지만, 특정 조건이 만족될 때까지 어떤 동작을 반복해서 수행해야 한다면 어떨까요? 바로 이때 반복문(loop) 이 필요합니다.

Python은 두 가지 주요 반복문을 제공합니다. while 반복문과 for 반복문입니다. 이 장에서는 조건이 True로 유지되는 동안 코드 블록을 반복하는 while 반복문에 집중하겠습니다. 시퀀스를 순회(iterating)하는 데 더 적합한 for 반복문은 12장에서 다룹니다.

while 반복문을 이해하는 것은 데이터를 반복적으로 처리하고, 사용자 입력을 검증하며, 게임 루프를 구현하고, 그 밖의 많은 실제 프로그래밍 시나리오를 처리할 수 있는 프로그램을 작성하는 데 기본이 됩니다.

11.1) while 반복문의 구조

while 반복문(while loop) 은 지정된 조건이 True로 평가되는 동안 코드 블록을 반복적으로 실행합니다. 조건이 False가 되면 반복문은 멈추고, 프로그램은 반복문 뒤의 코드를 계속 실행합니다.

기본 while 반복문 문법

while 반복문의 구조는 다음과 같습니다:

python
while condition:
    # 반복할 코드 블록
    # 이 코드는 condition이 True인 동안 실행됩니다

condition은 불리언 값으로 평가되는(또는 7장에서 배운 것처럼 truthy 또는 falsy로 해석될 수 있는) 어떤 표현식이든 될 수 있습니다. while 문 아래의 들여쓰기된 코드 블록은 반복문 본문(loop body) 이라고 하며, 조건이 True로 유지되는 동안 반복해서 실행됩니다.

간단한 예를 보겠습니다:

python
# 1부터 5까지 세기
count = 1
while count <= 5:
    print(f"Count is: {count}")
    count = count + 1  # count 증가시키기
print("Loop finished!")

Output:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Loop finished!

이것이 단계별로 어떻게 동작하는지:

  1. count1로 초기화합니다
  2. 조건 count <= 5를 확인합니다. 1 <= 5True이므로 반복문 본문이 실행됩니다
  3. 반복문 안에서 현재 count를 출력한 다음 1을 더해 증가시킵니다
  4. 반복문 본문이 끝나면 Python은 while 문으로 돌아가 조건을 다시 확인합니다
  5. 이 과정은 count6이 될 때까지 반복되며, 그 시점에서 6 <= 5False가 되어 반복문이 종료됩니다
  6. 프로그램은 반복문 뒤의 코드로 계속 진행합니다

핵심 포인트는 조건이 각 반복(iteration) (반복문 본문을 한 번 실행하는 것) 이전에 확인된다는 점입니다. 처음부터 조건이 False라면 반복문 본문은 아예 한 번도 실행되지 않습니다:

python
count = 10
while count <= 5:
    print("This will never print")
print("Loop skipped entirely")

Output:

Loop skipped entirely

10 <= 5는 시작부터 False이므로 반복문 본문은 한 번도 실행되지 않습니다.

반복문 변수 수정의 중요성

while 반복문이 결국 멈추려면, 반복문 내부에서 조건을 True에서 False로 바꾸는 어떤 변화가 있어야 합니다. 이는 일반적으로 조건에 사용되는 변수(들)를 수정하는 것을 의미합니다. 이를 잊어버리면 무한 반복문(infinite loop) 을 만들게 됩니다(다음 섹션에서 자세히 다룹니다).

다음은 반복문 변수를 업데이트하는 것이 왜 중요한지 보여주는 예입니다:

python
# 1부터 10까지의 합 계산하기
total = 0
number = 1
 
while number <= 10:
    total = total + number  # 현재 number를 total에 더하기
    number = number + 1     # 다음 number로 이동하기
 
print(f"The sum of numbers from 1 to 10 is: {total}")

Output:

The sum of numbers from 1 to 10 is: 55

이 예에서는 숫자를 진행해 가면서 합을 누적합니다. 각 반복에서 totalnumber 모두 바뀌지만, 반복문이 number11이 되었을 때 종료되도록 보장하는 것은 number의 수정입니다.

사용자 입력과 함께 사용하는 while 반복문

while 반복문의 실용적인 사용 사례 중 하나는 특정 조건이 만족될 때까지 사용자 입력을 처리하는 것입니다. 간단한 숫자 맞히기 게임을 만들어 봅시다:

python
# 간단한 숫자 맞히기 게임
secret_number = 7
guess = 0
 
while guess != secret_number:
    guess = int(input("Guess the number (1-10): "))
    
    if guess < secret_number:
        print("Too low! Try again.")
    elif guess > secret_number:
        print("Too high! Try again.")
    else:
        print("Correct! You guessed it!")

이 반복문은 사용자가 정답 숫자를 입력할 때까지 계속해서 추측을 요구합니다. 각 반복은 하나의 추측을 처리하고 피드백을 제공합니다. guesssecret_number와 같아지면 조건 guess != secret_numberFalse가 되면서 반복문이 자연스럽게 종료됩니다.

여러 조건을 사용하는 while 반복문

9장에서 배운 것처럼 불리언 연산자(and, or, not)를 사용해 더 복잡한 반복 조건을 만들 수 있습니다:

python
# 사용자가 "quit"을 입력하거나 5번 시도에 도달할 때까지 입력 처리
attempts = 0
user_input = ""
 
while user_input != "quit" and attempts < 5:
    user_input = input("Enter a command (or 'quit' to exit): ")
    attempts += 1
    
    if user_input == "quit":
        print("Goodbye!")
    else:
        print(f"You entered: {user_input}")
        print(f"Attempts remaining: {5 - attempts}")
 
if attempts >= 5 and user_input != "quit":
    print("Maximum attempts reached.")

이 반복문은 조건이 모두 참인 동안 계속됩니다: 사용자가 "quit"을 입력하지 않았고 그리고 5번의 시도를 초과하지 않았습니다. 어느 한 조건이라도 거짓이 되면 반복문이 종료됩니다.

while 반복문 실행을 시각화하기

다음은 while 반복문이 어떻게 실행되는지 보여주는 순서도입니다:

True

False

시작

변수 초기화

조건 확인

반복문 본문 실행

변수 업데이트

반복문 이후로 진행

반복문은 조건을 확인하고, 조건이 참이면 본문을 실행하고, 변수를 업데이트한 뒤, 조건을 다시 확인하는 사이클을 만듭니다. 이 사이클은 조건이 거짓이 될 때까지 계속됩니다.

11.2) 무한 반복문과 이를 피하는 방법

무한 반복문(infinite loop) 은 조건이 결코 False가 되지 않아서 종료되지 않는 반복문입니다. 무한 반복문은 초보자가 while 반복문에서 가장 흔히 하는 실수 중 하나이며, 프로그램이 무기한 멈춰 있는(hang) 상태가 되게 할 수 있습니다.

무한 반복문은 무엇 때문에 생기나요?

무한 반복문의 가장 흔한 원인은 반복 조건에 영향을 주는 변수(들)를 수정하는 것을 잊는 것입니다. 문제가 있는 예를 보겠습니다:

python
# 경고: 무한 반복문 - 시연용
# 문제: count가 한 번도 수정되지 않음
count = 1
while count <= 5:
    print(f"Count is: {count}")
    # Missing: count += 1

이 코드를 실행하면 count1로 남아 있고 1 <= 5는 항상 True이기 때문에 "Count is: 1"을 영원히 출력하게 됩니다. 조건이 결코 바뀌지 않습니다.

이것이 무한 반복문임을 알아보는 방법: 반복 조건(count <= 5)을 보고, 반복문 본문 안에서 count를 수정하는 것이 있는지 확인하세요. 없고, 조건이 처음부터 True라면 무한 반복문입니다.

수정된 버전은 다음과 같습니다:

python
# 올바르게 증가시키는 수정 버전
count = 1
while count <= 5:
    print(f"Count is: {count}")
    count += 1  # 이것이 반복문이 결국 종료되도록 보장합니다

Output:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5

안전 한도를 사용해 무한 반복문 디버깅하기

반복문이 있는 코드를 개발할 때는 테스트 중 실수로 무한 반복문이 생기는 것을 막기 위해 안전 한도를 추가하는 것이 도움이 됩니다:

python
# 개발 중 안전 한도
count = 1
iterations = 0
max_iterations = 100  # 안전 한도
 
while count <= 5 and iterations < max_iterations:
    print(f"Count is: {count}")
    count += 1
    iterations += 1
 
if iterations >= max_iterations:
    print("WARNING: Maximum iterations reached. Check for infinite loop.")

이 패턴은 반복문이 실행된 횟수를 추적하는 카운터를 추가합니다. 안전 한도에 도달하면 반복 로직에 문제가 있다는 것을 알 수 있습니다. 반복문이 제대로 동작하는 것이 확실해지면 안전 한도를 제거해도 됩니다.

사용자 입력에서의 무한 반복문

무한 반복문이 자주 생기는 또 다른 시나리오는 사용자 입력 검증입니다:

python
# 경고: 잠재적 무한 반복문 - 시연용
# 문제: 사용자가 유효한 입력을 절대 넣지 않으면 반복문이 끝나지 않음
age = -1
while age < 0:
    age = int(input("Enter your age: "))
    # 사용자가 음수를 입력하면 반복문이 계속됩니다

이 반복문은 사용자가 결국 음수가 아닌 수를 입력하면 정상 동작하지만, 사용자가 계속 음수만 입력하면 무한 반복문이 됩니다. 일부 프로그램에서는 이것이 허용될 수도 있습니다(유효한 입력을 받을 때까지 계속 묻고 싶기 때문입니다). 하지만 반복문 종료가 전적으로 사용자 행동에 달려 있다는 점을 이해하는 것이 중요합니다.

더 견고한 방법은 종료할 수 있는 방법을 포함하는 것입니다:

python
# 종료 옵션이 있는 더 나은 접근
age = -1
while age < 0:
    user_input = input("Enter your age (or 'quit' to exit): ")
    
    if user_input.lower() == 'quit':
        print("Exiting program.")
        age = 0  # 반복문을 종료하기 위해 유효한 값으로 설정
    else:
        age = int(user_input)
        if age < 0:
            print("Age must be non-negative. Please try again.")
 
if age > 0:
    print(f"Your age is: {age}")

논리 오류로 인한 무한 반복문

가끔은 변수를 업데이트하는 방식의 논리 오류 때문에 무한 반복문이 발생합니다:

python
# 경고: 무한 반복문 - 시연용
# 문제: count가 증가가 아니라 감소됨
count = 1
while count <= 5:
    print(f"Count is: {count}")
    count -= 1  # 실수: count를 크게 만드는 것이 아니라 작게 만듭니다

이 코드는 count1에서 시작해 0, -1, -2 ...로 바뀌기 때문에 무한 반복문이 됩니다. 음수는 항상 5보다 작거나 같으므로 count <= 5 조건은 영원히 True로 남습니다.

수정된 버전:

python
count = 1
while count <= 5:
    print(f"Count is: {count}")
    count += 1  # 올바름: 결국 5를 초과하도록 증가시킵니다

무한 반복문 디버깅하기

Python 스크립트를 실행하는 중에 실수로 무한 반복문을 만들었다면, 터미널에서 Ctrl+C(Mac에서는 Cmd+C)를 눌러 중지할 수 있습니다. 이는 Python에 키보드 인터럽트 신호를 보내 프로그램을 멈춥니다.

무한 반복문을 피하는 방법:

  1. 반드시 반복 조건이 False가 될 수 있게 하세요: 조건에 사용되는 변수가 반복문 안에서 수정되는지 확인합니다
  2. 올바른 비교 연산자를 사용하세요: <=, <, != 등이 의도와 맞는지 확인합니다
  3. 먼저 작은 값으로 테스트하세요: 많은 횟수를 실행할 수 있는 반복문을 돌리기 전에 작은 한도로 테스트합니다
  4. 디버그 print 문을 추가하세요: 반복문 변수가 어떻게 바뀌는지 보기 위해 임시로 출력합니다:
  5. 개발 중 안전 한도를 사용하세요: 앞에서 보여준 것처럼 테스트할 때 최대 반복 횟수 카운터를 추가합니다

11.3) while 반복문에서 break와 continue 사용하기

Python은 반복문 실행을 더 세밀하게 제어할 수 있게 해주는 두 가지 특별한 문인 breakcontinue를 제공합니다. 이 문들은 실행 중 발생하는 조건에 따라 반복문의 일반적인 흐름을 바꿀 수 있게 해줍니다.

11.3.1) break 문

break 문은 반복 조건과 관계없이 반복문을 즉시 종료합니다. Python이 break를 만나면 반복문에서 완전히 빠져나오고, 반복문 뒤의 코드로 계속 진행합니다.

간단한 예를 보겠습니다:

python
# 특정 값에 도달하면 반복문 종료
count = 1
while count <= 10:
    if count == 5:
        print("Reached 5, stopping loop")
        break
    print(f"Count: {count}")
    count += 1
 
print("Loop exited")

Output:

Count: 1
Count: 2
Count: 3
Count: 4
Reached 5, stopping loop
Loop exited

count5가 되면 break 문이 실행되고 반복문이 즉시 종료된다는 점에 주목하세요. 조건 count <= 10은 여전히 True일 수 있지만, 반복문은 count = 6에 도달하지 않습니다.

break가 반복 흐름을 바꾸는 방식

break가 일반적인 반복문 실행을 어떻게 바꾸는지 이해하는 것은 매우 중요합니다. 다음은 그 차이를 보여주는 순서도입니다:

False

True

Yes

No

반복문 시작

while 조건 확인

정상적으로 반복문 종료

반복문 본문 코드 실행

break를 만났나?

즉시 반복문 종료

반복문 본문 끝까지 계속

반복문 이후 코드

핵심 포인트: break는 반복문에서 즉시 빠져나오는 경로를 제공하여, 남은 반복문 본문 코드와 조건 확인을 모두 건너뜁니다.

break의 실용적 활용: 입력 검증

break의 가장 흔한 사용처 중 하나는 유효한 입력을 받으면 반복문을 종료하는 것입니다:

python
# 유효한 입력을 받을 때까지 계속 요청
while True:
    age_input = input("Enter your age (must be positive): ")
    
    # 정수로 변환 시도
    try:
        age = int(age_input)
        
        # 유효성 확인
        if age > 0:
            print(f"Thank you! Your age is {age}")
            break  # 유효한 입력이면 반복문 종료
        else:
            print("Age must be positive. Please try again.")
    except ValueError:
        print("That's not a valid number. Please try again.")
 
print("Input validation complete")

이 패턴은 while True:로 의도적인 무한 반복문을 만든 다음, 유효한 입력을 받으면 break로 빠져나옵니다. 이는 복잡한 반복 조건을 관리하려는 것보다 더 깔끔합니다. (참고: 여기서는 tryexcept를 사용하고 있는데, 이는 VII부에서 자세히 배웁니다. 지금은 입력을 정수로 변환할 때 발생하는 오류를 잡는다는 것만 이해하면 됩니다.)

여러 조건에서 break 사용하기

break는 여러 기준 중 어떤 것이든 만족되면 반복문을 종료하도록 복잡한 조건과 함께 사용할 수 있습니다:

python
# 사용자 입력에서 특정 항목 찾기
search_term = "python"
attempts = 0
max_attempts = 5
 
while attempts < max_attempts:
    user_input = input("Enter a word (or 'quit' to exit): ").lower()
    attempts += 1
    
    if user_input == 'quit':
        print("User requested exit")
        break
    
    if user_input == search_term:
        print(f"Found '{search_term}'!")
        break
    
    print(f"'{user_input}' is not '{search_term}'. Try again.")
    print(f"Attempts remaining: {max_attempts - attempts}")
 
if attempts >= max_attempts:
    print("Maximum attempts reached")

이 반복문은 세 가지 방식으로 종료될 수 있습니다:

  1. 사용자가 "quit"을 입력함(첫 번째 break)
  2. 사용자가 검색어를 입력함(두 번째 break)
  3. 최대 시도 횟수에 도달함(반복 조건이 False가 됨)

11.3.2) continue 문

continue 문은 현재 반복의 나머지 부분을 건너뛰고 반복 조건 확인으로 되돌아갑니다. 반복문을 완전히 종료하는 break와 달리, continue는 다음 반복으로 넘어가기만 합니다.

기본 예를 보겠습니다:

python
# 1부터 10까지 홀수만 출력
count = 0
while count < 10:
    count += 1
    
    if count % 2 == 0:  # 짝수라면
        continue  # 나머지를 건너뛰고 다음 반복으로 이동
    
    print(f"Odd number: {count}")

Output:

Odd number: 1
Odd number: 3
Odd number: 5
Odd number: 7
Odd number: 9

동작 방식:

  1. 각 반복 시작에서 count가 증가합니다
  2. count가 짝수라면(count % 2 == 0) continue가 실행됩니다
  3. continue 문은 print 문을 건너뛰고 while 조건으로 되돌아갑니다
  4. count가 홀수라면 continue가 실행되지 않으므로 print 문이 실행됩니다

continue가 반복 흐름을 바꾸는 방식

다음은 continue가 반복문 실행에 미치는 영향을 보여주는 순서도입니다:

False

True

Yes

No

반복문 시작

while 조건 확인

반복문 종료

continue 검사 전 코드 실행

continue를 만났나?

반복문 본문의 남은 코드 실행

breakcontinue의 결정적 차이:

  • break: 반복문을 완전히 종료하고 반복문 뒤 코드로 점프합니다
  • continue: 현재 반복의 남은 코드를 건너뛰고 조건 확인으로 되돌아갑니다

continue의 중요한 배치 참고사항

count += 1continue 이전에 온다는 점에 주목하세요. 이를 뒤에 놓으면, 짝수일 때 continue가 증가 처리를 건너뛰게 되어 무한 반복문이 생깁니다:

python
# 경고: 무한 반복문 - 시연용
# 문제: 짝수에서 continue가 증가 처리를 건너뜀
count = 0
while count < 10:
    if count % 2 == 0:
        continue  # count += 1을 포함해 아래를 전부 건너뜁니다
    count += 1  # 실수: 짝수에서는 이 줄이 절대 실행되지 않습니다
    print(f"Odd number: {count}")

count0(짝수)일 때 continue가 실행되어 count += 1을 건너뜁니다. 그러면 반복문은 다시 0 < 10을 확인하고, 이 사이클이 영원히 반복됩니다.

규칙: 반복 조건에 영향을 주는 반복문 변수는, 반복문 본문의 나머지를 건너뛸 수 있는 어떤 continue 문보다 이전에 업데이트되도록 항상 보장하세요.

continue의 실용적 활용: 데이터 필터링

continue 문은 데이터를 처리하면서 특정 항목을 건너뛰고 싶을 때 유용합니다:

python
# 유효한 점수만 처리
score_count = 0
total_score = 0
attempts = 0
 
while attempts < 5:
    score_input = input(f"Enter score {attempts + 1} (or 'skip' to skip): ")
    attempts += 1
    
    if score_input.lower() == 'skip':
        print("Skipping this score")
        continue  # 다음 반복으로 이동
    
    try:
        score = int(score_input)
        
        if score < 0 or score > 100:
            print("Score must be between 0 and 100. Skipping.")
            continue  # 유효하지 않은 점수 건너뛰기
        
        # 유효한 점수 - 처리하기
        total_score += score
        score_count += 1
        print(f"Score recorded: {score}")
        
    except ValueError:
        print("Invalid input. Skipping.")
        continue
 
if score_count > 0:
    average = total_score / score_count
    print(f"\nAverage of {score_count} valid scores: {average:.1f}")
else:
    print("\nNo valid scores entered")

이 예는 continue를 여러 번 사용하는 것을 보여줍니다:

  • 사용자가 "skip"을 입력하면 건너뜀
  • 점수가 유효 범위를 벗어나면 건너뜀
  • 입력이 유효한 숫자가 아니면 건너뜀

continue는 점수가 합계에 더해지는 것을 막지만, 반복문은 다음 시도로 계속 진행합니다.

break와 continue 결합하기

같은 반복문에서 breakcontinue를 모두 사용해 더 정교한 제어를 할 수 있습니다:

python
# 합이 100을 초과할 때까지 숫자를 처리하되, 음수는 건너뛰기
total = 0
count = 0
 
while True:
    number_input = input("Enter a number (or 'done' to finish): ")
    
    if number_input.lower() == 'done':
        print("User finished entering numbers")
        break  # 반복문 종료
    
    try:
        number = int(number_input)
        
        if number < 0:
            print("Negative numbers not allowed. Skipping.")
            continue  # 다음 반복으로 이동
        
        total += number
        count += 1
        print(f"Added {number}. Current total: {total}")
        
        if total > 100:
            print("Total exceeded 100. Stopping.")
            break  # 한도에 도달하면 반복문 종료
            
    except ValueError:
        print("Invalid input. Skipping.")
        continue
 
print(f"\nFinal total: {total} (from {count} numbers)")

이 반복문은 다음을 보여줍니다:

  • 사용자가 "done"을 입력하면 break로 종료
  • 음수는 continue로 건너뜀
  • 유효하지 않은 입력도 continue로 건너뜀
  • 합이 100을 초과하면 break로 종료

11.4) while 반복문에서 else 사용하기

Python에는 많은 다른 프로그래밍 언어에는 없는 독특한 기능이 있습니다. while 반복문에 else 절을 붙일 수 있다는 점입니다. 이 else 블록은 반복문이 정상적으로 완료될 때만 실행됩니다(즉, break 문을 만나지 않고 반복 조건이 False가 되는 경우를 의미합니다).

while에서 else의 기본 문법

문법은 다음과 같습니다:

python
while condition:
    # 반복문 본문
else:
    # 반복문이 정상적으로 완료된 경우에만 실행됩니다
    # (break로 중단되지 않은 경우)

간단한 예를 보겠습니다:

python
# else 절과 함께 1부터 5까지 세기
count = 1
while count <= 5:
    print(f"Count: {count}")
    count += 1
else:
    print("Loop completed normally")
 
print("Program continues")

Output:

Count: 1
Count: 2
Count: 3
Count: 4
Count: 5
Loop completed normally
Program continues

반복문이 조건(count <= 5)이 False가 될 때까지 실행되었기 때문에 else 블록이 실행됩니다. 반복문은 중단되지 않고 “정상적으로” 완료되었습니다.

else가 실행되지 않는 경우: break 문

else 절의 핵심 동작은 반복문이 break 문에 의해 종료되면 실행되지 않는다는 점입니다:

python
# break로 숫자 찾기
count = 1
target = 3
 
while count <= 5:
    print(f"Checking: {count}")
    if count == target:
        print(f"Found {target}!")
        break
    count += 1
else:
    print("Target not found in range")
 
print("Search complete")

Output:

Checking: 1
Checking: 2
Checking: 3
Found 3!
Search complete

반복문이 break로 종료되었기 때문에 else 블록("Target not found in range")이 실행되지 않았다는 점에 주목하세요. 이것이 결정적 차이입니다: elsebreak로 빠져나올 때가 아니라, 반복문이 정상적으로(조건이 False가 되어) 종료될 때만 실행됩니다.

이제 target을 찾지 못하는 경우를 보겠습니다:

python
# 존재하지 않는 숫자 찾기
count = 1
target = 7  # 1-5 범위에 없음
 
while count <= 5:
    print(f"Checking: {count}")
    if count == target:
        print(f"Found {target}!")
        break
    count += 1
else:
    print("Target not found in range")
 
print("Search complete")

Output:

Checking: 1
Checking: 2
Checking: 3
Checking: 4
Checking: 5
Target not found in range
Search complete

이번에는 반복문이 target을 찾지 못한 채 모든 반복을 완료했으므로, 조건 count <= 5가 결국 False가 되었고 else 블록이 실행되었습니다.

else가 반복문 완료와 함께 동작하는 방식

다음은 else 절이 있을 때의 실행 경로를 보여주는 순서도입니다:

False

True

Yes

No

시작

while 조건 확인

else 블록 실행

반복문 본문 실행

break를 만났나?

else 블록 건너뜀

반복문 이후로 진행

else 블록은 반복 조건이 자연스럽게 False가 될 때만 도달합니다. break를 만나면 흐름은 else 블록을 건너뛰고 반복문 뒤의 코드로 바로 점프합니다.

실용적 활용: 검색 작업

else 절은 어떤 것을 찾았는지 여부를 알고 싶을 때 특히 유용합니다:

python
# 시도 리스트에서 유효한 비밀번호 찾기
valid_password = "python123"
max_attempts = 3
attempts = 0
 
while attempts < max_attempts:
    password = input(f"Enter password (attempt {attempts + 1}/{max_attempts}): ")
    attempts += 1
    
    if password == valid_password:
        print("Access granted!")
        break
else:
    print("Access denied. Maximum attempts exceeded.")
    print("Account locked.")

사용자가 올바른 비밀번호를 입력하면 break가 실행되어 else 블록은 건너뜁니다. 모든 시도를 실패하면 반복문이 정상적으로 완료되고 else 블록이 실행되어 실패를 나타냅니다.

continue와 else

continue 문은 else 블록이 실행되는 것을 막지 않습니다. 이를 막는 것은 break뿐입니다:

python
# continue는 else 실행에 영향을 주지 않습니다
count = 0
while count < 5:
    count += 1
    if count == 3:
        print(f"Skipping {count}")
        continue  # 다음 반복으로 이동
    print(f"Processing {count}")
else:
    print("Loop completed normally (continue doesn't prevent this)")

Output:

Processing 1
Processing 2
Skipping 3
Processing 4
Processing 5
Loop completed normally (continue doesn't prevent this)

반복문이 정상적으로 완료되었기 때문에 else 블록이 실행됩니다. continue는 개별 반복에만 영향을 주며, 반복문 전체의 완료 여부에는 영향을 주지 않습니다.

break가 있을 때와 없을 때의 else 비교

나란히 비교해 보겠습니다:

python
# 예제 1: 첫 번째로 7로 나누어 떨어지는 수 찾기(break 사용)
print("Finding first number divisible by 7:")
number = 1
while number <= 20:
    if number % 7 == 0:
        print(f"Found: {number}")
        break
    number += 1
else:
    print("No number divisible by 7 found in range")
print()
 
# 예제 2: 모든 수 확인(break 없음)
print("Checking all numbers for divisibility by 7:")
number = 1
while number <= 20:
    if number % 7 == 0:
        print(f"Found: {number}")
    number += 1
else:
    print("Finished checking all numbers")

Output:

Finding first number divisible by 7:
Found: 7
 
Checking all numbers for divisibility by 7:
Found: 7
Found: 14
Finished checking all numbers

첫 번째 예제에서는 첫 번째 일치를 찾은 뒤 break가 반복문을 멈추므로 else가 실행되지 않습니다. 두 번째 예제에서는 반복문이 모든 수를 확인하고 정상적으로 완료되므로 else가 실행됩니다.

while 반복문에서 else를 언제 사용할까?

else 절은 다음과 같은 경우에 가장 유용합니다:

  1. 검색 작업: 무언가를 찾았는지 여부를 알고 싶을 때
  2. 제한된 시도로 검증하기: 모든 시도를 소진한 경우를 처리해야 할 때
  3. 조기 종료가 있는 처리: “전부 완료함”과 “중간에 멈춤”에 대해 다른 동작이 필요할 때

하지만 반복문에서의 else는(이 기능이 없는 다른 언어에서 온) 프로그래머에게 혼란스러울 수 있습니다. 때로는 플래그 변수를 사용하는 것이 더 명확합니다:

python
# else 절 사용
attempts = 0
while attempts < 3:
    password = input("Enter password: ")
    attempts += 1
    if password == "secret":
        print("Access granted")
        break
else:
    print("Access denied")
 
# 플래그 변수 사용한 동등한 방식(때로는 더 명확함)
attempts = 0
access_granted = False
while attempts < 3:
    password = input("Enter password: ")
    attempts += 1
    if password == "secret":
        print("Access granted")
        access_granted = True
        break
 
if not access_granted:
    print("Access denied")

두 방법 모두 동작합니다. 여러분의 특정 상황에서 코드를 더 명확하게 만드는 쪽을 선택하세요.

while 반복문에서의 else를 이해하면, 특히 검색과 검증 시나리오에서 "찾음"과 "못 찾음" 또는 "성공"과 "모든 시도 후 실패"를 구분해야 할 때 더 명확하고 표현력 있는 코드를 작성할 수 있는 또 하나의 도구를 갖게 됩니다.


이 장에서는 while 반복문을 깊이 있게 살펴보면서 다음을 배웠습니다:

  • 조건에 따라 코드를 반복하는 반복문의 구조
  • 반복문 변수를 올바르게 업데이트하여 무한 반복문을 피하는 방법
  • 필요할 때 break로 반복문을 조기에 종료하는 방법
  • 조건에 따라 반복을 건너뛰기 위해 continue를 사용하는 방법
  • break 없이 반복문이 정상적으로 완료되는 경우를 처리하기 위해 else를 사용하는 방법

이 도구들은 프로그램에서 반복을 강력하게 제어할 수 있게 해줍니다. 다음 장에서는 문자열, 리스트(list), range 같은 시퀀스를 순회하기 위한 더 편리한 방법을 제공하는 for 반복문을 배웁니다.


© 2025. Primesoft Co., Ltd.
support@primesoft.ai