for 반복문 활용하기

Tasker_Jang·2026년 2월 8일
post-thumbnail

들어가며

지금까지는 코드를 위에서 아래로 순차적으로 실행하거나, 조건에 따라 분기하는 방법을 배웠습니다. 하지만 실제 프로그래밍에서는 같은 코드를 여러 번 반복해야 하는 경우가 매우 많습니다. 이번 포스트에서는 파이썬의 for 반복문을 사용하여 코드를 효율적으로 반복 실행하는 방법을 알아보겠습니다.

왜 반복문이 필요한가?

문제 상황

"Hello"를 10번 출력하려면?

print('Hello')
print('Hello')
print('Hello')
print('Hello')
print('Hello')
print('Hello')
print('Hello')
print('Hello')
print('Hello')
print('Hello')

100번이라면? 1000번이라면? 😱

해결: for 반복문

for i in range(10):
    print('Hello')

단 2줄로 10번 반복! 횟수를 바꾸는 것도 매우 쉽습니다.

for 반복문 기본 문법

for 변수 in range(횟수):
    반복할_코드

핵심 규칙:
1. for 키워드로 시작
2. 변수 이름 지정 (관습적으로 i 사용)
3. in range(횟수) 형식
4. 콜론(:) 필수
5. 다음 줄은 들여쓰기 4칸

기본 예제

for i in range(5):
    print('Hello')

실행 결과:

Hello
Hello
Hello
Hello
Hello

5번 반복되었습니다!

반복문의 동작 원리

변수 i의 변화

for i in range(5):
    print(f'i = {i}')

실행 결과:

i = 0
i = 1
i = 2
i = 3
i = 4

흐름:
1. i = 0으로 시작
2. print(f'i = {i}') 실행
3. i가 1 증가 → i = 1
4. print(f'i = {i}') 실행
5. 반복... i = 4까지
6. i = 5가 되면 종료 (range(5)는 0~4)

Loop (순환)

반복할 코드를 계속 순환하는 것을 루프(loop)라고 합니다.

시작 → i=0 → 코드 실행 → i=1 → 코드 실행 → ... → i=4 → 코드 실행 → 종료
  ↑                                                                        ↓
  └────────────────────────────────── 루프 ──────────────────────────────┘

반복문 변수: i (루프 인덱스)

왜 i를 사용하나?

iindex의 첫 글자를 따서 사용하는 관습입니다. 이를 루프 인덱스(loop index)라고 부릅니다.

# 관습적인 변수명
for i in range(5):
    print(i)

# 다른 이름도 가능하지만 비권장
for number in range(5):
    print(number)

for x in range(5):
    print(x)

권장: 간단한 반복문은 i, 중첩 반복문은 i, j, k 순서로 사용

# 중첩 반복문 예시
for i in range(3):
    for j in range(2):
        print(f'i={i}, j={j}')

range() 함수 활용

기본: 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(3, 8):
    print(i, end=' ')
# 3 4 5 6 7
# 1부터 10까지
for i in range(1, 11):
    print(i, end=' ')
# 1 2 3 4 5 6 7 8 9 10

range(start, stop, step)

start부터 (stop-1)까지 step씩 증가합니다.

# 0부터 10까지 2씩 증가 (짝수)
for i in range(0, 11, 2):
    print(i, end=' ')
# 0 2 4 6 8 10

# 1부터 10까지 2씩 증가 (홀수)
for i in range(1, 11, 2):
    print(i, end=' ')
# 1 3 5 7 9

# 0부터 100까지 10씩
for i in range(0, 101, 10):
    print(i, end=' ')
# 0 10 20 30 40 50 60 70 80 90 100

음수 증가폭: 감소

증가폭을 음수로 지정하면 숫자가 감소합니다.

# 10부터 1까지 감소
for i in range(10, 0, -1):
    print(i, end=' ')
# 10 9 8 7 6 5 4 3 2 1

# 5부터 0까지 감소
for i in range(5, -1, -1):
    print(i, end=' ')
# 5 4 3 2 1 0

# 10부터 0까지 2씩 감소
for i in range(10, -1, -2):
    print(i, end=' ')
# 10 8 6 4 2 0

주의: 감소할 때는 start > stop이어야 합니다.

# 잘못된 예 (아무것도 실행 안 됨)
for i in range(0, 10, -1):
    print(i)
# (출력 없음)

range() 요약표

형식예시결과
range(stop)range(5)0, 1, 2, 3, 4
range(start, stop)range(3, 8)3, 4, 5, 6, 7
range(start, stop, step)range(0, 10, 2)0, 2, 4, 6, 8
range(start, stop, -step)range(10, 0, -1)10, 9, ..., 1

시퀀스 객체로 반복하기

range 대신 리스트, 튜플, 문자열 등의 시퀀스 객체를 넣으면 요소를 하나씩 꺼내면서 반복합니다.

리스트 순회

fruits = ['apple', 'banana', 'cherry']

for fruit in fruits:
    print(fruit)

실행 결과:

apple
banana
cherry

흐름:
1. fruit = 'apple' → 출력
2. fruit = 'banana' → 출력
3. fruit = 'cherry' → 출력
4. 종료

튜플 순회

numbers = (10, 20, 30, 40, 50)

for num in numbers:
    print(num)

실행 결과:

10
20
30
40
50

문자열 순회

문자열도 시퀀스이므로 한 글자씩 순회합니다.

text = 'Python'

for char in text:
    print(char)

실행 결과:

P
y
t
h
o
n

딕셔너리 순회

딕셔너리를 순회하면 가 반환됩니다.

scores = {'Alice': 85, 'Bob': 90, 'Charlie': 78}

for name in scores:
    print(name)

실행 결과:

Alice
Bob
Charlie

