본문 바로가기
Python

08. 반복문 (1) - for문

by 샤나엘 2026. 2. 21.
반응형

반복문 (1) - for문

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문 기본 구조

for 변수 in 반복할_대상:
    실행할 코드

"반복할 대상에서 하나씩 꺼내서, 변수에 넣고, 코드를 실행한다"를 반복한다.

# 리스트의 각 항목을 하나씩 꺼내기
fruits = ["사과", "바나나", "포도"]

for fruit in fruits:
    print(fruit)

출력:

사과
바나나
포도
# 문자열도 한 글자씩 반복 가능
for char in "파이썬":
    print(char)

출력:

파
이
썬

range() - 숫자 범위 만들기

range()숫자 목록을 만들어주는 함수다. for문과 가장 자주 짝을 이루어 쓴다.

range() 함수의 3가지 사용법

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교육

반응형

댓글