어제 오늘 내일

[Python 기초] 8. "100번의 단순 노동을 단 세 줄로!" 파이썬의 for-in 반복문 완벽 가이드 본문

IT/Python

[Python 기초] 8. "100번의 단순 노동을 단 세 줄로!" 파이썬의 for-in 반복문 완벽 가이드

hi.anna 2026. 4. 10. 01:19

만약 엑셀 파일 100개를 열어서 각각의 파일명을 바꿔야 한다고 상상해 보세요. 사람이 직접 하면 마우스 클릭을 수천 번 해야 하고 실수하기도 쉽습니다. 하지만 프로그래밍의 반복문을 사용하면 단 몇 줄의 코드로 1초 만에 끝낼 수 있습니다.

오늘은 파이썬에서 가장 많이 쓰이고, 가장 직관적인 형태를 가진 for-in 반복문과 그 단짝 친구들(range, enumerate, zip)을 완벽하게 마스터해 보겠습니다.


1. 파이썬 반복문의 핵심:  구조

파이썬의 for문은 아주 직관적입니다. "저 바구니(리스트)에 있는 물건들을 하나씩 꺼내서, 다 떨어질 때까지 이 작업을 반복해!"라는 뜻입니다.

기본 공식:

for 임시변수 in 데이터꾸러미:
    반복할 코드

📌 예제 코드: 장바구니 물건 하나씩 꺼내기

cart = ["사과", "바나나", "포도"]

for fruit in cart:
    print(f"장바구니에서 {fruit}를 꺼냈습니다.")

print("장바구니가 비었습니다!")

실행 결과:

장바구니에서 사과를 꺼냈습니다.
장바구니에서 바나나를 꺼냈습니다.
장바구니에서 포도를 꺼냈습니다.
장바구니가 비었습니다!

💡 코드 설명:

  • cart라는 리스트 안에 있는 데이터를 맨 앞에서부터 하나씩 꺼냅니다.
  • 꺼낸 데이터는 fruit라는 임시 상자(변수)에 잠시 담깁니다.
  • 들여쓰기 된 print 문장이 실행됩니다.
  • 리스트의 끝까지 도달하면 들여쓰기 블록을 빠져나와 마지막 문장을 출력합니다.

2. 원하는 횟수만큼 반복하기:  함수

만약 데이터 꾸러미(리스트)가 없고, 그냥 "이 문장을 5번 반복해 줘!"라고 시키고 싶을 때는 어떻게 할까요? 이때 숫자를 자동으로 만들어주는 마법의 기계, range() 함수를 사용합니다.

📌 예제 코드: range()의 3가지 변신

# 1. 종료 숫자만 지정하기: 0부터 '종료 숫자 직전'까지
for i in range(3):
    print(f"{i}번째 인사: 안녕하세요!")
# 출력: 0, 1, 2 (총 3번)

print("-" * 20)

# 2. 시작과 종료 숫자 지정하기: 1부터 5 앞(4)까지
for i in range(1, 5):
    print(f"번호표 {i}번 고객님~")
# 출력: 1, 2, 3, 4

print("-" * 20)

# 3. 건너뛰기 (step) 추가: 1부터 10 앞까지 2칸씩 뛰어서
for i in range(1, 10, 2):
    print(f"홀수만 출력: {i}")
# 출력: 1, 3, 5, 7, 9

⚠️ 주의사항: 슬라이싱 때와 마찬가지로 range(A, B)에서 끝 번호 B는 절대 포함되지 않습니다! B의 바로 앞 숫자까지만 만들어냅니다.


3. 순서(번호표)와 데이터를 동시에:

실무에서 반복문을 돌리다 보면 데이터뿐만 아니라 "이 데이터가 몇 번째 데이터인지(인덱스)" 알아야 할 때가 정말 많습니다. 파이썬에서는 아주 우아한 해결책인 enumerate()를 제공합니다.