키-값 쌍 모두 가져오기:

scores = {'Alice': 85, 'Bob': 90, 'Charlie': 78}

# 방법 1: 키로 값 접근
for name in scores:
    print(f'{name}: {scores[name]}점')

# 방법 2: items() 사용
for name, score in scores.items():
    print(f'{name}: {score}점')

실행 결과:

Alice: 85점
Bob: 90점
Charlie: 78점

reversed(): 시퀀스 뒤집기

reversed() 함수는 시퀀스 객체를 뒤집어 줍니다.

리스트 역순 순회

fruits = ['apple', 'banana', 'cherry']

for fruit in reversed(fruits):
    print(fruit)

실행 결과:

cherry
banana
apple

range 역순

# 방법 1: reversed() 사용
for i in reversed(range(5)):
    print(i, end=' ')
# 4 3 2 1 0

# 방법 2: range()의 음수 step 사용 (더 일반적)
for i in range(4, -1, -1):
    print(i, end=' ')
# 4 3 2 1 0

문자열 역순

text = 'Python'

for char in reversed(text):
    print(char, end='')
# nohtyP

실전 예제

1. 구구단

dan = int(input('단을 입력하세요: '))

for i in range(1, 10):
    print(f'{dan} x {i} = {dan * i}')

실행 결과 (입력: 7):

단을 입력하세요: 7
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63

2. 합계 계산

# 1부터 100까지의 합
total = 0

for i in range(1, 101):
    total += i

print(f'1부터 100까지의 합: {total}')
# 1부터 100까지의 합: 5050

3. 리스트 요소 합계

numbers = [10, 20, 30, 40, 50]
total = 0

for num in numbers:
    total += num

print(f'합계: {total}')
# 합계: 150

# 또는 내장 함수 sum() 사용
print(f'합계: {sum(numbers)}')
# 합계: 150

4. 짝수만 출력

# 방법 1: range의 step 사용
for i in range(0, 11, 2):
    print(i, end=' ')
# 0 2 4 6 8 10

# 방법 2: if 조건문 사용
for i in range(11):
    if i % 2 == 0:
        print(i, end=' ')
# 0 2 4 6 8 10

5. 리스트 요소에 2 곱하기

numbers = [1, 2, 3, 4, 5]
doubled = []

for num in numbers:
    doubled.append(num * 2)

print(doubled)
# [2, 4, 6, 8, 10]

# 또는 리스트 컴프리헨션 (더 간결)
doubled = [num * 2 for num in numbers]
print(doubled)
# [2, 4, 6, 8, 10]

6. 카운트다운

print('카운트다운 시작!')

for i in range(5, 0, -1):
    print(i)

print('발사! 🚀')

실행 결과:

카운트다운 시작!
5
4
3
2
1
발사! 🚀

7. 별 찍기 (피라미드)

# 증가하는 별
for i in range(1, 6):
    print('*' * i)

실행 결과:

*
**
***
****
*****
# 감소하는 별
for i in range(5, 0, -1):
    print('*' * i)

실행 결과:

*****
****
***
**
*

8. 점수 평균 계산

scores = [85, 90, 78, 92, 88]
total = 0

for score in scores:
    total += score

average = total / len(scores)
print(f'평균: {average}')
# 평균: 86.6

9. 특정 문자 개수 세기

text = 'Hello, Python!'
count = 0

for char in text:
    if char == 'o':
        count += 1

print(f"'o'의 개수: {count}")
# 'o'의 개수: 2

10. 리스트에서 최댓값 찾기

numbers = [34, 78, 12, 90, 45]
max_num = numbers[0]  # 첫 번째 값으로 초기화

for num in numbers:
    if num > max_num:
        max_num = num

print(f'최댓값: {max_num}')
# 최댓값: 90

# 또는 내장 함수 max() 사용
print(f'최댓값: {max(numbers)}')
# 최댓값: 90

중첩 for 반복문

for 안에 또 다른 for를 넣을 수 있습니다.

기본 중첩

for i in range(3):
    for j in range(2):
        print(f'i={i}, j={j}')

실행 결과:

i=0, j=0
i=0, j=1
i=1, j=0
i=1, j=1
i=2, j=0
i=2, j=1

구구단 전체 출력

for dan in range(2, 10):
    print(f'[{dan}단]')
    for i in range(1, 10):
        print(f'{dan} x {i} = {dan * i}')
    print()  # 빈 줄

격자 무늬 출력

for i in range(5):
    for j in range(5):
        print('*', end=' ')
    print()  # 줄바꿈

실행 결과:

* * * * * 
* * * * * 
* * * * * 
* * * * * 
* * * * * 

enumerate(): 인덱스와 값 함께 가져오기

enumerate()는 인덱스와 값을 동시에 가져옵니다.

fruits = ['apple', 'banana', 'cherry']

for index, fruit in enumerate(fruits):
    print(f'{index}: {fruit}')

실행 결과:

0: apple
1: banana
2: cherry

시작 인덱스를 다음으로 매겨서 출력:

fruits = ['apple', 'banana', 'cherry']

for index, fruit in enumerate(fruits, start=1):
    print(f'{index}. {fruit}')

실행 결과:

1. apple
2. banana
3. cherry

for 반복문 vs while 반복문

for 반복문

  • 반복 횟수가 정해져 있을 때 사용
  • 시퀀스를 순회할 때 적합
# 10번 반복
for i in range(10):
    print('Hello')

# 리스트 순회
for item in items:
    process(item)

while 반복문 (다음 포스트에서)

  • 조건이 참인 동안 반복
  • 반복 횟수가 불명확할 때 사용
# 사용자가 'quit' 입력할 때까지
while True:
    command = input('명령: ')
    if command == 'quit':
        break
profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글