본문 바로가기
자기 개발/Python

파이썬(Python) 공부 5편 — 반복문 for/while 완전 정복 | range·break·continue·enumerate·zip까지

by conrad 2026. 3. 30.
05 / 15 Python 공부 시리즈 — 반복문(for/while)
← 4편: 조건문 if/elif/else 보러 가기
Python 공부 시리즈 · 5편 | for · while · range · break · continue

파이썬(Python) 공부 5편
반복문 for / while 완전 정복

반복문은 같은 코드를 여러 번 실행할 때 사용합니다. "리스트의 모든 요소를 출력해라", "조건이 만족되는 동안 계속 실행해라" 같은 작업이 반복문의 영역입니다. for문, while문, range(), break/continue, enumerate, zip까지 실무에서 바로 쓸 수 있도록 정리합니다.

for 반복문 while 반복문 range() break / continue enumerate / zip 중첩 반복문

🔄 for 반복문 — 시퀀스를 순서대로 순회

for문은 리스트·문자열·튜플·딕셔너리 같은 반복 가능한(iterable) 객체의 요소를 하나씩 꺼내 처리합니다. 처리할 횟수가 명확할 때 주로 사용합니다.

 
for_basic.py
# 리스트 순회
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
# apple / banana / cherry

# 문자열 순회 — 한 글자씩
for ch in "Python":
    print(ch, end=" ")    # P y t h o n
print()                     # 줄바꿈

# 딕셔너리 순회
scores = {"Alice": 90, "Bob": 85, "Carol": 92}
for name, score in scores.items():
    print(f"{name}: {score}점")
# Alice: 90점 / Bob: 85점 / Carol: 92점
파이썬 반복문 for while 코드 프로그래밍 ▲ 반복문은 같은 작업을 여러 번 자동화할 때 사용한다. for문은 횟수가 정해진 반복에, while문은 조건 기반 반복에 적합하다. (출처: Unsplash / 참고 이미지)

📊 range() — 숫자 범위 생성하기

range()는 숫자 범위를 생성하는 내장 함수로, for문과 함께 가장 자주 사용됩니다. range(start, stop, step) 형태이며, stop은 포함하지 않습니다.

range(5)
0 1 2 3 4
range(2, 7)
0 1 2 3 4 5 6
range(0, 10, 2)
0 1 2 3 4 5 6 7 8 9
range(5, 0, -1)
5 4 3 2 1

파란색 = 포함 / 회색 = 제외 | stop 인덱스는 항상 포함되지 않습니다

 
range_examples.py
# range(stop) — 0부터 stop-1까지
for i in range(5):
    print(i, end=" ")    # 0 1 2 3 4

# range(start, stop) — start부터 stop-1까지
for i in range(1, 6):
    print(i, end=" ")    # 1 2 3 4 5

# range(start, stop, step) — step 간격으로
for i in range(0, 11, 2):
    print(i, end=" ")    # 0 2 4 6 8 10

# step 음수 — 역순
for i in range(5, 0, -1):
    print(i, end=" ")    # 5 4 3 2 1

# 1부터 100까지 합계
total = 0
for i in range(1, 101):
    total += i           # total = total + i 와 동일
print(total)             # 5050

while 반복문 — 조건이 True인 동안 반복

while문조건이 True인 동안 계속 반복합니다. 반복 횟수가 정해지지 않거나, 특정 조건이 만족될 때까지 반복해야 할 때 사용합니다. 조건이 항상 True가 되지 않도록 반드시 탈출 조건을 만들어야 합니다.

 
while_basic.py
# 기본 while문
count = 1
while count <= 5:
    print(count, end=" ")
    count += 1          # 반드시 카운터 증가 → 탈출 조건
# 1 2 3 4 5

# 숫자 맞추기 게임 — 조건 기반 반복
answer = 7
guess  = 0
while guess != answer:
    guess += 1
    print(f"시도: {guess}")
print("정답!")

# while True + break 패턴 (무한루프 → 명시적 탈출)
n = 1
while True:
    print(n, end=" ")
    n += 1
    if n > 5:
        break             # 조건 만족 시 탈출
# 1 2 3 4 5
주의 — 무한루프 while문에서 탈출 조건을 빠뜨리면 무한루프 발생

