파이썬 교재 · 8편 / 27편

파이썬 반복문 — for·while

같은 일을 여러 번. 30명 성적 처리도 한 페이지가 안 됩니다.

입문읽는 시간 7분2026-05-13
파이썬 for 와 enumerate, break 동작을 보여주는 코드 화면

5편에서 30명 성적의 평균을 한 줄로 구했습니다. 그건 내장 함수의 덕분이고, 만약 "각 학생의 점수에 보너스 5점을 더해 출력" 처럼 항목 하나하나에 작업을 하려면 직접 돌아야 합니다. 그게 반복문. 파이썬에는 둘 — forwhile — 만 있고 입문자는 보통 for 만으로 한 달을 보냅니다.

8편을 마치면 ① for + range 로 횟수 반복 ② 리스트·딕셔너리 순회 ③ enumerate 로 인덱스 동시 받기 ④ whilebreak·continue ⑤ 둘 중 무엇을 쓸지 판단 기준 — 다섯 가지가 손에 익습니다.

for + range — 가장 흔한 반복

"N번 반복하기" 가 필요하면 range 와 짝.

for i in range(5):
    print(i)
# 0 1 2 3 4  — 0부터 4까지 (5는 미포함!)

for i in range(1, 6):
    print(i)
# 1 2 3 4 5

for i in range(0, 10, 2):    # 시작·끝·간격
    print(i)
# 0 2 4 6 8

리스트 슬라이싱과 같은 규칙 — 끝은 미포함. range(5) 는 0,1,2,3,4 다섯 개. 1부터 시작하고 싶으면 range(1, 6).

📌 range 는 리스트가 아니다

range(1000000) 도 메모리 거의 안 먹습니다. 실제 100만 개 정수를 만드는 게 아니라 "필요할 때 하나씩 꺼내주는 발생기" 거든요. 입문 단계에선 "리스트처럼 동작하는데 메모리 효율이 좋다" 정도로 알아두면 됩니다. list(range(5)) 로 진짜 리스트화 가능.

리스트·딕셔너리 순회 — enumerate·items

5편 끝에서 예고한 패턴들. for 가 가장 빛나는 자리입니다.

names = ["준성", "수민", "지훈"]

# 1) 그냥 항목들
for name in names:
    print(name)
# 준성 / 수민 / 지훈

# 2) 인덱스가 필요하면 enumerate
for i, name in enumerate(names):
    print(f"{i}: {name}")
# 0: 준성 / 1: 수민 / 2: 지훈

# 3) 1부터 시작하고 싶으면 start 인자
for i, name in enumerate(names, start=1):
    print(f"{i}. {name}")
# 1. 준성 / 2. 수민 / 3. 지훈

인덱스가 필요할 때 for i in range(len(names)): names[i] 같이 쓰는 입문자가 많은데 비추. enumerate 가 짧고 읽힙니다. PEP 8(파이썬 코드 스타일) 도 이 형태를 권장.

# 딕셔너리 순회 (6편 복습)
user = {"name": "준성", "age": 30, "role": "dev"}

for k, v in user.items():
    print(f"{k}: {v}")

# 두 리스트를 한 번에 — zip
names  = ["준성", "수민"]
scores = [88, 92]
for n, s in zip(names, scores):
    print(f"{n}: {s}점")
# 준성: 88점 / 수민: 92점

zip 은 두 리스트를 짝지어 순회. 짧은 쪽에 맞춰 끝나요. 같은 길이 보장이 안 되면 itertools.zip_longest 를 19편에서.

while 과 break·continue

"조건이 거짓이 될 때까지" 반복할 땐 while. 횟수가 아니라 상태 변화가 종료 신호.

# 0이 입력될 때까지 합계 누적
total = 0
while True:
    n = int(input("숫자(0=종료): "))
    if n == 0:
        break               # while 빠져나감
    if n < 0:
        continue            # 음수는 건너뜀
    total += n
print(f"합계: {total}")

두 흐름 제어를 한 줄로:

  • break — 가장 가까운 반복문 탈출. 위 예에서 n == 0 이면 즉시 while 끝.
  • continue — 이번 회만 건너뛰고 다음 회 시작. 음수는 더하지 않고 다음 입력으로.
⚠️ while 의 가장 큰 함정 — 무한 루프. 종료 조건을 안 바꾸면 영원히 도는데, 이게 입문자 1번 사고. i = 0; while i < 10: print(i) 는 i 를 안 늘려서 멈추지 않습니다. Ctrl+C 로 강제 종료 가능. while 을 쓸 땐 항상 "이 조건은 언젠가 거짓이 되나?" 를 의식하세요.

for vs while — 어느 쪽을 쓸까

상황선택이유
리스트·딕셔너리 항목 모두 처리for순회 가능한 객체에 최적
N번 정확히 반복for + range횟수가 명확
"사용자가 종료 입력할 때까지"while횟수 불명, 조건만 있음
"API 응답이 OK 될 때까지 재시도"while외부 상태 의존
"각 파일에 같은 작업"for파일 목록을 순회

실무 코드의 약 85% 가 for 입니다. while 은 "끝이 정해지지 않은 작업" 에만. 입문자는 먼저 for 로 짤 수 있는지 시도하고, 안 되면 while 순서로 가는 게 안전.

한 줄 통계와 결합

scores = [82, 91, 75, 88, 60, 95]

# 합격(80+)만 골라 평균
passed = [s for s in scores if s >= 80]      # 10편 컴프리헨션 예고
avg = sum(passed) / len(passed)
print(f"합격자 {len(passed)}명, 평균 {avg:.1f}")
# 합격자 4명, 평균 89.0

위 두 줄이 일반 for 로는 6-7줄 됩니다. 10편 "리스트 컴프리헨션" 이 그래서 입문자의 첫 큰 도약입니다.

다음 미션 — REPL 에서: ① 1부터 100까지 짝수만 출력 ② 입력받은 단어를 한 글자씩 거꾸로 출력 (힌트: for 와 슬라이싱) ③ 1~50 중 3의 배수 합 구하기.

다음 편 미리보기

9편 — "파이썬 함수 만들기": def 로 코드를 재사용 가능한 단위로 묶기. 인자·반환·기본값·키워드 인자.

📚 27편 파이썬 교재 시리즈 — 8/27편
← 7편 "if 문" · 다음: 9편 "함수 만들기"

© 2026 주나이테크(주) @JUNAITECH