포스트

[Python 100일 챌린지] Day 9 - 반복문 for

[Python 100일 챌린지] Day 9 - 반복문 for

반복 작업을 자동화하는 마법! 😊 for문은 프로그래머의 필수 무기입니다. “100명의 학생 성적 처리”, “1000개의 파일 이름 변경”, “게임에서 모든 적 이동” 같은 반복 작업을 코드 한 줄로 해결할 수 있습니다. 복사-붙여넣기는 이제 그만! 진짜 프로그래밍의 시작입니다.

(15분 완독 ⭐⭐)

🎯 오늘의 학습 목표

📚 사전 지식

🎯 학습 목표 1: for문이 무엇인지 이해하기

한 줄 설명

for문 = 반복 작업을 자동으로 해주는 명령

똑같은 일을 여러 번 할 때 사용합니다.

왜 필요한가요?

1
2
3
4
5
6
7
8
9
10
11
12
# ❌ 반복문 없이 (비효율적)
fruits = ["사과", "바나나", "포도", "딸기", "수박"]
print(fruits[0])
print(fruits[1])
print(fruits[2])
print(fruits[3])
print(fruits[4])

# ✅ for문 사용 (효율적)
fruits = ["사과", "바나나", "포도", "딸기", "수박"]
for fruit in fruits:
    print(fruit)

🎯 학습 목표 2: for문으로 리스트 순회하기

문법

1
2
for 변수 in 리스트:
    실행할 코드

💡 중요: 콜론(:)과 들여쓰기(4칸 또는 Tab) 필수!

첫 for문 작성

1
2
3
4
fruits = ["사과", "바나나", "포도"]

for fruit in fruits:
    print(fruit)

출력:

1
2
3
사과
바나나
포도

동작 원리

1
2
3
4
5
6
7
8
fruits = ["사과", "바나나", "포도"]

for fruit in fruits:
    print(f"현재: {fruit}")

# 1회전: fruit = "사과"
# 2회전: fruit = "바나나"
# 3회전: fruit = "포도"

출력:

1
2
3
현재: 사과
현재: 바나나
현재: 포도

🎯 학습 목표 3: range()로 숫자 범위 만들기

range() 기본 문법

1
2
3
# 0부터 4까지 (5는 제외!)
for i in range(5):
    print(i)

출력:

1
2
3
4
5
0
1
2
3
4

💡 중요: range(5)는 0부터 4까지! 총 5개의 숫자

range() 3가지 사용법

1
2
3
4
5
6
7
8
9
10
11
# 1. range(끝) - 0부터 끝-1까지
for i in range(3):
    print(i)  # 0, 1, 2

# 2. range(시작, 끝) - 시작부터 끝-1까지
for i in range(2, 5):
    print(i)  # 2, 3, 4

# 3. range(시작, 끝, 간격)
for i in range(0, 10, 2):
    print(i)  # 0, 2, 4, 6, 8 (짝수만)

거꾸로 세기 (역순)

1
2
3
# 5부터 1까지
for i in range(5, 0, -1):
    print(i)

출력:

1
2
3
4
5
5
4
3
2
1

예제 1: 구구단

1
2
3
4
5
6
# 2단 출력
dan = 2

for i in range(1, 10):
    result = dan * i
    print(f"{dan} × {i} = {result}")

출력:

1
2
3
4
5
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
...
2 × 9 = 18

예제 2: 리스트 합계

1
2
3
4
5
6
7
numbers = [10, 20, 30, 40, 50]
total = 0

for number in numbers:
    total = total + number

print(f"합계: {total}")

출력:

1
합계: 150

예제 3: 카운트다운

1
2
3
4
5
6
print("카운트다운 시작!")

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

print("발사! 🚀")

출력:

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

🎯 학습 목표 4: enumerate()와 중첩 for문 활용하기

enumerate() - 인덱스와 값 동시 사용

1
2
3
4
fruits = ["사과", "바나나", "포도"]

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

출력:

1
2
3
0번: 사과
1번: 바나나
2번: 포도

1부터 시작하기

1
2
3
4
fruits = ["사과", "바나나", "포도"]

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