while문 작성 시 반드시 반복이 끝나는 조건을 만들어야 합니다. 무한루프가 발생하면 프로그램이 멈추지 않습니다.

  • 터미널에서 무한루프 강제 종료: Ctrl + C
  • 카운터 변수를 증가·감소시키거나 break로 탈출 조건을 명시
# ❌ 무한루프 예시 — 절대 멈추지 않음!
# while True:
#     print("무한반복")  ← count += 없음

# ✅ 올바른 예시
count = 0
while True:
    count += 1
    if count >= 5: break

🆕 break / continue / else — 반복 흐름 제어

 
loop_control.py
# ① break — 반복문 즉시 종료
for i in range(10):
    if i == 5:
        break              # i가 5이면 반복 종료
    print(i, end=" ")
# 0 1 2 3 4

# ② continue — 현재 반복만 건너뛰고 다음으로
for i in range(10):
    if i % 2 == 0:
        continue           # 짝수는 건너뜀
    print(i, end=" ")
# 1 3 5 7 9

# ③ for-else — break 없이 정상 종료 시 else 실행
numbers = [2, 4, 6, 8]
for n in numbers:
    if n % 2 != 0:
        print("홀수 발견!")
        break
else:
    print("모두 짝수입니다")   # break 없이 끝났으므로 실행됨

# while-else도 동일하게 동작
n = 0
while n < 3:
    n += 1
else:
    print("while 정상 종료")    # 실행됨
💡
break vs continue 정리 break는 반복문을 탈출, continue는 이번 순서만 건너뜀
  • break: 반복문 전체를 즉시 종료하고 반복문 밖으로 나감 → 검색에서 원하는 값을 찾았을 때
  • continue: 현재 반복만 중단하고 다음 반복으로 넘어감 → 특정 조건의 요소를 건너뛸 때
  • for-else / while-else: break 없이 반복이 정상 완료됐을 때만 else 블록 실행 — 검색 실패 처리에 유용

📋 enumerate() — 인덱스와 값 동시에 얻기

enumerate()는 반복 시 인덱스(순서 번호)와 값을 동시에 꺼낼 수 있습니다. 리스트를 순회하면서 몇 번째 요소인지도 알아야 할 때 사용합니다.

 
enumerate_example.py
fruits = ["apple", "banana", "cherry"]

# ❌ 인덱스를 직접 쓰는 불편한 방법
for i in range(len(fruits)):
    print(i, fruits[i])

# ✅ enumerate() — 파이썬스러운 방법
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")
# 0: apple / 1: banana / 2: cherry

# start 파라미터 — 시작 번호 지정 (기본값 0)
for i, fruit in enumerate(fruits, start=1):
    print(f"{i}번: {fruit}")
# 1번: apple / 2번: banana / 3번: cherry

🔒 zip() — 여러 리스트를 병렬로 순회

zip()두 개 이상의 반복 가능한 객체를 묶어 동시에 순회합니다. 길이가 다를 경우 가장 짧은 것에 맞춰집니다.

 
zip_example.py
names  = ["Alice", "Bob", "Carol"]
scores = [90, 85, 92]
grades = ["A", "B", "A+"]

# 두 리스트 병렬 순회
for name, score in zip(names, scores):
    print(f"{name}: {score}점")
# Alice: 90점 / Bob: 85점 / Carol: 92점

# 세 리스트 동시 순회
for name, score, grade in zip(names, scores, grades):
    print(f"{name}: {score}점 ({grade})")

# zip으로 딕셔너리 만들기
result = dict(zip(names, scores))
print(result)
# {'Alice': 90, 'Bob': 85, 'Carol': 92}

🕐 중첩 반복문 — 반복문 안에 반복문

 
nested_loop.py
# 구구단 출력
for i in range(2, 10):        # 단 (2~9)
    for j in range(1, 10):    # 곱할 수 (1~9)
        print(f"{i} × {j} = {i * j}", end="  ")
    print()                    # 단 끝에 줄바꿈

# 2차원 리스트(행렬) 순회
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]
for row in matrix:
    for val in row:
        print(val, end=" ")
    print()
# 1 2 3
# 4 5 6
# 7 8 9

# 중첩 반복문에서 break — 안쪽 반복문만 탈출
for i in range(3):
    for j in range(3):
        if j == 2:
            break             # 안쪽 for만 탈출
        print(f"({i},{j})", end=" ")
    print()
