Skip to main content

컴퓨터는 계산도 잘하지만, 사실 더 무서운 재능이 하나 있습니다. 바로 같은 일을 지치지 않고 반복하는 능력입니다. 사람이 같은 문장을 100번 출력하라고 하면 금방 귀찮아지지만, 컴퓨터는 아무 표정 변화 없이 묵묵히 해냅니다.

이번 챕터에서는 그 능력을 끌어내는 핵심 도구인 반복문을 배웁니다. 반복문을 배우면 컴퓨터를 진짜로 "일하게" 만들 수 있습니다. 파일 이름을 줄줄 출력하게 할 수도 있고, 점수를 자동으로 계산하게 할 수도 있고, 사용자가 올바른 값을 입력할 때까지 계속 물어보게 할 수도 있습니다.

반복문에는 크게 두 가지가 있습니다. for문과 while문입니다. 둘 다 반복을 위해 쓰이지만, 잘 어울리는 상황이 조금 다릅니다. 이 차이를 이해하면 코드를 훨씬 자연스럽게 쓸 수 있습니다.

Bright abstract composition with colorful geometric shapes and speech bubbles.

이미지 출처: DS stories on Pexels

반복문이 왜 필요할까

예를 들어, 인사를 세 번 출력하고 싶다고 해 봅시다.

print("안녕하세요!")
print("안녕하세요!")
print("안녕하세요!")

이 코드는 동작합니다. 하지만 열 번, 백 번, 천 번이 되면 어떨까요? 손이 먼저 포기할 겁니다.

이럴 때 반복문을 쓰면 됩니다.

for _ in range(3):
    print("안녕하세요!")

이제 같은 코드를 세 번 직접 쓰지 않아도 됩니다. 우리가 해야 할 일은 딱 하나입니다.

"몇 번 반복할지" 또는 "무엇을 하나씩 꺼내며 반복할지"를 알려주기.

반복문은 결국 이런 뜻입니다.

이 일을 한 번만 하지 말고, 규칙에 따라 여러 번 해 줘.

for문: 묶음에서 하나씩 꺼내기

for문은 리스트, 문자열, 튜플처럼 여러 값이 들어 있는 묶음을 하나씩 꺼내며 반복할 때 아주 잘 어울립니다.1

가장 기본 모양은 이렇습니다.

for 변수 in 묶음:
    실행할 코드

예제를 보겠습니다.

fruits = ["사과", "바나나", "체리"]

for fruit in fruits:
    print(fruit)

실행 결과는 다음과 같습니다.

사과
바나나
체리

여기서 fruit는 반복 변수입니다. 첫 번째 반복에서는 "사과", 두 번째 반복에서는 "바나나", 세 번째 반복에서는 "체리"를 가리킵니다.

중요한 점은 fruit를 미리 만들 필요가 없다는 것입니다. for문이 반복할 때마다 현재 값을 자동으로 넣어 줍니다.

문자열도 반복할 수 있다

문자열도 글자의 묶음처럼 다룰 수 있습니다.1

for ch in "Python":
    print(ch)

실행 결과:

P
y
t
h
o
n

문자열을 한 글자씩 다루고 싶을 때 아주 유용합니다.

예를 들어 모음 개수 세기 같은 작업도 가능합니다.

word = "banana"
count = 0

for ch in word:
    if ch == "a":
        count += 1

print(count)

range()로 횟수만큼 반복하기

for문은 꼭 리스트 같은 묶음과만 함께 쓰는 것은 아닙니다. 정해진 횟수만큼 반복하고 싶을 때는 range()를 자주 사용합니다.2

가장 기본적인 형태

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

실행 결과:

0
1
2
3
4

여기서 많은 초보자가 놀라는 부분이 있습니다. range(5)는 0부터 5까지가 아니라 0부터 4까지입니다. 즉, 끝값은 포함하지 않습니다.2

시작값을 정할 수도 있다

for i in range(1, 6):
    print(i)

