[파이썬 개념 6] 반복문

2026-11-09 21:37 ·수정 2026-11-10 11:44

같은 일을 여러 번 하는 것은 컴퓨터가 가장 잘하는 일입니다. 반복은 반복문으로 표현합니다.
파이썬에는 for 와 while 두 가지 반복문이 있고, 반복문으로 하는 일에는 몇 가지 정해진 패턴이 있습니다.

1. for 와 range

for i in range(5):
    print("반복", i)

실행 결과

반복 0
반복 1
반복 2
반복 3
반복 4

range(5) 는 0, 1, 2, 3, 4 를 차례로 만들고, for 는 그 수를 하나씩 i 에 넣으며 블록을 실행합니다.
조건문처럼 콜론과 들여쓰기를 지킵니다. i 는 다른 이름이어도 됩니다.

range 의 세 가지 모양

모양 만드는 수 개수
range(끝) 0 ~ 끝-1 끝
range(시작, 끝) 시작 ~ 끝-1 끝-시작
range(시작, 끝, 간격) 시작부터 간격씩
print(list(range(5)))
print(list(range(1, 6)))
print(list(range(1, 10, 2)))
print(list(range(10, 0, -3)))

실행 결과

[0, 1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 3, 5, 7, 9]
[10, 7, 4, 1]

끝 수는 포함하지 않습니다. 1부터 n까지는 range(1, n + 1) 입니다.

리스트와 문자열도 반복할 수 있다

for 는 range 뿐 아니라 값이 여러 개 들어 있는 것이면 무엇이든 하나씩 꺼냅니다.

for name in ["푸름", "소담", "보람"]:
    print(name, "출석")
for ch in "abc":
    print(ch, end=" ")

실행 결과

푸름 출석
소담 출석
보람 출석
a b c 

2. 반복문의 실행 과정 추적하기

total = 0
for i in range(1, 5):
    total += i
    print(i, total)
print("결과", total)

실행 결과

1 1
2 3
3 6
4 10
결과 10
차례 i total += i 후 total
1 1 1
2 2 3
3 3 6
4 4 10

중간에 print 를 넣어 값이 어떻게 변하는지 보는 것은 반복문을 이해하는 가장 좋은 방법입니다. 다 확인한 뒤에 지우면 됩니다.

3. 반복 패턴 다섯 가지

반복문으로 하는 일은 대부분 다음 다섯 가지 중 하나이거나 그 조합입니다.

패턴 1: 합계

nums = [3, 8, 2, 7]
total = 0                # 밖에서 0으로 시작
for x in nums:
    total += x           # 안에서 더하기
print(total)             # 끝나고 출력

실행 결과

20

패턴 2: 개수 세기

nums = [3, 8, 2, 7, 10]
count = 0
for x in nums:
    if x % 2 == 0:       # 조건에 맞을 때만
        count += 1
print(count)

실행 결과

3

패턴 3: 곱 누적

n = 5
result = 1               # 곱하기는 1에서 시작
for i in range(1, n + 1):
    result *= i
print(result)

실행 결과

120

패턴 4: 최댓값, 최솟값

nums = [72, 95, 88, 60]
best = nums[0]           # 첫 값을 일단 최댓값으로
for x in nums:
    if x > best:
        best = x
print(best)

실행 결과

95

패턴 5: 찾으면 표시하기

nums = [3, 8, 2, 7]
found = False
for x in nums:
    if x == 2:
        found = True
print(found)

실행 결과

True

found 처럼 참과 거짓으로 상태를 기억하는 변수를 깃발 변수라고 부릅니다.

세 자리를 꼭 지키자

자리 하는 일 잘못 두면
반복문 밖, 위 처음 값 정하기 안에 두면 매번 처음으로 돌아감
반복문 안 쌓기, 세기, 비교하기
반복문 밖, 아래 결과 출력 안에 두면 중간 결과가 모두 출력됨
total = 0
for i in range(1, 4):
    total += i
    print(total)

실행 결과

1
3
6

print 가 안에 있어서 중간 결과까지 출력되었습니다. 들여쓰기 한 칸 차이로 결과가 달라집니다.

4. 반복문 안의 조건문