중첩 반복문에서 바깥 루프까지 탈출하고 싶을 때

파이썬의 break는 가장 가까운 반복문 하나만 종료합니다. 바깥 루프까지 한 번에 탈출하려면 플래그(flag) 변수를 활용하거나, 함수로 감싸 return을 사용하는 방법이 있습니다.

# 플래그 변수로 바깥 루프 탈출
found = False
for i in range(5):
    for j in range(5):
        if i * j == 6:
            found = True
            break
    if found: break

📊 for vs while — 언제 무엇을 쓸까

🔄
선택 기준 for는 횟수가 정해졌을 때 / while은 조건 기반 반복에
  • for 사용: 리스트·문자열·딕셔너리 등 시퀀스를 순회할 때 / 정해진 횟수만큼 반복할 때 (range)
  • while 사용: 반복 횟수를 미리 알 수 없을 때 / 특정 조건이 만족될 때까지 반복해야 할 때 / 사용자 입력 처리 / 게임 루프
  • 일반 원칙: 횟수가 명확하면 for, 조건 기반이면 while — 파이썬에서는 for문이 더 많이 사용됨

리스트 컴프리헨션 맛보기 — for문을 한 줄로

리스트 컴프리헨션은 for문과 조건식을 한 줄로 표현해 새 리스트를 만드는 파이썬만의 강력한 문법입니다. 자세한 내용은 7편(리스트·튜플·딕셔너리)에서 다루고, 여기서는 맛보기로 소개합니다.

 
list_comprehension_preview.py
# 일반 for문으로 제곱 리스트 만들기
squares = []
for x in range(1, 6):
    squares.append(x ** 2)
print(squares)    # [1, 4, 9, 16, 25]

# 리스트 컴프리헨션으로 한 줄에
squares = [x ** 2 for x in range(1, 6)]
print(squares)    # [1, 4, 9, 16, 25]

# 조건 필터링도 가능
evens = [x for x in range(20) if x % 2 == 0]
print(evens)      # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

📝 5편 실습 문제

실습 1 — 별 피라미드 출력
  • 중첩 for문과 range()를 사용해 아래 모양을 출력하세요
  • *
    **
    ***
    ****
    *****
실습 2 — 소수(Prime Number) 찾기
  • 2부터 50까지 숫자 중 소수만 출력하기
  • 힌트: 소수는 1과 자기 자신으로만 나눠지는 수 / for-else 패턴 활용
 
practice_05.py — 예시 답안
# 실습 1 — 별 피라미드
for i in range(1, 6):
    print("*" * i)
# * / ** / *** / **** / *****

# 실습 2 — 소수 찾기 (for-else 활용)
for num in range(2, 51):
    for i in range(2, num):
        if num % i == 0:
            break               # 나눠지면 소수 아님
    else:
        print(num, end=" ")  # break 없이 끝나면 소수
# 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
5편 핵심 요약
  • for문: 반복 가능한 객체 순회 / 리스트·문자열·딕셔너리·range() 모두 사용 가능
  • range(): range(stop) / range(start, stop) / range(start, stop, step) / stop은 미포함
  • while문: 조건이 True인 동안 반복 / 반드시 탈출 조건 필요 / 무한루프 주의 (Ctrl+C로 종료)
  • break: 반복문 즉시 종료 / continue: 현재 반복만 건너뜀
  • for-else / while-else: break 없이 정상 종료 시 else 블록 실행
  • enumerate(): 인덱스+값 동시 순회 / enumerate(iterable, start=0)
  • zip(): 여러 리스트 병렬 순회 / 가장 짧은 길이 기준
  • 중첩 반복문: break는 가장 가까운 반복문만 종료 / 플래그로 바깥 루프 탈출
  • 리스트 컴프리헨션: [표현식 for 변수 in 반복객체 if 조건] (7편에서 심화)
다음 편 예고 6편 — 함수(Function) 정의와 활용 완전 정복

def / return / 매개변수 / 기본값 / *args / **kwargs / lambda / 재귀함수

🐍

※ 본 포스팅은 Python 3 공식 문서(docs.python.org)의 복합 문장(for/while) 레퍼런스를 기반으로 작성된 학습용 콘텐츠입니다. 코드 예시는 Python 3.10 이상 환경에서 테스트되었습니다.