📌 예제 코드: 달리기 대회 순위 발표

runners = ["철수", "영희", "민수", "지훈"]

# 데이터만 꺼내는 방식
# for name in runners:
#     print(name)

# 순서(인덱스)와 데이터를 함께 꺼내는 방식 (start=1 옵션으로 1등부터 시작!)
for rank, name in enumerate(runners, start=1):
    print(f"{rank}등: {name} 선수")

실행 결과:

1등: 철수 선수
2등: 영희 선수
3등: 민수 선수
4등: 지훈 선수

enumerate()를 쓰면 rank에는 번호표가, name에는 실제 데이터가 동시에 쏙쏙 들어갑니다. 코드가 훨씬 깔끔해지죠.


4. 여러 개의 주머니를 한 번에 털기:

이름이 들어있는 리스트 하나, 점수가 들어있는 리스트 하나. 이 두 리스트를 동시에 짝지어서 돌리고 싶다면 어떻게 해야 할까요?
이름처럼 두 리스트의 지퍼를 쫙 채워주는 zip() 함수를 씁니다.

📌 예제 코드: 학생 이름과 점수 짝지어 출력하기

names = ["Alice", "Bob", "Charlie"]
scores = [95, 80, 100]

# 두 리스트를 zip으로 묶으면, 같은 위치(인덱스)에 있는 것끼리 짝꿍이 됩니다.
for name, score in zip(names, scores):
    print(f"이름: {name}, 점수: {score}점")

실행 결과:

이름: Alice, 점수: 95점
이름: Bob, 점수: 80점
이름: Charlie, 점수: 100점

5. 무한루프와 제어기:  문, ,

횟수가 정해져 있지 않고, "특정 조건이 만족될 때까지 계속해!"라고 할 때는 while 문을 사용합니다.
이때 반복문을 강제로 멈추거나 건너뛰는 버튼도 있습니다.

📌 예제 코드: 비밀번호 맞추기 게임

while True:  # True이므로 영원히 반복되는 무한루프입니다.
    pwd = input("비밀번호를 입력하세요: ")  # 사용자에게 입력을 받습니다.

    if pwd == "1234":
        print("로그인 성공!")
        break  # 반복문을 즉시 박살 내고(종료하고) 빠져나옵니다.

    if pwd == "0000":
        print("0000은 너무 쉬운 비밀번호입니다. 다시 시도하세요.")
        continue  # 아래 코드를 무시하고, 다시 반복문의 맨 처음으로 올라갑니다.

    print("비밀번호가 틀렸습니다. 다시 시도하세요.")
  • break: 브레이크를 밟아서 반복문을 아예 끝내버립니다.
  • continue: 이번 턴(차례)만 건너뛰고 다음 반복으로 넘어갑니다.

📝 마치며

오늘 배운 핵심 요약입니다.

  1. for 변수 in 리스트: - 리스트의 데이터를 하나씩 순서대로 꺼내며 반복한다.
  2. range() - 원하는 횟수만큼 숫자를 자동으로 만들어준다. (끝 숫자는 포함 X)
  3. enumerate() - 데이터의 순서(인덱스)와 값을 동시에 뽑아준다.
  4. zip() - 여러 개의 리스트를 같은 순서끼리 짝지어서 뽑아준다.

이 4가지만 자유자재로 다뤄도 여러분은 엑셀 수천 줄의 데이터를 파이썬으로 가볍게 요리할 수 있습니다.
그런데 파이썬 개발자들은 이 반복문조차도 여러 줄 쓰는 것을 귀찮아해서, 아예 한 줄로 압축해 버리는 마법을 만들어냈습니다.
다음 포스팅에서는 "리스트를 만드는 가장 파이썬스러운 방법, 코드의 길이를 반으로 줄여주는 리스트 컴프리헨션(List Comprehension)"에 대해 알아보겠습니다.
도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍

반응형
Comments