
08. 반복문 (1) - for문
"Hello"를 100번 출력하고 싶다면?
print("Hello")를 100줄 쓸 수도 있지만, 반복문을 쓰면 단 두 줄이면 된다. 프로그래밍의 진짜 힘은 바로 이 반복에서 나온다.
반복문이 필요한 이유
# 이렇게 하면 안 된다...
print("Hello")
print("Hello")
print("Hello")
print("Hello")
print("Hello")
# ... 100번?!
# 반복문으로 한방에!
for i in range(100):
print("Hello")
두 줄이면 끝이다. 100번이든 10000번이든 숫자만 바꾸면 된다. 이게 반복문의 힘이다.

for문 기본 구조
for 변수 in 반복할_대상:
실행할 코드
"반복할 대상에서 하나씩 꺼내서, 변수에 넣고, 코드를 실행한다"를 반복한다.
# 리스트의 각 항목을 하나씩 꺼내기
fruits = ["사과", "바나나", "포도"]
for fruit in fruits:
print(fruit)
출력:
사과
바나나
포도
# 문자열도 한 글자씩 반복 가능
for char in "파이썬":
print(char)
출력:
파
이
썬
range() - 숫자 범위 만들기
range()는 숫자 목록을 만들어주는 함수다. for문과 가장 자주 짝을 이루어 쓴다.

