
09. 반복문 (2) - while문과 반복 제어
for문이 "정해진 횟수만큼" 반복했다면, while문은 "조건이 참인 동안" 반복한다. 언제 끝날지 미리 알 수 없는 상황에서 진가를 발휘하는 while문을 알아보자.
while문의 기본 구조
while 조건식:
실행할 코드
- 조건식이
True인 동안 코드 블록을 반복 실행한다 - 조건식이
False가 되면 반복을 멈추고 빠져나온다 - for문과 마찬가지로 콜론(:)과 들여쓰기가 필수
count = 1
while count <= 5:
print(f"{count}번 실행")
count += 1 # 이걸 빼먹으면 무한루프!
print("반복 끝!")
출력:
1번 실행
2번 실행
3번 실행
4번 실행
5번 실행
반복 끝!

⚠️ 주의: while문에서는 조건을 False로 만들 장치가 반드시 있어야 한다. 그렇지 않으면 프로그램이 영원히 멈추지 않는 무한루프에 빠진다.
for문 vs while문
둘 다 반복문이지만, 사용하는 상황이 다르다.
# for문: 5번 반복 (횟수가 정해져 있다)
for i in range(5):
print(i)
# while문: 5번 반복 (같은 결과)
i = 0
while i < 5:
print(i)
i += 1
결과는 같지만 for문이 더 간결하다. 그럼 while문은 언제 쓸까?