실행 결과:

1
2
3
4
5

이번에는 1부터 시작해서 6 직전까지 갑니다.

간격도 정할 수 있다

for i in range(2, 11, 2):
    print(i)

실행 결과:

2
4
6
8
10

2씩 증가하며 반복합니다.

거꾸로 내려갈 수도 있습니다.

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

실행 결과:

5
4
3
2
1

반복 변수의 값을 안 쓸 때는 _를 쓰기도 한다

반복은 필요하지만 숫자 자체는 필요 없을 때가 있습니다.

for _ in range(3):
    print("연습 중입니다.")

여기서 _는 "반복은 하지만 이 값은 따로 쓰지 않아요"라는 뜻처럼 읽으면 됩니다.

for문에서 인덱스가 필요할 때

가끔은 값만이 아니라 몇 번째인지도 알고 싶습니다.

예를 들어 학생 이름 앞에 번호를 붙여 출력하고 싶을 수 있습니다.

students = ["민준", "서연", "지우"]

for index, name in enumerate(students, start=1):
    print(index, name)

실행 결과:

1 민준
2 서연
3 지우

enumerate()를 사용하면 인덱스와 값을 함께 얻을 수 있습니다.3

while문: 조건이 참인 동안 계속하기

while문은 "몇 개를 돌릴지"보다 "언제까지 계속할지"가 더 중요할 때 사용합니다. 즉, 조건이 참인 동안 반복합니다.4

기본 모양은 이렇습니다.

while 조건식:
    실행할 코드

예제를 보겠습니다.

count = 1

while count <= 5:
    print(count)
    count += 1

실행 결과:

1
2
3
4
5

이 코드는 이렇게 움직입니다.

처음에 count는 1입니다. count <= 5가 참이므로 반복문 안으로 들어갑니다. 숫자를 출력한 뒤 count += 1로 값을 1 늘립니다. 다시 조건을 확인하고, 여전히 참이면 또 반복합니다. 그러다가 count가 6이 되면 조건이 거짓이 되어 반복이 끝납니다.

while문에서 정말 중요한 것

while문은 편리하지만, 한 가지를 잊으면 곤란합니다.

조건이 언젠가는 거짓이 되도록 만들어야 합니다.

예를 들어 다음 코드는 위험합니다.

count = 1

while count <= 5:
    print(count)

count 값이 바뀌지 않으므로 조건이 계속 참입니다. 이런 코드를 무한 루프라고 합니다. 프로그램이 끝나지 않고 계속 돌아갑니다.4

while문을 쓸 때는 항상 스스로 물어보세요.

이 조건은 어떻게 끝나지?

이 질문 하나만 잘해도 실수를 크게 줄일 수 있습니다.

for문과 while문은 언제 다를까

둘 다 반복문이지만, 잘 어울리는 장면이 다릅니다.

for문은 리스트의 값들을 하나씩 처리할 때, 또는 정해진 횟수만큼 반복할 때 자연스럽습니다.5

scores = [80, 92, 75, 100]

for score in scores:
    print(score)

while문은 반복 횟수를 미리 알기 어려울 때 잘 어울립니다.4

password = ""

while password != "python123":
    password = input("비밀번호를 입력하세요: ")

이 경우에는 사용자가 몇 번 틀릴지 모르기 때문에 for문보다 while문이 더 잘 맞습니다.

간단히 기억하면 좋습니다.

  • for문: 묶음에서 하나씩 꺼내기, 혹은 정해진 횟수만큼 반복하기

  • while문: 조건이 만족되는 동안 계속하기

  • 헷갈리면 "반복 횟수를 미리 아는가?"를 먼저 떠올리기

반복문을 멈추거나 건너뛰기

반복문은 무조건 처음부터 끝까지 달리기만 하는 것은 아닙니다. 중간에 멈출 수도 있고, 이번 한 번만 건너뛸 수도 있습니다.

