🐍 Python/🐍 기초 문법

[기초문법 5강] 반복문 (for, while) 완벽 가이드

itstory(Booho) 2025. 1. 19. 18:59
728x90

2025.01.19 - [🐍 Python/🐍 기초 문법] - [기초문법 4강] 조건문 (if, elif, else) 완벽 가이드

 

[기초문법 4강] 조건문 (if, elif, else) 완벽 가이드

2025.01.18 - [🐍 Python/🐍 기초 문법] - [기초문법 3강] 파이썬 연산자와 표현식, 기본부터 실습까지 [기초문법 3강] 파이썬 연산자와 표현식, 기본부터 실습까지2025.01.17 - [🐍 Python/🐍 기초 문법] -

boohoday.com

 

1. 반복문의 개념과 필요성

반복문의 역할

반복문(Loop)은 동일한 코드 블록을 여러 번 실행할 때 사용됩니다.
만약 반복문이 없다면, 동일한 동작을 수행하는 코드를 여러 번 작성해야 하며, 유지보수가 어려워집니다.

반복문을 사용하면 코드를 단순화하고 가독성을 높일 수 있으며, 프로그램의 효율성을 향상시킬 수 있습니다.

반복문이 없는 코드 vs 반복문을 활용한 코드

예제 1: 반복문이 없는 경우 (비효율적인 코드)

print("Hello, Python!")
print("Hello, Python!")
print("Hello, Python!")
print("Hello, Python!")
print("Hello, Python!")

 

예제 2: 반복문을 사용한 경우 (효율적인 코드)

for _ in range(5):
    print("Hello, Python!")

위 예제처럼 반복문을 사용하면 코드를 줄이고 유지보수를 쉽게 만들 수 있습니다.

반복문이 필요한 이유

  1. 코드의 중복을 줄이고 가독성을 향상
  2. 데이터를 반복적으로 처리 (예: 리스트, 파일, 웹 크롤링 등)
  3. 사용자 입력을 반복적으로 받을 때 유용
  4. 게임, 시뮬레이션, 인공지능 모델 등에서 필수적으로 사용

2. for 문 기본 구조와 활용

for 문이란?

for 문은 반복 횟수가 정해진 경우에 사용됩니다. 리스트, 튜플, 문자열 등의 요소를 하나씩 순회하거나, 특정 범위의 숫자를 반복할 때 유용합니다.

for 문의 기본 구조

for 변수 in 반복할_데이터:
    실행할 코드

 

예제: 리스트의 요소 출력하기

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

for fruit in fruits:
    print(fruit)

출력:

사과
바나나
체리

range() 함수와 함께 사용하기

range() 함수는 일정한 범위의 숫자를 생성하는 함수로, for 문과 함께 자주 사용됩니다.

 

예제: 1부터 5까지 출력하기

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

출력:

1
2
3
4
5

 

리스트, 튜플, 문자열과 함께 사용

문자열 반복

for char in "Python":
    print(char)

출력:

P
y
t
h
o
n

튜플 반복

colors = ("빨강", "초록", "파랑")

for color in colors:
    print(color)

 

enumerate()를 활용한 인덱스 출력

enumerate() 함수를 사용하면 리스트 요소와 함께 인덱스를 가져올 수 있습니다.

 

예제: 과일 리스트와 인덱스 출력

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

for index, fruit in enumerate(fruits):
    print(index, fruit)

출력:

0 사과
1 바나나
2 체리

3. while 문 기본 구조와 활용

while 문이란?

while 문은 조건이 참(True)인 동안 반복 실행하는 반복문입니다. 특정 조건이 만족될 때까지 실행되며, 종료 조건을 명확히 설정해야 합니다.

while 문의 기본 구조

while 조건:
    실행할 코드

 

while 문을 활용한 예제

예제: 1부터 5까지 출력하기

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

 

출력:

1
2
3
4
5

무한 루프와 종료 방법

while True를 사용하면 무한 루프를 만들 수 있습니다. 이 경우 break 문을 사용하여 특정 조건에서 반복을 종료해야 합니다.

예제: 특정 입력을 받을 때까지 반복