| 구분 | for문 | while문 |
|---|---|---|
| 언제? | 반복 횟수를 미리 알 때 | 반복 횟수를 모를 때 |
| 예시 | 리스트 순회, 1~100 합계 | 사용자 입력 대기, 게임 루프 |
| 특징 | 대상을 하나씩 꺼내서 처리 | 조건이 참인 동안 계속 실행 |
while문 활용 패턴
카운트다운
count = 5
while count > 0:
print(count)
count -= 1
print("발사! 🚀")
5
4
3
2
1
발사! 🚀
누적 합산
total = 0
num = 1
while num <= 100:
total += num
num += 1
print(f"1~100의 합: {total}") # 5050
사용자 입력 반복 받기
# 올바른 입력이 올 때까지 반복
age = -1
while age < 0 or age > 150:
age = int(input("나이를 입력하세요 (0~150): "))
if age < 0 or age > 150:
print("잘못된 입력입니다. 다시 입력하세요.")
print(f"입력한 나이: {age}살")
이런 경우 for문으로는 깔끔하게 처리하기 어렵다. 언제 올바른 입력이 올지 모르기 때문이다.
무한루프와 break
무한루프란?
조건이 항상 True인 반복문을 무한루프라고 한다. 의도하지 않으면 위험하지만, 의도적으로 사용하면 매우 유용하다.
# 무한루프의 기본 형태
while True:
# 이 안의 코드가 영원히 반복된다
# break로 탈출해야 한다!
pass
무한루프 + break 패턴
실전에서 가장 많이 쓰는 조합이다.
while True:
command = input("명령어 입력 (q: 종료): ")
if command == "q":
print("프로그램을 종료합니다.")
break
print(f"'{command}' 실행 중...")
명령어 입력 (q: 종료): hello
'hello' 실행 중...
명령어 입력 (q: 종료): test
'test' 실행 중...
명령어 입력 (q: 종료): q
프로그램을 종료합니다.
계산기 예제
print("간단 계산기 (종료: quit)")
print("-" * 30)
while True:
expression = input("계산식: ")
if expression == "quit":
break
try:
result = eval(expression)
print(f"결과: {result}")
except:
print("잘못된 수식입니다")
⚠️ 참고:
eval()은 문자열을 코드로 실행하는 함수다. 학습용으로는 편리하지만, 실제 서비스에서는 보안 위험이 있어 사용하지 않는다.
while문에서 continue
8편에서 배운 continue는 while문에서도 동일하게 동작한다. 이번 회차만 건너뛰고 조건식 검사로 돌아간다.
num = 0
while num < 10:
num += 1
if num % 2 == 0:
continue # 짝수면 건너뛰기
print(num, end=" ")
# 1 3 5 7 9
⚠️ 주의: while문에서
continue를 쓸 때는 카운터 증가 위치에 주의해야 한다.continue뒤에 증가 코드가 있으면 실행되지 않아 무한루프에 빠질 수 있다.
# 잘못된 예 - 무한루프!
num = 0
while num < 10:
if num % 2 == 0:
continue # num += 1에 도달하지 못함!
print(num)
num += 1 # continue가 이 줄을 건너뛴다
# 올바른 예
num = 0
while num < 10:
num += 1 # continue 전에 증가!
if num % 2 == 0:
continue
print(num, end=" ")
while-else
for문과 마찬가지로, while문에도 else를 붙일 수 있다. break 없이 정상 종료되면 else 블록이 실행된다.
attempts = 0
password = ""
while attempts < 3:
password = input("비밀번호: ")
if password == "python123":
print("로그인 성공!")
break
attempts += 1
print(f"틀렸습니다. ({attempts}/3)")
else:
print("3회 실패! 계정이 잠겼습니다.")
- 비밀번호를 맞추면
break로 빠져나가므로 else는 실행되지 않는다 - 3번 다 틀리면
while조건이 False가 되어 else가 실행된다
실전 예시: 숫자 야구 (간단 버전)
import random
answer = random.randint(1, 100)
attempts = 0
print("=" * 35)
print(" 숫자 맞추기 게임 (1~100)")
print("=" * 35)
while True:
guess = int(input("\n숫자를 입력하세요: "))
attempts += 1
if guess == answer:
print(f"\n🎉 정답! {attempts}번 만에 맞추셨습니다!")
break
elif guess < answer:
print("⬆️ 더 큰 수입니다")
else:
print("⬇️ 더 작은 수입니다")
# 시도 횟수에 따른 평가
if attempts <= 3:
print("천재!")
elif attempts <= 7:
print("잘했어요!")
else:
print("다음엔 더 잘할 수 있을 거예요!")
실행 예:
===================================
숫자 맞추기 게임 (1~100)
===================================
숫자를 입력하세요: 50
⬆️ 더 큰 수입니다
숫자를 입력하세요: 75
⬇️ 더 작은 수입니다
숫자를 입력하세요: 62
⬆️ 더 큰 수입니다
숫자를 입력하세요: 68
🎉 정답! 4번 만에 맞추셨습니다!
잘했어요!
💡
random.randint(1, 100)은 1부터 100 사이의 랜덤 정수를 만든다.random모듈은 11편에서 더 자세히 다룬다.
직접 해보기
문제 1. 사용자가 "exit"를 입력할 때까지 입력한 문자를 메아리(echo)처럼 출력하는 프로그램을 만들어보자.
> 안녕하세요
→ 안녕하세요
> 파이썬 재밌다
→ 파이썬 재밌다
> exit
프로그램을 종료합니다.
문제 2. 1부터 시작해서 숫자를 더해갈 때, 합이 처음으로 1000을 넘는 순간의 숫자를 구해보자.
1 + 2 + 3 + ... + ? > 1000
결과: ?번째 숫자에서 처음으로 1000을 넘음 (합: ???)
문제 3. 비밀번호 검증 프로그램을 만들어보자.
조건: 비밀번호는 "python"
3번까지 시도 가능
맞추면 "환영합니다", 3번 다 틀리면 "접근 차단"
문제 4. 사용자에게 숫자를 계속 입력받아 평균을 구하는 프로그램을 만들어보자.
숫자 입력 (0 입력시 종료): 85
숫자 입력 (0 입력시 종료): 90
숫자 입력 (0 입력시 종료): 78
숫자 입력 (0 입력시 종료): 0
입력한 3개의 평균: 84.3
정답 보기
# 문제 1
while True:
text = input("> ")
if text == "exit":
print("프로그램을 종료합니다.")
break
print(f"→ {text}")
# 문제 2
total = 0
num = 0
while total <= 1000:
num += 1
total += num
print(f"{num}번째 숫자에서 처음으로 1000을 넘음 (합: {total})")
# 결과: 45번째 숫자에서 처음으로 1000을 넘음 (합: 1035)
# 문제 3
attempts = 0
while attempts < 3:
pw = input("비밀번호: ")
if pw == "python":
print("환영합니다!")
break
attempts += 1
print(f"틀렸습니다. (남은 기회: {3 - attempts}회)")
else:
print("접근 차단!")
# 문제 4
total = 0
count = 0
while True:
num = int(input("숫자 입력 (0 입력시 종료): "))
if num == 0:
break
total += num
count += 1
if count > 0:
print(f"입력한 {count}개의 평균: {total / count:.1f}")
else:
print("입력한 숫자가 없습니다.")
오늘의 정리
| 항목 | 내용 |
|---|---|
| while문 | while 조건: - 조건이 True인 동안 반복 |
| 무한루프 | while True: + break로 탈출하는 패턴 |
| for문 vs while문 | 횟수가 정해져 있으면 for, 조건 기반이면 while |
| continue 주의 | while에서 카운터 증가는 continue 앞에 위치해야! |
| while-else | break 없이 정상 종료 시 else 실행 |
다음 편 예고: 중첩 반복문 - 별 찍기로 연습하기
반복문 안에 반복문을 넣으면 어떤 일이 일어날까? 다양한 별(★) 패턴을 찍으면서 이중 for문을 완벽하게 익혀보자.
태그: 파이썬 Python 파이썬독학 반복문 while문 break continue 무한루프 파이썬기초 IT교육
'Python' 카테고리의 다른 글
| 11. 실습: 숫자 맞추기 게임 만들기 (0) | 2026.02.21 |
|---|---|
| 10. 중첩 반복문 - 별 찍기로 연습하기 (0) | 2026.02.21 |
| 08. 반복문 (1) - for문 (0) | 2026.02.21 |
| 07. 조건문 - if, elif, else (0) | 2026.02.21 |
| 06. 주석과 코딩 스타일 - 읽기 좋은 코드 만들기 (2) | 2026.02.21 |
댓글