break: 반복문을 바로 끝내기

break는 반복문 전체를 즉시 끝냅니다.6

numbers = [3, 7, 10, 15, 20]

for number in numbers:
    if number == 10:
        print("10을 찾았습니다!")
        break
    print(number)

실행 결과:

3
7
10을 찾았습니다!

10을 찾은 순간 반복문이 끝나므로, 뒤에 있는 15, 20은 보지 않습니다.

continue: 이번 한 번만 건너뛰기

continue는 반복문을 끝내지는 않고, 현재 반복만 건너뛰고 다음 반복으로 넘어갑니다.6

for number in range(1, 6):
    if number == 3:
        continue
    print(number)

실행 결과:

1
2
4
5

3일 때만 출력하지 않고 넘어갑니다.

짝수만 건너뛰는 예제도 자주 씁니다.

for number in range(1, 11):
    if number % 2 == 0:
        continue
    print(number)

이 코드는 홀수만 출력합니다.

반복문의 else: 조금 낯설지만 꽤 유용한 기능

파이썬의 반복문은 else를 붙일 수 있습니다. 처음 보면 어색하지만, 의미를 알면 꽤 멋집니다.

반복문의 else는 반복문이 자연스럽게 끝났을 때 실행됩니다. 반대로 break로 중간에 끝나면 실행되지 않습니다.7

예를 들어 어떤 값이 있는지 찾는 상황을 생각해 봅시다.

numbers = [2, 4, 6, 8]

target = 5

for number in numbers:
    if number == target:
        print("찾았습니다!")
        break
else:
    print("끝까지 찾았지만 없었습니다.")

실행 결과:

끝까지 찾았지만 없었습니다.

이 코드는 "못 찾았을 때"를 깔끔하게 처리할 수 있습니다.

while문에도 같은 규칙이 적용됩니다.7

반복문 안에 조건문 넣기

실제로는 반복문이 혼자 다니는 경우보다 조건문과 함께 다니는 경우가 더 많습니다.

예를 들어 점수 목록에서 합격자만 출력해 봅시다.

scores = [45, 72, 88, 39, 91]

for score in scores:
    if score >= 60:
        print(score, "점: 합격")

반복문은 값을 하나씩 꺼내고, 조건문은 그 값에 대해 판단합니다.

이 둘의 조합은 정말 자주 등장합니다. 마치 반복문이 재료를 나르고, 조건문이 검사하는 느낌입니다.

중첩 반복문: 반복문 안에 반복문

반복문 안에 또 다른 반복문을 넣을 수도 있습니다. 이를 중첩 반복문이라고 합니다.1

가장 유명한 예시는 구구단입니다.

for dan in range(2, 10):
    print(f"[{dan}단]")
    for num in range(1, 10):
        print(f"{dan} x {num} = {dan * num}")
    print()

바깥쪽 반복문은 2단, 3단, 4단처럼 단을 바꾸고, 안쪽 반복문은 각 단에서 1부터 9까지 곱합니다.

중첩 반복문은 처음에는 조금 복잡해 보일 수 있습니다. 그럴 때는 이렇게 생각하면 편합니다.

  • 바깥쪽 반복문: 큰 흐름

  • 안쪽 반복문: 그 안에서 반복되는 작은 흐름

  • 안쪽 반복문은 바깥쪽이 한 번 돌 때마다 새로 처음부터 실행됨

별 모양을 찍을 때도 자주 사용합니다.

for row in range(3):
    for col in range(5):
        print("*", end="")
    print()

실행 결과:

*
*
*

실전 감각 키우기: 작은 예제로 묶어 보기

이제 반복문이 실제로 어떻게 쓰이는지 짧은 예제로 정리해 봅시다.

예제 1: 1부터 10까지의 합 구하기

total = 0

for number in range(1, 11):
    total += number

print(total)

반복문 안에서 total에 숫자를 계속 더합니다. 이런 누적 계산은 반복문의 대표적인 활용입니다.

