
지난 글에서 for문과 range()를 공부한 뒤, 반복문이 같은 코드를 복사하지 않게 해 주는 도구라는 점은 한결 선명해졌습니다. 그런데 예전에 파이썬을 배울 때 while문은 조금 다르게 느껴졌습니다. for문은 숫자가 차례대로 나와 끝이 보였지만, while문은 조건을 잘못 적으면 정말 끝없이 움직였기 때문입니다.
다시 살펴보니 while문에서 중요한 것은 많이 반복하는 기술이 아니라 언제 계속하고 언제 멈출지를 설계하는 일이었습니다. 이번 글에서는 반복 횟수를 미리 알기 어려운 상황에서 while문을 사용하는 이유와 종료 조건, break, continue가 실행 흐름을 어떻게 바꾸는지 차근차근 알아보겠습니다.
지난 글의 for문, range(), 누적 계산을 먼저 읽으면 두 반복문의 차이를 더 쉽게 연결할 수 있습니다.
for문이 있는데 while문은 왜 필요할까?
for문은 반복할 값이나 횟수가 미리 보일 때 자연스럽습니다.
for number in range(1, 4):
print(number)
1, 2, 3이라는 값이 준비되어 있으므로 파이썬은 값을 하나씩 꺼내고, 더 꺼낼 값이 없으면 반복을 끝냅니다.
하지만 다음 상황은 반복 횟수를 미리 정하기 어렵습니다.
- 사용자가
"끝"을 입력할 때까지 질문하기 - 올바른 확인 코드를 입력하거나 최대 시도 횟수에 도달할 때까지 입력받기
- 게임 캐릭터의 체력이 0보다 큰 동안 계속 진행하기
- 목표 금액을 모을 때까지 저축하기
이때 중요한 것은 “몇 번 반복할까?”가 아니라 “어떤 조건인 동안 계속할까?”입니다. while문은 바로 이 질문을 코드로 표현합니다.
횟수나 값의 모음이 보이면
for, 계속할 조건이 중심이면while을 먼저 떠올릴 수 있습니다.
while문은 조건이 참인 동안 반복한다
가장 기본적인 모양부터 살펴보겠습니다.
count = 1
while count <= 3:
print(count)
count += 1
print("반복 종료")
실행 결과입니다.
1
2
3
반복 종료
while count <= 3:은 “count가 3 이하인 동안 아래 문장을 반복하라”는 뜻입니다.
문법을 부분별로 읽어 보기
while count <= 3:
print(count)
count += 1
while: 조건을 확인하며 반복을 시작하는 키워드입니다.count <= 3: 반복을 계속할지 결정하는 조건식입니다.:: 반복할 코드 블록이 시작됨을 나타냅니다.- 들여쓴 문장: 조건이 참일 때 실행할 반복 본문입니다.
if문도 조건을 검사하지만 참인 코드를 한 번 선택합니다. while문은 본문이 끝나면 조건으로 돌아가 다시 검사한다는 점이 다릅니다.
while문의 실행 흐름을 한 바퀴씩 따라가기
while문은 다음 네 단계를 반복합니다.
- 조건을 검사합니다.
- 조건이 참이면 들여쓴 본문을 실행합니다.
- 본문에서 반복에 사용하는 상태를 바꿉니다.
- 다시 조건으로 돌아갑니다.
앞의 예제를 표처럼 펼치면 다음과 같습니다.
count = 1 → 1 <= 3은 참 → 1 출력 → count는 2
count = 2 → 2 <= 3은 참 → 2 출력 → count는 3
count = 3 → 3 <= 3은 참 → 3 출력 → count는 4
count = 4 → 4 <= 3은 거짓 → 반복 종료
count += 1은 숫자를 보기 좋게 증가시키는 장식이 아닙니다. 조건이 언젠가 거짓이 되도록 만드는 종료를 향한 변화입니다.
조건이 처음부터 거짓이면 어떻게 될까?
count = 5
while count <= 3:
print(count)
print("끝")
5 <= 3은 첫 검사부터 거짓입니다. 따라서 반복 본문은 한 번도 실행되지 않고 바로 "끝"을 출력합니다.
while문은 본문을 먼저 실행한 뒤 조건을 보는 구조가 아닙니다. 입구에 있는 안내원이 조건을 먼저 확인하고, 통과할 수 있을 때만 안으로 들여보낸다고 생각하면 쉽습니다.
종료 조건은 세 가지 질문으로 설계한다
while문을 작성하기 전에는 다음 질문을 먼저 적어 보는 것이 좋습니다.
- 반복에 사용할 값의 초깃값은 무엇인가?
- 어떤 조건인 동안 계속할 것인가?
- 반복할 때마다 무엇이 바뀌어 조건이 거짓에 가까워지는가?
5부터 1까지 세는 카운트다운에 적용해 보겠습니다.
count = 5
while count >= 1:
print(count)
count -= 1
print("출발!")
5
4
3
2
1
출발!
초깃값은 5이고, 1 이상인 동안 계속하며, 매번 1씩 감소합니다. 세 가지가 서로 맞물리므로 결국 count가 0이 되어 반복이 끝납니다.
무한 반복은 왜 생길까?
조건이 계속 참인 채로 유지되면 while문은 끝나지 않습니다.
count = 1
while count <= 3:
print(count)
이 코드에서 count는 계속 1입니다. 1 <= 3은 언제나 참이므로 같은 값이 계속 출력됩니다.
처음 while문을 공부할 때 저도 조건식만 유심히 보고 증가문을 빠뜨린 적이 있습니다. 화면에 같은 숫자가 계속 나오는 것을 보고서야 종료 조건은 첫 줄에만 있는 것이 아니라, 본문에서 값을 바꾸는 문장과 한 묶음이라는 점을 이해하게 되었습니다.
종료 조건을 점검하는 방법
무한 반복이 의심되면 다음 순서로 확인해 보세요.
- 조건에 사용한 변수가 본문에서 실제로 바뀌는가?
- 증가하는 변수에 감소할 때 맞는 조건을 사용하지 않았는가?
<와<=중 원하는 경계를 사용했는가?- 상태를 바꾸는 문장까지 실행 흐름이 도달하는가?
코드를 실행하기 전에 “이 조건은 언제 거짓이 될까?”라고 한 문장으로 답할 수 있으면 실수를 크게 줄일 수 있습니다.
break는 반복문을 즉시 끝낸다
어떤 반복은 조건식만으로 종료 시점을 표현하는 것보다, 본문에서 특정 사건을 만났을 때 바로 끝내는 편이 자연스럽습니다. break는 자신을 감싸는 가장 가까운 반복문 하나를 즉시 종료합니다.
while True:
command = input("명령을 입력하세요(종료: 끝): ")
if command == "끝":
break
print("입력한 명령:", command)
print("프로그램을 종료합니다.")
while True의 조건은 항상 참입니다. 그러나 사용자가 "끝"을 입력하면 break가 실행되어 반복문 밖의 마지막 출력문으로 이동합니다.
while True 자체가 잘못된 코드는 아닙니다. 반복 횟수를 알 수 없지만 종료 사건은 분명할 때 유용합니다. 다만 도달 가능한 break가 없다면 프로그램이 정상적으로 끝날 길도 없다는 점을 반드시 확인해야 합니다.
continue는 이번 차례의 나머지만 건너뛴다
continue는 반복문을 끝내지 않습니다. 이번 차례에 남은 문장을 건너뛰고 다음 조건 검사로 이동합니다.
number = 0
while number < 5:
number += 1
if number == 3:
continue
print(number)
1
2
4
5
number가 3일 때 continue 아래의 print(number)만 실행하지 않습니다. 그 뒤 반복문을 끝내는 것이 아니라 다시 number < 5를 확인합니다.
continue는 상태 변경의 위치가 중요하다
다음 코드는 실행하지 말고 흐름만 살펴보겠습니다.
number = 0
while number < 5:
if number == 2:
continue
number += 1
print(number)
number가 2가 되면 continue가 증가문까지 건너뜁니다. 다음 차례에도 number는 2이므로 다시 continue를 만나고, 이 과정이 끝없이 반복됩니다.
while문에서 continue를 사용할 때는 건너뛰기 전에 종료 조건에 사용한 값이 변했는지 확인해야 합니다. 앞의 올바른 예제가 number += 1을 continue보다 먼저 실행한 이유입니다.
break와 continue를 함께 사용하는 입력 프로그램
이번에는 할 일을 입력받는 작은 프로그램을 만들어 보겠습니다.
while True:
task = input("할 일을 입력하세요(종료: 끝): ")
if task == "끝":
break
if task == "":
print("빈 내용은 등록하지 않습니다.")
continue
print("등록:", task)
print("입력을 마쳤습니다.")
실행 흐름은 다음과 같습니다.
"끝"을 입력하면break로 반복 자체를 종료합니다.- 아무 글자도 입력하지 않고 Enter만 누르면 안내문을 출력하고
continue로 이번 등록만 건너뜁니다. - 그 밖의 문자열은 정상적으로 등록했다고 출력합니다.
break는 반복 공간에서 바로 나가는 동작이고, continue는 이번 차례의 남은 문장을 건너뛴 뒤 조건을 다시 확인하는 동작이라고 구분하면 기억하기 쉽습니다.
지금의 비교는 입력한 글자가 정확히 같은지 확인합니다. 따라서 "끝" 앞뒤에 공백이 붙으면 다른 문자열로 판단합니다. 다음 문자열 편에서는 이런 입력을 다듬는 메서드도 함께 알아보겠습니다.
횟수 제한과 성공 조건을 함께 다루기
종료 조건과 break를 함께 사용하면 최대 시도 횟수가 있는 프로그램도 만들 수 있습니다.
correct_code = "1357"
attempts = 0
success = False
while attempts < 3:
code = input("네 자리 확인 코드를 입력하세요: ")
attempts += 1
if code == correct_code:
success = True
break
print("코드가 다릅니다.")
if success:
print("확인되었습니다.")
else:
print("시도 횟수를 모두 사용했습니다.")
이 반복문은 두 가지 방법으로 끝납니다.
- 올바른 코드를 입력하면
break로 즉시 끝납니다. - 세 번 틀리면
attempts < 3이 거짓이 되어 끝납니다.
success 변수는 반복문이 왜 끝났는지를 기억합니다. 같은 종료라도 성공해서 끝난 것과 횟수를 모두 사용해서 끝난 것은 이후 처리 방법이 다르기 때문입니다.
이 예제는 네 자리 형식 자체를 검사하는 것이 아니라 입력값이 "1357"과 같은지만 확인합니다. 입력 형식을 세밀하게 검증하고 오류를 처리하는 방법은 뒤에서 별도로 다룰 예정입니다.
for문과 while문 중 무엇을 선택할까?
두 반복문을 선택하는 기준을 간단히 비교해 보겠습니다.
- 1부터 10까지 출력하기: 값의 범위가 보이므로
for가 자연스럽습니다. - 출석 명단처럼 확인할 이름들이 미리 준비되어 있다면
for가 자연스럽습니다. - 사용자가
"끝"을 입력할 때까지 받기: 횟수를 모르므로while이 자연스럽습니다. - 목표 점수에 도달할 때까지 연습하기: 상태 조건이 중심이므로
while이 자연스럽습니다.
while문이 for문보다 더 강력해서 선택하는 것은 아닙니다. 문제를 읽었을 때 반복을 설명하는 중심이 값의 모음인지, 계속할 조건인지에 따라 더 읽기 쉬운 쪽을 고르는 것입니다.
자주 하는 실수
상태 변경을 빠뜨리는 경우
조건에 쓰인 값이 변하지 않으면 조건도 계속 같은 결과를 냅니다. 초깃값, 조건, 상태 변경을 한 묶음으로 확인합니다.
break가 if문만 끝낸다고 생각하는 경우
break는 if문을 빠져나오는 문법이 아니라 가장 가까운 for 또는 while 반복문을 끝냅니다.
continue 아래에 꼭 필요한 코드를 두는 경우
continue 아래의 문장은 그 차례에서 실행되지 않습니다. 증가문이나 상태 변경이 건너뛰어지면 무한 반복으로 이어질 수 있습니다.
반복이 끝난 뒤 실행할 문장을 들여쓰는 경우
count = 1
while count <= 3:
print(count)
count += 1
print("모든 반복이 끝났습니다.")
마지막 출력문은 왼쪽으로 돌아와 있으므로 반복문이 모두 끝난 뒤 한 번만 실행됩니다.
직접 바꿔 보며 확인하기
다음 문제를 직접 작성해 보세요.
- 10부터 2씩 줄여 10, 8, 6, 4, 2를 출력합니다.
- 사용자가 0을 입력할 때까지 입력한 숫자를 그대로 출력합니다.
- 1부터 10까지 중 3의 배수만
continue로 건너뜁니다. - 확인 코드를 맞히거나 시도 횟수가 3회가 되면 반복을 끝냅니다.
- 상태 변경이 빠진 무한 반복 코드를 찾아 정상적으로 끝나게 고칩니다.
값을 바꿔 실행할 때는 조건에 사용한 변수도 함께 출력해 보세요. 어느 차례에서 조건이 참이고, 언제 거짓이 되는지 눈으로 확인하면 반복문의 흐름이 훨씬 또렷해집니다.
정리
while문은 조건을 먼저 검사하고, 참인 동안 들여쓴 본문을 반복합니다. 한 차례가 끝나면 조건을 다시 검사하므로 조건에 사용한 상태가 어떻게 바뀌는지가 종료 여부를 결정합니다.
break는 가장 가까운 반복문을 즉시 종료하고, continue는 이번 차례의 나머지만 건너뛴 뒤 다음 조건 검사로 이동합니다. 특히 continue가 상태 변경을 건너뛰지 않는지 주의해야 합니다.
반복문을 작성할 때는 초깃값, 계속할 조건, 종료를 향한 변화를 먼저 문장으로 설명해 보세요. 이 세 가지가 연결되면 while문은 끝을 알 수 없는 위험한 반복이 아니라, 종료 기준을 직접 설계할 수 있는 도구가 됩니다.
다음 글에서는 여러 글자를 하나의 값으로 다루는 문자열을 알아보겠습니다. 글자의 위치를 찾는 인덱싱과 원하는 부분을 잘라 내는 슬라이싱, 자주 사용하는 문자열 메서드와 f-string을 쉬운 예제로 이어서 살펴보겠습니다.
참고 자료
'파이썬(Python)' 카테고리의 다른 글
| [Python(파이썬)] 리스트와 튜플 차이? 추가·삭제·복사까지 쉽게 이해하기 (0) | 2026.08.13 |
|---|---|
| [Python(파이썬)] 문자열이란? 인덱싱·슬라이싱·메서드와 f-string 쉽게 이해하기 (0) | 2026.08.12 |
| [Python(파이썬)] for문이란? range()와 누적 계산 쉽게 이해하기 (0) | 2026.08.10 |
| [Python(파이썬)] 조건문이란? if·elif·else와 중첩 조건 쉽게 이해하기 (0) | 2026.08.09 |
| [Python(파이썬)] input()이란? 사용자 입력과 int·float 형 변환 쉽게 이해하기 (0) | 2026.08.08 |