range(끝)
0부터 끝-1까지.
for i in range(5):
print(i, end=" ")
# 0 1 2 3 4
⚠️ 주의:
range(5)는 0, 1, 2, 3, 4다. 5는 포함하지 않는다! 슬라이싱과 같은 규칙이다.
range(시작, 끝)
시작부터 끝-1까지.
for i in range(1, 6):
print(i, end=" ")
# 1 2 3 4 5
range(시작, 끝, 간격)
간격만큼 건너뛰며.
# 2씩 건너뛰기
for i in range(0, 10, 2):
print(i, end=" ")
# 0 2 4 6 8
# 거꾸로 (카운트다운)
for i in range(5, 0, -1):
print(i, end=" ")
# 5 4 3 2 1
range() 정리
| 사용법 | 결과 | 설명 |
|---|---|---|
| range(5) | 0, 1, 2, 3, 4 | 0부터 4까지 |
| range(1, 6) | 1, 2, 3, 4, 5 | 1부터 5까지 |
| range(0, 10, 2) | 0, 2, 4, 6, 8 | 0부터 8까지, 2씩 |
| range(5, 0, -1) | 5, 4, 3, 2, 1 | 5부터 1까지, 역순 |
enumerate() - 인덱스와 값을 함께
반복하면서 몇 번째인지 알고 싶을 때 사용한다.
fruits = ["사과", "바나나", "포도", "수박"]
# 일반 for문 - 순번을 모른다
for fruit in fruits:
print(fruit)
# enumerate - 순번을 알 수 있다!
for index, fruit in enumerate(fruits):
print(f"{index}번: {fruit}")
출력:
0번: 사과
1번: 바나나
2번: 포도
3번: 수박
1번부터 세고 싶다면:
for index, fruit in enumerate(fruits, start=1):
print(f"{index}번: {fruit}")
출력:
1번: 사과
2번: 바나나
3번: 포도
4번: 수박
💡 팁:
enumerate()는 실전에서 정말 많이 쓴다. "몇 번째인지 알면서 반복"이 필요할 때는enumerate()를 떠올리자.
for문 활용 패턴
패턴 1: 합계 구하기
numbers = [85, 90, 78, 92, 88]
total = 0
for num in numbers:
total += num
average = total / len(numbers)
print(f"합계: {total}") # 합계: 433
print(f"평균: {average}") # 평균: 86.6
패턴 2: 최대값 찾기
scores = [72, 95, 88, 63, 91]
max_score = scores[0]
for score in scores:
if score > max_score:
max_score = score
print(f"최고 점수: {max_score}") # 최고 점수: 95
패턴 3: 조건에 맞는 항목 모으기
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = []
for num in numbers:
if num % 2 == 0:
evens.append(num)
print(f"짝수: {evens}") # 짝수: [2, 4, 6, 8, 10]
패턴 4: 문자열 처리
# 단어의 각 글자를 하나씩 검사
password = "Hello123"
has_digit = False
has_alpha = False
for char in password:
if char.isdigit():
has_digit = True
if char.isalpha():
has_alpha = True
if has_digit and has_alpha:
print("안전한 비밀번호입니다")
else:
print("문자와 숫자를 모두 포함해야 합니다")
break와 continue
break - 반복 중단
조건을 만족하면 반복을 즉시 중단한다.
# 원하는 값을 찾으면 바로 멈추기
numbers = [3, 7, 2, 9, 5, 1, 8]
for num in numbers:
if num == 9:
print("9를 찾았다!")
break
print(f"{num} 검사 중...")
출력:
3 검사 중...
7 검사 중...
2 검사 중...
9를 찾았다!
continue - 이번만 건너뛰기
이번 회차만 건너뛰고 다음 반복으로 넘어간다.
# 짝수만 건너뛰기
for i in range(1, 11):
if i % 2 == 0:
continue
print(i, end=" ")
# 1 3 5 7 9
| 키워드 | 동작 | 비유 |
|---|---|---|
| break | 반복 전체를 즉시 종료 | 달리기 중 "그만!" → 멈춤 |
| continue | 이번 회차만 건너뛰고 계속 | 달리기 중 돌멩이 → 피하고 계속 달림 |
for-else
잘 안 알려진 기능이지만, 가끔 유용하다. break 없이 반복이 정상 종료되면 else 블록이 실행된다.
# 소수 판별
num = 7
for i in range(2, num):
if num % i == 0:
print(f"{num}은 소수가 아닙니다 ({i}로 나눠짐)")
break
else:
print(f"{num}은 소수입니다!")
# 출력: 7은 소수입니다!
실전 예시: 성적 처리 프로그램
students = ["김철수", "이영희", "박민수", "최지원", "정다은"]
scores = [85, 92, 78, 95, 88]
print("=" * 35)
print(" 성적표")
print("=" * 35)
total = 0
max_score = 0
top_student = ""
for i, (name, score) in enumerate(zip(students, scores), start=1):
# 학점 계산
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "D"
print(f"{i}. {name}: {score}점 ({grade})")
total += score
if score > max_score:
max_score = score
top_student = name
print("-" * 35)
print(f"평균: {total / len(scores):.1f}점")
print(f"최고: {top_student} ({max_score}점)")
출력:
===================================
성적표
===================================
1. 김철수: 85점 (B)
2. 이영희: 92점 (A)
3. 박민수: 78점 (C)
4. 최지원: 95점 (A)
5. 정다은: 88점 (B)
-----------------------------------
평균: 87.6점
최고: 최지원 (95점)
💡
zip()은 두 개의 리스트를 동시에 묶어서 반복할 수 있게 해준다. 리스트는 12편에서, zip은 나중에 더 자세히 배운다.
직접 해보기
문제 1. 1부터 100까지의 합을 구해보자.
1 + 2 + 3 + ... + 100 = ?
문제 2. 구구단 5단을 출력해보자.
5 x 1 = 5
5 x 2 = 10
...
5 x 9 = 45
문제 3. 리스트에서 가장 긴 문자열을 찾아보자.
words = ["apple", "banana", "kiwi", "watermelon", "grape"]
# 결과: 가장 긴 단어는 watermelon (10글자)
문제 4. 1부터 20까지의 숫자 중 3의 배수만 출력해보자.
결과: 3 6 9 12 15 18
정답 보기
# 문제 1
total = 0
for i in range(1, 101):
total += i
print(f"1~100의 합: {total}") # 5050
# 문제 2
dan = 5
for i in range(1, 10):
print(f"{dan} x {i} = {dan * i}")
# 문제 3
words = ["apple", "banana", "kiwi", "watermelon", "grape"]
longest = words[0]
for word in words:
if len(word) > len(longest):
longest = word
print(f"가장 긴 단어는 {longest} ({len(longest)}글자)")
# 문제 4
for i in range(1, 21):
if i % 3 == 0:
print(i, end=" ")
# 또는 간단하게
# for i in range(3, 21, 3):
# print(i, end=" ")
오늘의 정리
| 항목 | 내용 |
|---|---|
| for문 | for 변수 in 대상: - 하나씩 꺼내서 반복 |
| range() | 숫자 범위 생성. range(끝), range(시작, 끝), range(시작, 끝, 간격) |
| enumerate() | 인덱스와 값을 함께 반복 |
| break | 반복 즉시 종료 |
| continue | 이번 회차 건너뛰고 다음으로 |
다음 편 예고: 반복문 (2) - while문
for문이 "정해진 횟수만큼" 반복한다면, while문은 "조건이 참인 동안" 반복한다. 두 반복문의 차이와 각각 언제 쓰는지 알아보자.
태그: 파이썬 Python 파이썬독학 반복문 for문 range enumerate 파이썬반복 파이썬기초 IT교육
'Python' 카테고리의 다른 글
| 10. 중첩 반복문 - 별 찍기로 연습하기 (0) | 2026.02.21 |
|---|---|
| 09. 반복문 (2) - while문과 반복 제어 (0) | 2026.02.21 |
| 07. 조건문 - if, elif, else (0) | 2026.02.21 |
| 06. 주석과 코딩 스타일 - 읽기 좋은 코드 만들기 (2) | 2026.02.21 |
| 05. 입력과 출력 - 사용자와 대화하기 (0) | 2026.02.21 |
댓글