예제 2: 올바른 입력이 나올 때까지 계속 묻기

answer = ""

while answer != "네":
    answer = input("준비되었나요? (네 입력): ")

print("좋아요, 시작합니다!")

언제 끝날지 모르니 while문이 잘 어울립니다.

예제 3: 3번 안에 로그인 성공하기

correct_password = "python123"

for attempt in range(1, 4):
    password = input(f"{attempt}번째 시도: ")
    if password == correct_password:
        print("로그인 성공!")
        break
else:
    print("3번 모두 실패했습니다.")

이 예제에는 for문, break, else가 함께 들어 있습니다. 반복문 문법이 따로따로가 아니라, 서로 협력해서 문제를 해결하는 모습을 보여 줍니다.

초보자가 자주 하는 실수

반복문은 익숙해지기 전까지 비슷한 실수를 자주 만듭니다. 특히 아래 세 가지는 꼭 기억해 두세요.

  • range(5)는 5를 포함하지 않습니다. 0부터 4까지입니다.

  • while문에서는 조건에 쓰인 값이 바뀌어야 합니다. 그렇지 않으면 무한 루프가 생길 수 있습니다.

  • break는 반복문 전체를 끝내고, continue는 현재 차례만 건너뜁니다.

그리고 파이썬에서는 들여쓰기가 매우 중요합니다. 들여쓰기가 다르면 반복문 안에 있는 코드인지, 밖에 있는 코드인지가 달라집니다.

for i in range(3):
    print("반복 중")
print("반복 끝")

위 코드에서 print("반복 끝")은 반복문 밖에 있으므로 한 번만 실행됩니다.

직접 해 보면 더 빨리 익는다

아래 문제를 손으로 먼저 생각한 뒤 직접 코딩해 보세요.

  • 1부터 20까지 숫자 중 짝수만 출력해 보기

  • 리스트 ['봄', '여름', '가을', '겨울']의 값을 하나씩 출력해 보기

  • 사용자가 0을 입력할 때까지 숫자를 계속 입력받고, 입력한 숫자의 합 구하기

  • 2단부터 5단까지만 출력하는 작은 구구단 만들기

반복문은 읽는 것보다 직접 여러 번 써 보는 것이 훨씬 중요합니다. 처음에는 for와 while이 비슷하게 보여도, 직접 문제를 풀다 보면 "아, 이 상황은 for문이구나", "이건 while문이 더 자연스럽네" 하는 감각이 생깁니다.

마무리

이번 챕터에서는 반복문이 왜 필요한지부터 시작해, for문과 while문, range(), break, continue, 반복문의 else, 그리고 중첩 반복문까지 살펴보았습니다.

핵심은 단순합니다.

반복문을 배우면, 컴퓨터에게 같은 일을 여러 번 시킬 수 있습니다.

이건 생각보다 엄청난 변화입니다. 이제 우리는 코드를 한 줄씩 직접 늘어놓는 사람이 아니라, 규칙을 알려 주고 일을 맡기는 사람이 됩니다. 초보자의 코드가 점점 "프로그램답게" 변하기 시작하는 지점도 바로 여기입니다.

다음 챕터에서는 반복문과 자주 함께 쓰이는 데이터 묶음, 즉 리스트, 튜플, 딕셔너리, 집합을 더 깊이 다뤄 보겠습니다. 반복문이 재료를 꺼내는 도구라면, 다음 챕터의 자료형들은 그 재료를 담는 그릇입니다.

참고

1Python for Loops - W3Schools

2Python For Loop Range: A Beginner's Guide

3Python for Loops: The Pythonic Way - Real Python

4Python while Loops: Repeating Tasks Conditionally - Real Python

5Python Loops: A Comprehensive Guide for Beginners

6Python break and continue (With Examples) - Programiz

7Loops - LearnPython.org

책 목록

처음부터 실전까지, 진짜 쉬운 파이썬 교과서

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기