for i in range(1, 16):
    if i % 15 == 0:
        print("짝쿵", end=" ")
    elif i % 3 == 0:
        print("짝", end=" ")
    elif i % 5 == 0:
        print("쿵", end=" ")
    else:
        print(i, end=" ")

실행 결과

1 2 짝 4 쿵 짝 7 8 짝 쿵 11 짝 13 14 짝쿵 

5. while

조건이 참인 동안 반복합니다. 몇 번 반복할지 미리 알 수 없을 때 씁니다.

money = 0
month = 0
while money < 10000:
    money += 3000
    month += 1
    print(month, money)
print(month, "달 걸림")

실행 결과

1 3000
2 6000
3 9000
4 12000
4 달 걸림

동작 순서는 이렇습니다.

  1. 조건을 검사한다. 거짓이면 반복을 끝낸다.
  2. 참이면 블록을 실행한다.
  3. 다시 1로 돌아간다.

처음부터 조건이 거짓이면 한 번도 실행되지 않습니다.

무한 반복 주의

조건이 언젠가 거짓이 되도록 블록 안에서 값을 바꾸어야 합니다. 그렇지 않으면 끝나지 않습니다.
채점 사이트에서는 시간 초과로 나타납니다.

n = 10
while n > 0:
    print(n)
    # n -= 1 을 빠뜨리면 n 은 계속 10 → 끝나지 않는다

6. break 와 continue

  • break : 반복을 그 자리에서 끝낸다.
  • continue : 이번 차례의 나머지를 건너뛰고 다음 차례로 간다.
while True:
    x = int(input())
    if x == 0:
        break
    print(x * 2)
print("끝")

입력

3
5
0

실행 결과

6
10
끝

while True: 는 끝나지 않는 반복이지만 break 로 빠져나옵니다. "0이 나올 때까지", "정답을 맞힐 때까지" 같은 문제에서 씁니다.

for i in range(1, 11):
    if i % 3 == 0:
        continue
    print(i, end=" ")

실행 결과

1 2 4 5 7 8 10 

7. 중첩 반복문

반복문 안에 반복문을 넣으면 표나 도형을 만들 수 있습니다. 바깥이 한 번 돌 때 안쪽은 처음부터 끝까지 다 돕니다.

for i in range(1, 4):
    for j in range(1, 4):
        print(f"{i}x{j}={i * j}", end="  ")
    print()

실행 결과

1x1=1  1x2=2  1x3=3  
2x1=2  2x2=4  2x3=6  
3x1=3  3x2=6  3x3=9  
n = 4
for i in range(1, n + 1):
    print("*" * i)

실행 결과

*
**
***
****

8. for 와 while 고르기

상황 알맞은 반복문 예
반복 횟수를 안다 for 1부터 n까지, 학생 수만큼, 리스트의 모든 값
끝나는 조건만 안다 while 목표 금액이 될 때까지, 0이 나올 때까지

for 로 쓸 수 있는 것은 while 로도 쓸 수 있지만, 횟수를 알 때는 for 가 짧고 실수가 적습니다.

i = 1
while i <= 5:
    print(i, end=" ")
    i += 1

실행 결과

1 2 3 4 5 

정리

  • for i in range(시작, 끝, 간격): 끝은 포함하지 않는다.
  • 반복 패턴: 합계, 개수, 곱, 최댓값/최솟값, 깃발.
  • 처음 값은 밖 위에, 쌓기는 안에, 출력은 밖 아래에.
  • while 조건: 은 참인 동안 반복한다. 조건이 거짓이 되게 값을 바꾼다.
  • break 는 끝내기, continue 는 이번만 건너뛰기.

확인 문제

  1. range(2, 11, 3) 이 만드는 수를 모두 쓰세요.
  2. 다음 코드의 출력은?
    count = 0
    for i in range(10):
     if i % 4 == 0:
         count += 1
    print(count)
  3. 1부터 차례로 더해서 합이 처음으로 100을 넘는 순간의 수를 구하려고 합니다. for 와 while 중 무엇이 알맞나요?

연습해 보기

확인 문제 정답

  1. 2, 5, 8 (11은 포함하지 않음)
  2. 3 : 0, 4, 8 이 4로 나누어떨어집니다.
  3. while : 몇 번 더해야 할지 미리 알 수 없기 때문입니다.

댓글 0

로그인하면 댓글을 쓸 수 있습니다.