while True:
    command = input("종료하려면 'exit'을 입력하세요: ")
    if command == "exit":
        print("프로그램을 종료합니다.")
        break
    print(f"입력한 값: {command}")

while 문과 함께 사용하는 제어문

  • break: 반복문 즉시 종료
  • continue: 현재 반복을 건너뛰고 다음 반복 실행

예제: 짝수만 출력하기

num = 0
while num < 10:
    num += 1
    if num % 2 != 0:
        continue  # 홀수는 건너뛰기
    print(num)

 

출력:

2
4
6
8
10

4. 반복문과 함께 사용하는 제어문

제어문의 개념

제어문(Control Statements)은 반복문(for, while)과 함께 사용하여 실행 흐름을 제어하는 기능을 합니다. 주요 제어문으로는 break, continue, else가 있으며, 반복문의 종료, 특정 반복 건너뛰기, 조건 충족 시 실행 등을 처리할 수 있습니다.

break 문

break 문은 반복문을 즉시 종료하는 역할을 합니다.

예제: 사용자가 'exit'을 입력하면 반복 종료

while True:
    text = input("종료하려면 'exit' 입력: ")
    if text == "exit":
        print("반복문을 종료합니다.")
        break
    print(f"입력한 값: {text}")

출력 (사용자가 'exit' 입력 시 종료):

입력한 값: hello
입력한 값: python
반복문을 종료합니다.

continue 문

continue 문은 현재 반복을 건너뛰고 다음 반복을 실행하도록 합니다.

예제: 홀수만 출력하기

for num in range(1, 10):
    if num % 2 == 0:
        continue  # 짝수는 건너뜀
    print(num)

출력:

1
3
5
7
9

else와 함께 사용하는 반복문

for 또는 while 반복문과 함께 else를 사용하면, 반복문이 정상적으로 종료되었을 때 실행되는 코드를 정의할 수 있습니다. (즉, break로 종료되지 않은 경우 실행)

예제: 숫자 찾기

numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num == 4:
        print("4를 찾았습니다!")
        break
else:
    print("4를 리스트에서 찾을 수 없습니다.")

출력:

4를 리스트에서 찾을 수 없습니다.

 


5. 중첩 반복문 (Nested Loops)

중첩 반복문의 개념

중첩 반복문이란, 반복문 안에 또 다른 반복문을 포함하는 구조를 의미합니다. 이를 활용하면 2차원 리스트, 표 형태의 데이터, 또는 특정 패턴을 출력하는 작업을 수행할 수 있습니다.

중첩 반복문의 기본 구조

for 변수1 in 반복할_데이터1:
    for 변수2 in 반복할_데이터2:
        실행할 코드

 

예제: 구구단 출력 (중첩 for문 활용)

# 구구단 출력 프로그램
# 2단부터 9단까지 반복
for i in range(2, 10):  # i는 2부터 9까지 반복 (즉, 2단부터 9단까지)
    # 각 단에서 1부터 9까지 곱하기
    for j in range(1, 10):  # j는 1부터 9까지 반복 (각 단의 곱해지는 수)
        print(f"{i} x {j} = {i*j}", end="\t")  # i * j의 결과를 출력, 탭 간격을 추가하여 가로 정렬
    print()  # 각 단이 끝날 때 줄 바꿈하여 보기 좋게 정리

 

출력:

2 x 1 = 2    2 x 2 = 4    2 x 3 = 6    ...    2 x 9 = 18
3 x 1 = 3    3 x 2 = 6    3 x 3 = 9    ...    3 x 9 = 27
...
9 x 1 = 9    9 x 2 = 18   ...    9 x 9 = 81

중첩 while문 활용하기

예제: 별(*) 피라미드 출력

# 별(*) 피라미드 출력 프로그램
# 출력할 줄(row)의 개수 설정
rows = 5  # 총 5줄을 출력
row = 1  # 시작 행 (1부터 시작)

# while 문을 사용하여 행(row) 반복
while row <= rows:  # row가 5 이하일 때까지 반복
    col = 1  # 각 행에서 별(*)을 출력할 열(col) 설정
    while col <= row:  # 현재 row 값만큼 별을 출력
        print("*", end=" ")  # 별을 출력, end=" "를 사용하여 가로로 출력
        col += 1  # col 값을 1 증가시켜 다음 별 출력 준비
    print()  # 현재 행이 끝나면 줄 바꿈
    row += 1  # 다음 행으로 이동