출력:

1
2
3
1번: 사과
2번: 바나나
3번: 포도

중첩 for문 - for 안에 for

1
2
3
4
5
# 2단부터 4단까지
for dan in range(2, 5):
    print(f"\n=== {dan}단 ===")
    for i in range(1, 10):
        print(f"{dan} × {i} = {dan * i}")

출력:

1
2
3
4
5
6
7
8
=== 2단 ===
2 × 1 = 2
2 × 2 = 4
...

=== 3단 ===
3 × 1 = 3
...

별 찍기

1
2
3
# 삼각형 만들기
for i in range(1, 6):
    print("" * i)

출력:

1
2
3
4
5
★
★★
★★★
★★★★
★★★★★

🎯 학습 목표 5: break와 continue로 반복 제어하기

break - 반복 즉시 중단

1
2
3
4
5
6
7
8
# 5를 찾으면 멈추기
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for num in numbers:
    if num == 5:
        print("5를 찾았습니다!")
        break
    print(num)

출력:

1
2
3
4
5
1
2
3
4
5를 찾았습니다!

continue - 현재 반복 건너뛰기

1
2
3
4
5
# 짝수만 출력
for i in range(1, 11):
    if i % 2 == 1:  # 홀수면
        continue    # 건너뛰기
    print(i)

출력:

1
2
3
4
5
2
4
6
8
10

🎯 학습 목표 6: for문 실전 활용 패턴 익히기

패턴 1: 리스트 만들기

1
2
3
4
5
6
7
8
# 1부터 10까지의 제곱 리스트
squares = []

for i in range(1, 11):
    squares.append(i ** 2)

print(squares)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

패턴 2: 조건부 처리

1
2
3
4
5
6
7
# 80점 이상만 출력
scores = [95, 78, 88, 65, 92, 73]

print("80점 이상 학생:")
for score in scores:
    if score >= 80:
        print(f"{score}")

출력:

1
2
3
4
80점 이상 학생:
95점
88점
92점

패턴 3: 문자열 순회

1
2
3
4
text = "Python"

for char in text:
    print(char)

출력:

1
2
3
4
5
6
P
y
t
h
o
n

패턴 4: 최댓값/최솟값 찾기

1
2
3
4
5
6
7
8
9
numbers = [45, 23, 78, 56, 92, 34]

max_value = numbers[0]  # 첫 번째 값으로 시작

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

print(f"최댓값: {max_value}")

출력:

1
최댓값: 92

💻 실전 예제

예제 1: 다이아몬드 패턴 출력

1
2
3
4
5
6
# 다이아몬드 만들기
for i in range(1, 6):
    print(" " * (5 - i) + "" * (2 * i - 1))

for i in range(4, 0, -1):
    print(" " * (5 - i) + "" * (2 * i - 1))

출력:

1
2
3
4
5
6
7
8
9
    ★
   ★★★
  ★★★★★
 ★★★★★★★
★★★★★★★★★
 ★★★★★★★
  ★★★★★
   ★★★
    ★

예제 2: 소수 찾기

1
2
3
4
5
6
7
8
9
10
11
12
13
# 2부터 20까지 소수 찾기
print("2부터 20까지의 소수:")

for num in range(2, 21):
    is_prime = True

    for i in range(2, num):
        if num % i == 0:
            is_prime = False
            break

    if is_prime:
        print(num, end=" ")

출력:

1
2
2부터 20까지의 소수:
2 3 5 7 11 13 17 19

💡 실전 팁 & 주의사항

💡 Tip 1: for문은 자동 종료되어 안전

1
2
3
4
# ✅ for문은 리스트 끝에 도달하면 자동 종료
# while문과 달리 무한 루프 걱정 없음!
for i in range(100000):
    print(i)  # 100000번 반복 후 자동 종료

💡 Tip 2: 반복 중 리스트 수정 주의

1
2
3
4
5
6
7
8
9
# ❌ 위험한 방법 (반복 중 리스트 수정)
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    numbers.remove(num)  # 예상치 못한 결과!

# ✅ 안전한 방법 (복사본 사용)
numbers = [1, 2, 3, 4, 5]
for num in numbers.copy():
    numbers.remove(num)

