반복문(Loop): while의 기본 (조건 만족 시 반복)
1. 서론: 조건이 참인 동안, 끝없이 반복하다
이전 챕터에서 우리는 for 문을 사용하여 리스트나 문자열과 같은 반복 가능한 객체의 요소들을 순회하거나, range() 함수를 통해 특정 횟수만큼 반복하는 방법을 배웠습니다. for 문은 반복 횟수가 정해져 있거나, 반복할 대상이 명확할 때 매우 유용합니다. 하지만 때로는 반복 횟수를 미리 알 수 없거나, 특정 조건이 True인 동안 계속해서 반복해야 하는 상황이 발생합니다. 예를 들어, 사용자가 ‘종료’라고 입력할 때까지 계속해서 입력을 받거나, 특정 값이 될 때까지 계산을 반복하는 경우 등이 그렇습니다. 이때 필요한 것이 바로 while 문입니다. while 문은 주어진 조건식이 True인 동안 코드 블록을 반복하여 실행합니다. 이 챕터에서는 while 문의 기본 구조와 다양한 활용법, 그리고 무한 루프와 같은 주의사항에 대해 깊이 있게 알아보겠습니다. while 문을 마스터하는 것은 여러분의 파이썬 프로그램에 유연하고 동적인 반복 제어 능력을 부여하는 핵심적인 단계가 될 것입니다.
2. while 문의 기본 구조
while 문은 다음과 같은 기본 구조를 가집니다.
while 조건식:
# 조건식이 True일 때 반복적으로 실행될 코드 블록
# (반드시 들여쓰기 해야 합니다)
# 조건식을 False로 만들 수 있는 코드가 반드시 포함되어야 합니다.
설명:
while: 반복문의 시작을 알리는 키워드입니다.조건식:True또는False로 평가될 수 있는 표현식입니다. 이 조건식이True인 동안while문 아래의 코드 블록이 반복적으로 실행됩니다.:(콜론): 조건식 뒤에는 반드시 콜론을 붙여야 합니다.- 코드 블록: 콜론 뒤에 오는 코드들은 반드시 들여쓰기(Indentation)를 해야 합니다. 들여쓰기가 끝나는 지점에서
while문이 종료됩니다.
중요: while 문 안에는 반드시 조건식을 False로 만들 수 있는 코드가 포함되어야 합니다. 그렇지 않으면 반복문이 영원히 끝나지 않는 ‘무한 루프(Infinite Loop)’에 빠지게 됩니다.
예시:
count = 0
while count < 5:
print(f"현재 카운트: {count}")
count += 1 # count를 1씩 증가시켜 조건식을 False로 만듭니다.
print("반복문 종료.")
# 출력:
# 현재 카운트: 0
# 현재 카운트: 1
# 현재 카운트: 2
# 현재 카운트: 3
# 현재 카운트: 4
# 반복문 종료.
위 예시에서 count < 5라는 조건식은 count가 0, 1, 2, 3, 4일 때는 True이므로 반복문이 실행됩니다. count가 5가 되는 순간 count < 5는 False가 되어 반복문이 종료됩니다.
3. while 문 활용 예시
다양한 상황에서 while 문을 어떻게 활용할 수 있는지 살펴보겠습니다.
3.1. 사용자 입력 유효성 검사
사용자로부터 올바른 입력을 받을 때까지 계속해서 입력을 요청하는 경우에 유용합니다.
password = ""
while len(password) < 8:
password = input("비밀번호를 입력하세요 (8자 이상): ")
if len(password) < 8:
print("비밀번호가 너무 짧습니다. 다시 입력해주세요.")
print("비밀번호 설정 완료!")
# 사용자가 12345를 입력하면: 비밀번호가 너무 짧습니다. 다시 입력해주세요.
# 사용자가 mysecretpassword를 입력하면: 비밀번호 설정 완료!
3.2. 숫자 맞추기 게임
import random
target_number = random.randint(1, 100) # 1부터 100 사이의 랜덤 숫자 생성
guess = 0
attempts = 0
print("1부터 100 사이의 숫자를 맞춰보세요!")
while guess != target_number:
try:
guess = int(input("숫자를 입력하세요: "))
attempts += 1
if guess < target_number:
print("더 높게!")
elif guess > target_number:
print("더 낮게!")
else:
print(f"정답입니다! {attempts}번 만에 맞추셨어요!")
except ValueError:
print("유효한 숫자를 입력해주세요.")
# 사용자가 정답을 맞출 때까지 반복됩니다.
3.3. 특정 조건이 만족될 때까지 반복
balance = 1000 # 초기 잔액
interest_rate = 0.05 # 연 이자율 5%
years = 0
# 잔액이 2000 이상이 될 때까지 반복
while balance < 2000:
balance *= (1 + interest_rate) # 이자 적용
years += 1
print(f"{years}년 후 잔액: {balance:.2f}원")
print(f"잔액이 2000원 이상이 되기까지 {years}년이 걸렸습니다.")
4. 무한 루프 (Infinite Loop)와 break
while 문을 사용할 때 가장 주의해야 할 점은 ‘무한 루프’입니다. 조건식이 항상 True로 유지되어 반복문이 영원히 끝나지 않는 상황을 말합니다. 이는 프로그램이 멈추거나 시스템 자원을 고갈시키는 원인이 될 수 있습니다.
# 무한 루프 예시 (절대 실행하지 마세요!)
# while True:
# print("이 메시지는 영원히 출력됩니다.")
무한 루프를 의도적으로 만들고 특정 조건에서 반복문을 종료하고 싶을 때는 break 문을 사용합니다. break 문은 현재 실행 중인 반복문을 즉시 종료하고, 반복문 다음의 코드로 제어를 이동시킵니다.
while True: # 무한 루프 시작
user_input = input("'종료'를 입력하면 프로그램이 끝납니다: ")
if user_input == "종료":
print("프로그램을 종료합니다.")
break # 반복문 종료
else:
print(f"입력: {user_input}")
print("프로그램이 완전히 종료되었습니다.")
이 패턴은 사용자로부터 입력을 계속 받거나, 특정 이벤트가 발생할 때까지 대기하는 프로그램에서 유용하게 사용됩니다.
5. while 문과 else 블록
for 문과 마찬가지로 while 문도 else 블록을 가질 수 있습니다. while 문의 else 블록은 while 루프가 break 문 없이 정상적으로 (즉, 조건식이 False가 되어) 종료되었을 때 실행됩니다.
count = 0
while count < 3:
print(f"현재 count: {count}")
count += 1
else:
print("while 루프가 정상적으로 완료되었습니다.")
# 출력:
# 현재 count: 0
# 현재 count: 1
# 현재 count: 2
# while 루프가 정상적으로 완료되었습니다.
# break 문으로 종료 시 else 블록 실행 안 됨
i = 0
while i < 5:
print(i)
if i == 2:
print("break! else 블록은 실행되지 않습니다.")
break
i += 1
else:
print("이 메시지는 출력되지 않습니다.")
# 출력:
# 0
# 1
# 2
# break! else 블록은 실행되지 않습니다.
while-else 구조는 특정 조건을 만족하는 경우를 찾지 못하고 반복문이 끝까지 실행되었을 때 추가적인 처리를 하고 싶을 때 유용합니다.
6. 결론: 조건 기반 반복의 마스터
이 챕터를 통해 여러분은 파이썬 while 문의 기본 구조와 다양한 활용법을 익혔습니다. 주어진 조건식이 True인 동안 코드 블록을 반복하여 실행하는 원리를 이해하고, 사용자 입력 유효성 검사, 게임 구현, 특정 조건 만족 시까지 반복 등 다양한 예제를 통해 그 활용법을 배웠습니다. 또한, 무한 루프의 위험성과 이를 제어하는 break 문의 중요성, 그리고 while 문과 함께 사용되는 else 블록의 특별한 기능까지 살펴보았습니다.
while 문은 for 문과는 다른 상황, 즉 반복 횟수를 미리 알 수 없거나 특정 조건이 만족될 때까지 반복해야 하는 경우에 매우 강력한 도구입니다. for 문과 while 문은 파이썬 프로그래밍의 두 기둥을 이루는 핵심적인 반복문이므로, 이 둘을 적절히 선택하고 활용하는 능력을 키우는 것이 중요합니다.
이제 여러분은 파이썬 프로그램에 조건 기반의 반복 제어 능력을 부여할 수 있게 되었습니다. 다음 챕터에서는 break와 continue 문을 더 깊이 있게 다루며, 반복문의 흐름을 더욱 정교하게 제어하는 방법을 배우게 될 것입니다. 오늘 배운 while 문을 활용하여 다양한 시나리오를 가정하고 직접 프로그램을 만들어 보면서, 여러분의 파이썬 실력을 더욱 단단하게 다지세요!