출력:

*
* *
* * *
* * * *
* * * * *

중첩 반복문 사용 시 주의할 점

  1. 들여쓰기 주의: 파이썬에서는 들여쓰기가 코드의 구조를 결정하므로, 중첩 반복문 사용 시 가독성을 유지해야 합니다.
  2. 불필요한 중첩 피하기: 중첩 반복문을 과도하게 사용하면 성능이 저하될 수 있으므로, 리스트 컴프리헨션 등 다른 방법도 고려해야 합니다.
  3. break와 continue 활용: 중첩 반복문에서 특정 조건을 만족할 때 반복을 빠져나오거나 다음 반복을 건너뛰는 방법을 사용하면 실행 속도를 개선할 수 있습니다.
728x90

6. 리스트 컴프리헨션과 반복문

리스트 컴프리헨션이란?

리스트 컴프리헨션(List Comprehension)은 반복문을 이용하여 리스트를 간결하게 생성하는 방법입니다. 기존의 for 문을 사용한 리스트 생성 방식보다 코드가 짧고 가독성이 좋다는 장점이 있습니다.

기본 구조

[표현식 for 변수 in 반복할_데이터]

 

예제: 기존 for 문과 리스트 컴프리헨션 비교

# 기존 for 문을 사용하여 리스트 생성
numbers = []  # 빈 리스트 선언

# 1부터 5까지 반복하면서 각 숫자에 2를 곱하여 리스트에 추가
for i in range(1, 6):  # i는 1부터 5까지 반복
    numbers.append(i * 2)  # i * 2의 결과를 리스트에 추가

print(numbers)  # [2, 4, 6, 8, 10] 출력

# 리스트 컴프리헨션을 사용하여 같은 결과를 더 간결하게 생성
numbers_comp = [i * 2 for i in range(1, 6)]
# i에 2를 곱한 값을 리스트에 직접 추가 (한 줄로 표현)

print(numbers_comp)  # [2, 4, 6, 8, 10] 출력

출력:

[2, 4, 6, 8, 10]
[2, 4, 6, 8, 10]

조건문과 함께 사용하는 리스트 컴프리헨션

리스트 컴프리헨션에서는 if 조건문을 함께 사용하여 특정 조건을 만족하는 요소만 추가할 수 있습니다.

예제: 짝수만 리스트에 저장

# 리스트 컴프리헨션을 사용하여 짝수만 포함된 리스트 생성
even_numbers = [i for i in range(1, 11) if i % 2 == 0]
# 1부터 10까지 반복하면서 i가 2로 나누어 떨어지는(짝수) 경우만 리스트에 추가

print(even_numbers)  # [2, 4, 6, 8, 10] 출력

출력:

[2, 4, 6, 8, 10]

중첩 반복문과 리스트 컴프리헨션

리스트 컴프리헨션에서는 **중첩된 반복문(Nested Loops)**을 사용할 수도 있습니다.

예제: 2차원 리스트 평탄화 (Flattening a List)

# 2차원 리스트 (행렬) 선언
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 리스트 컴프리헨션을 사용하여 2차원 리스트를 1차원 리스트로 변환
flat_list = [num for row in matrix for num in row]
# 각 행(row)을 순회하면서, 해당 행(row) 내의 요소(num)를 하나씩 추가

print(flat_list)  # [1, 2, 3, 4, 5, 6, 7, 8, 9] 출력

출력:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

리스트 컴프리헨션 사용 시 주의할 점

  1. 너무 복잡한 표현은 지양하기: 코드가 지나치게 길어지면 오히려 가독성이 떨어질 수 있습니다.
  2. 메모리 사용량 고려하기: 큰 데이터를 한꺼번에 생성하는 경우 메모리 사용량이 증가할 수 있습니다.
  3. 다른 컬렉션에도 적용 가능: 튜플, 딕셔너리 컴프리헨션도 활용할 수 있습니다.

예제: 딕셔너리 컴프리헨션 사용