💡 Tip 3: 들여쓰기 필수

1
2
3
4
5
6
7
# ❌ 잘못된 예
for i in range(3):
print(i)  # IndentationError!

# ✅ 올바른 예
for i in range(3):
    print(i)

💡 Tip 4: range() 끝 값 제외

range(5)가 왜 0~4까지일까요?

1
2
3
4
5
6
# range(n)은 0부터 n-1까지
print(list(range(5)))  # [0, 1, 2, 3, 4]

# 💡 총 5개 숫자 → range(5)로 5번 반복!
for i in range(5):
    print(i)  # 5번 반복됨

💡 Tip 5: 의미 있는 변수명 사용

1
2
3
4
5
6
7
# ❌ 나쁜 예
for i in fruits:  # fruits인데 i?
    print(i)

# ✅ 좋은 예
for fruit in fruits:  # 의미 있는 이름
    print(fruit)

💡 Tip 6: enumerate()로 인덱스와 값 동시 활용

1
2
3
4
5
6
7
8
# ❌ 복잡한 방법
fruits = ["사과", "바나나", "포도"]
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

# ✅ 간결한 방법
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

🧪 연습 문제

문제 1: 팩토리얼 계산

5! (5 팩토리얼 = 5 × 4 × 3 × 2 × 1)을 계산하세요.

💡 힌트

결과를 1로 시작해서 계속 곱해나가세요!

✅ 정답
1
2
3
4
5
6
7
8
n = 5
result = 1

for i in range(1, n + 1):
    result = result * i

print(f"{n}! = {result}")
# 5! = 120

문제 2: 피라미드 만들기

숫자로 된 피라미드를 만드세요.

✅ 정답
1
2
3
4
5
6
7
8
9
10
for i in range(1, 6):
    # 공백 출력
    for j in range(5 - i):
        print(" ", end="")

    # 숫자 출력
    for j in range(1, i + 1):
        print(j, end="")

    print()  # 줄바꿈

출력:

1
2
3
4
5
    1
   12
  123
 1234
12345

문제 3: 특정 문자 개수 세기

문자열에서 ‘a’의 개수를 세세요.

✅ 정답
1
2
3
4
5
6
7
8
9
text = "banana"
count = 0

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

print(f"'a'의 개수: {count}")
# 'a'의 개수: 3

📝 오늘 배운 내용 정리

  1. for문: 반복 작업 자동화
  2. range(): 숫자 범위 생성
  3. enumerate(): 인덱스와 값 함께 사용
  4. break: 반복 중단
  5. continue: 다음 반복으로 건너뛰기
  6. 중첩 for문: 반복문 안에 반복문

🎯 실습 과제

과제: 성적 처리 프로그램

학생들의 점수 리스트에서:

  1. 모든 점수 출력
  2. 평균 계산
  3. 80점 이상 개수 세기
  4. 최고점 찾기

예시:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
scores = [85, 92, 78, 95, 88, 73, 90]

# 1. 모든 점수 출력
print("전체 점수:")
for score in scores:
    print(score, end=" ")
print()

# 2. 평균
total = 0
for score in scores:
    total += score
average = total / len(scores)
print(f"평균: {average:.1f}")

# 3. 80점 이상
count = 0
for score in scores:
    if score >= 80:
        count += 1
print(f"80점 이상: {count}")

# 4. 최고점
max_score = scores[0]
for score in scores:
    if score > max_score:
        max_score = score
print(f"최고점: {max_score}")

🔗 관련 자료


📚 이전 학습

Day 8: 조건문 if

어제는 if, elif, else로 조건에 따라 다른 코드를 실행하는 방법을 배웠습니다!

📚 다음 학습

Day 10: 미니 프로젝트 - 숫자 맞추기 게임 ⭐⭐⭐

내일은 지금까지 배운 내용을 모두 활용해서 재미있는 게임을 만듭니다!


“늦었다고 생각할 때가 가장 빠른 시기입니다!” 🚀

Day 9/100 Phase 1: Python 시작하기 #100DaysOfPython
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.