
지금까지는 코드를 위에서 아래로 순차적으로 실행하거나, 조건에 따라 분기하는 방법을 배웠습니다. 하지만 실제 프로그래밍에서는 같은 코드를 여러 번 반복해야 하는 경우가 매우 많습니다. 이번 포스트에서는 파이썬의 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 i in range(10):
print('Hello')
단 2줄로 10번 반복! 횟수를 바꾸는 것도 매우 쉽습니다.
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번 반복되었습니다!
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)라고 합니다.
시작 → i=0 → 코드 실행 → i=1 → 코드 실행 → ... → i=4 → 코드 실행 → 종료
↑ ↓
└────────────────────────────────── 루프 ──────────────────────────────┘
i는 index의 첫 글자를 따서 사용하는 관습입니다. 이를 루프 인덱스(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}')
0부터 (stop-1)까지 반복합니다.
for i in range(5):
print(i, end=' ')
# 0 1 2 3 4
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
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(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() 함수는 시퀀스 객체를 뒤집어 줍니다.
fruits = ['apple', 'banana', 'cherry']
for fruit in reversed(fruits):
print(fruit)
실행 결과:
cherry
banana
apple
# 방법 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
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
# 1부터 100까지의 합
total = 0
for i in range(1, 101):
total += i
print(f'1부터 100까지의 합: {total}')
# 1부터 100까지의 합: 5050
numbers = [10, 20, 30, 40, 50]
total = 0
for num in numbers:
total += num
print(f'합계: {total}')
# 합계: 150
# 또는 내장 함수 sum() 사용
print(f'합계: {sum(numbers)}')
# 합계: 150
# 방법 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
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]
print('카운트다운 시작!')
for i in range(5, 0, -1):
print(i)
print('발사! 🚀')
실행 결과:
카운트다운 시작!
5
4
3
2
1
발사! 🚀
# 증가하는 별
for i in range(1, 6):
print('*' * i)
실행 결과:
*
**
***
****
*****
# 감소하는 별
for i in range(5, 0, -1):
print('*' * i)
실행 결과:
*****
****
***
**
*
scores = [85, 90, 78, 92, 88]
total = 0
for score in scores:
total += score
average = total / len(scores)
print(f'평균: {average}')
# 평균: 86.6
text = 'Hello, Python!'
count = 0
for char in text:
if char == 'o':
count += 1
print(f"'o'의 개수: {count}")
# 'o'의 개수: 2
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 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()는 인덱스와 값을 동시에 가져옵니다.
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
# 10번 반복
for i in range(10):
print('Hello')
# 리스트 순회
for item in items:
process(item)
# 사용자가 'quit' 입력할 때까지
while True:
command = input('명령: ')
if command == 'quit':
break