# 딕셔너리 컴프리헨션을 사용하여 숫자와 그 제곱 값을 저장
squares = {x: x**2 for x in range(1, 6)}
# 1부터 5까지 숫자 x를 반복하면서, key는 x, value는 x의 제곱(x**2)으로 설정

print(squares)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} 출력

출력:

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

7. 반복문을 활용한 실전 예제

예제 1: 특정 조건을 만족하는 숫자 찾기

사용자로부터 숫자를 입력받고, 해당 숫자가 리스트에 포함되어 있는지 확인하는 프로그램을 만들어 보겠습니다.

# 정해진 숫자 리스트
numbers = [10, 20, 30, 40, 50]  # 사용자가 입력할 숫자와 비교할 리스트

# 사용자로부터 숫자 입력받기
user_input = int(input("숫자를 입력하세요: "))  # 입력받은 값을 정수(int)로 변환

# 입력한 숫자가 리스트에 포함되어 있는지 확인
if user_input in numbers:  # user_input 값이 numbers 리스트 안에 존재하는지 검사
    print(f"{user_input}은 리스트에 포함되어 있습니다.")  # 포함된 경우 출력
else:
    print(f"{user_input}은 리스트에 없습니다.")  # 포함되지 않은 경우 출력

출력 예시 (사용자가 20 입력 시):

20은 리스트에 포함되어 있습니다.

예제 2: 구구단 출력 프로그램

반복문을 활용하여 2단부터 9단까지 구구단을 출력하는 프로그램을 작성해 봅니다.

# 구구단 출력 프로그램
# 2단부터 9단까지 반복
for i in range(2, 10):  # i는 2부터 9까지 반복 (즉, 2단부터 9단까지)
    print(f"{i}단")  # 현재 단을 출력

    # 각 단에서 1부터 9까지 곱하기
    for j in range(1, 10):  # j는 1부터 9까지 반복 (각 단의 곱해지는 수)
        print(f"{i} x {j} = {i * j}")  # i * j의 결과를 출력

    print()  # 각 단이 끝날 때 줄 바꿈하여 보기 좋게 정리

출력 예시:

2단
2 x 1 = 2
2 x 2 = 4
...
9 x 9 = 81

예제 3: 사용자 입력 기반 숫자 맞추기 게임

반복문을 활용하여 랜덤 숫자를 맞추는 간단한 게임을 만들어 보겠습니다.

# 랜덤 숫자 맞추기 게임
import random  # 랜덤 숫자를 생성하기 위한 random 모듈 임포트

# 1부터 100 사이의 랜덤 숫자 생성
secret_number = random.randint(1, 100)  # 컴퓨터가 랜덤으로 숫자를 선택
tries = 0  # 사용자의 시도 횟수를 기록하는 변수

# 무한 반복 (정답을 맞출 때까지 계속 실행)
while True:
    # 사용자로부터 숫자 입력받기
    user_guess = int(input("숫자를 입력하세요 (1-100): "))
    tries += 1  # 사용자가 입력할 때마다 시도 횟수 증가
    
    # 사용자가 입력한 숫자가 정답보다 작은 경우
    if user_guess < secret_number:
        print("더 큰 숫자를 입력하세요.")  # 힌트 제공

    # 사용자가 입력한 숫자가 정답보다 큰 경우
    elif user_guess > secret_number:
        print("더 작은 숫자를 입력하세요.")  # 힌트 제공

    # 사용자가 정답을 맞춘 경우
    else:
        print(f"정답입니다! {tries}번 만에 맞추셨습니다.")  # 정답 메시지 출력
        break  # while 반복문 종료

출력 예시 (사용자가 정답을 맞출 때까지):

더 큰 숫자를 입력하세요.
더 작은 숫자를 입력하세요.
정답입니다! 7번 만에 맞추셨습니다.

 

반복문을 활용한 실전 활용 팁

  1. 데이터 필터링: 특정 조건을 만족하는 데이터만 추출할 때 사용
  2. 파일 처리: 텍스트 파일에서 특정 단어 찾기, 로그 분석 등
  3. 웹 크롤링: 여러 페이지를 반복 탐색하여 데이터 수집
  4. 자동화 스크립트: 반복적인 작업을 자동으로 수행하는 스크립트 개발
728x90
반응형