파이썬 반복문 — for·while
같은 일을 여러 번. 30명 성적 처리도 한 페이지가 안 됩니다.
5편에서 30명 성적의 평균을 한 줄로 구했습니다. 그건 내장 함수의 덕분이고, 만약 "각 학생의 점수에 보너스 5점을 더해 출력" 처럼 항목 하나하나에 작업을 하려면 직접 돌아야 합니다. 그게 반복문. 파이썬에는 둘 — for 와 while — 만 있고 입문자는 보통 for 만으로 한 달을 보냅니다.
8편을 마치면 ① for + range 로 횟수 반복 ② 리스트·딕셔너리 순회 ③ enumerate 로 인덱스 동시 받기 ④ while 과 break·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 — 이번 회만 건너뛰고 다음 회 시작. 음수는 더하지 않고 다음 입력으로.
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 로 코드를 재사용 가능한 단위로 묶기. 인자·반환·기본값·키워드 인자.
← 7편 "if 문" · 다음: 9편 "함수 만들기"