MCP - 4일차(제어문&컴프리헨션)

Jun·2026년 1월 30일

MCP

목록 보기
5/20

🕹️ 파이썬 제어문 (Control Flow) 개요


🟦 제어문의 정의

제어문은 프로그램이 위에서 아래로 순차적으로 실행되는 기본 흐름을 변경하여, 특정 조건에 따라 코드를 건너뛰거나 반복 실행하게 만드는 핵심 구문입니다.




1. 조건문 (Conditional)

주어진 조건식이 참(True)인지 거짓(False)인지에 따라 실행할 코드 블록을 결정합니다.

  • if ~ elif ~ else: 가장 보편적인 조건 분기문입니다.
  • match ~ case: (Python 3.10+) 값의 패턴에 따라 매칭되는 블록을 실행하는 구조적 패턴 매칭 방식입니다.




2. 순환문 (Loop)

특정 코드 블록을 원하는 횟수만큼 또는 조건이 만족될 때까지 반복해서 실행합니다.

  • for: 리스트, 튜플, 문자열 등 반복 가능한(Iterable) 객체의 요소를 하나씩 꺼내며 반복할 때 사용합니다.
  • while: 특정 조건식이 참(True)인 동안 무한히 반복하며, 조건이 거짓이 되면 종료합니다.

Tip: 모든 제어문은 콜론(:)으로 시작하며, 실행될 실행문들은 반드시 동일한 너비의 인덴트(들여쓰기)로 묶여 있어야 합니다.




⚖️ 조건문 (Conditional)


1. 기본 구조 및 인덴트

파이썬은 들여쓰기(Indentation)를 문법적으로 강제하며, 동일 블록은 반드시 들여쓰기가 일치해야 합니다.

  • if ~ elif ~ else
    if 조건식1:
        # 조건식1이 참일 때 수행
    elif 조건식2:
        # 조건식2가 참일 때 수행
    else:
        # 위 조건들이 모두 거짓일 때 수행
  • pass / ... (Ellipsis): 실행할 코드가 없는 빈 블록을 명시할 때 사용.

2. 비교 및 논리 연산자

  • 비교 연산자: >, >=, <, <=, !=, == (결과는 항상 True/False)

  • 논리 연산자:

    • and: 둘 다 참이어야 참
    • or: 하나만 참이어도 참
    • not: 논리값 반전
    • ^ (XOR): 두 값이 다르면 참, 같으면 거짓
  • 범위 간소화: 0 <= score <= 100과 같이 연속적인 비교가 가능.


3. Truthy & Falsy (참/거짓 판정)

파이썬에서는 bool 외에도 객체의 상태에 따라 조건식에서 참/거짓을 판정합니다.

타입참 (True)거짓 (False)
숫자0이 아닌 숫자 (1, -1, 0.5)0, 0.0
문자열비어 있지 않은 문자열 ("abc", " ")"" (빈 문자열)
리스트요소가 있는 리스트 [1][] (빈 리스트)
딕셔너리요소가 있는 딕셔너리 {"a": 1}{} (빈 딕셔너리)
기타-None (무조건 거짓)

4. SCE (Short-Circuit Evaluation)

논리 연산 시 결과가 확정되면 나머지 연산을 생략하고 그 최종 평가값을 리턴합니다.

  • OR (or): 왼쪽이 참이면 왼쪽 값 리턴, 거짓이면 오른쪽 값 리턴
    • 120 or ""120
    • 0 or 100100
  • AND (and): 왼쪽이 참이면 오른쪽 값 리턴, 거짓이면 왼쪽 값 리턴

    • "Hello" and 555555
    • [] and "Hi"[]
  • 활용:

(a % 2 == 0) or print('홀수') #(앞이 거짓일 때만 실행) 

5. 삼항 연산자 (Conditional Expressions)

간단한 분기 로직을 한 줄로 표현합니다.

  • 구문: (참일 때 값) if (조건식) else (거짓일 때 값)
# 절대값(차이) 구하기
diff = (a - b) if a > b else (b - a)


# 변수 대입
result = 'Positive' if a > 0 else 'Zero or Negative'

🔁 순환문 (Loop)


1. while 순환문

조건식이 참(True)인 동안 블록 내부의 문장을 반복 수행합니다.

  • 기본 구조
    while (조건식):
        수행할 문장1
        수행할 문장2
    else:
        루프의 조건식이 거짓(`False`)이 되어 루프가 정상적으로 종료될 때
        else 블록이 실행됩니다.
  • 핵심 체크포인트

    1. 순환 횟수: 조건이 언제까지 참인가?
    2. 변수 변화: 순환문 내부에서 조건에 영향을 주는 변수가 어떻게 변하는가?
    3. 종료 후 상태: 루프를 빠져나온 직후의 변수 값은 무엇인가?
  • 무한 루프와 break/continue

    • break: 가장 가까운 순환문을 강제로 즉시 종료.
    • continue: 아래 문장을 건너뛰고 순환문의 처음(조건식 확인)으로 돌아감.
    • while True:: 특정 조건에서 break를 만날 때까지 무한히 반복.

2. for 순환문

파이썬의 for문은 iterable 객체(리스트, 튜플, 문자열, range 등)의 요소를 하나씩 꺼내며 반복합니다.

  • 기본 구조
    for 변수 in iterable객체:
        수행할 문장
  • 자주 사용되는 Iterable 객체
    • range(stop): 0부터 stop-1까지의 숫자 생성
    • range(start, stop, step): 시작, 끝, 증감 지정
    • 문자열/리스트/튜플: 각 요소를 순차적으로 추출 (중요)
    • 딕셔너리: 기본적으로 key를 추출 (.items() 사용 시 key, value 쌍 추출)

예제

my_dict = {'name':'hong', 'age':24, 'grade':4}

for key in my_dict:  # [실행 결과]
    print(key)       # name
					 # age
                     # grade


my_dict.keys()   # dict_keys(['name', 'age', 'grade'])
my_dict.values() # dict_values(['hong', 24, 4])
my_dict.items()  # dict_items([('name', 'hong'), ('age', 24), ('grade', 4)])


#리스트에 담기
keys_list = list(my_dict.keys())  # 결과: ['name', 'age', 'grade']


#.items()활용
for item in my_dict.items(): # [실행 결과]
    print(item)				 # ('name', 'hong')
							 # ('age', 24)
							 # ('grade', 4)

#언패킹하기
for key, value in my_dict.items(): # [실행 결과]
    print(f"{key} : {value}")      # name : hong
								   # age : 24
								   # grade : 4

#첫 번째 순환: ('name', 'hong')을 꺼냄
#key, value = ('name', 'hong') 대입 발생 (Tuple Unpacking)
#key는 'name', value는 'hong'이 됨

3. 순환문 보조 도구 (enumerate, zip)

순환문을 더욱 강력하고 직관적으로 만들어주는 내장 함수입니다.

  • 반환 형태: (인덱스, 데이터) 쌍의 튜플들을 담은 객체를 리턴합니다.
  • enumerate(iterable, start=0)
    • (인덱스, 데이터) 쌍을 튜플로 반환합니다.
    • 데이터에 번표를 붙여서 꺼낼 때 사용하고, 리스트 같은 객체를 돌릴 때, 데이터뿐만 아니라
      현재 몇 번째(인덱스)인지도 동시에 알고 싶을 때 사용합니다.
animals = ['dog', 'cat', 'bird', 'puppy', 'kitty']

# 1. 튜플 통째로 받기 (x는 (0, 'dog') 형태)
for x in enumerate(animals):
    print(x) 
    
#(0, 'dog')
#(1, 'cat')
#(2, 'bird')
#(3, 'puppy')
#(4, 'kitty')


# 2. 언패킹으로 받기 (가장 권장됨)
# 시작 번호를 10으로 지정 (기본값은 0)
for idx, animal in enumerate(animals, 10):
    print(f"{idx} - {animal}")

# [출력 결과]
# 10 - dog
# 11 - cat
# 12 - bird ...

  • zip(iterable1, iterable2, ...)
    • 여러 개의 반복 가능한 객체를 인덱스별로 묶어 튜플로 반환합니다.
nums = [10, 20, 30]
chars = ('a', 'b', 'c')

# 1. list()로 변환해서 확인해보기
list(zip(nums, chars)) 
# 결과: [(10, 'a'), (20, 'b'), (30, 'c')]

# 2. 반복문에서 활용 (병렬 처리)
for n, c in zip(nums, chars):
    print(f"숫자: {n}, 문자: {c}")

# [출력 결과]
# 숫자: 10, 문자: a
# 숫자: 20, 문자: b
# 숫자: 30, 문자: c

4. 중첩 순환문 (Nested Loop)

순환문 안에 순환문을 넣어 다차원 데이터를 처리합니다. (예: 구구단)

# 2단 ~ 9단 출력 예시
dan = 2
while dan <= 9:
    mul = 1
    while mul <= 9:
        print(f"{dan} x {mul} = {dan * mul}")
        mul += 1
    dan += 1

🧩 컴프리헨션 (Comprehension)


1. 개요

컴프리헨션은 기존의 반복 가능한(Iterable) 객체를 바탕으로 새로운 리스트, 세트, 딕셔너리를 빠르고 간결하게 생성하는 파이썬 특유의 문법입니다.

종류구문결과 타입
List Comprehension[표현식 for 항목 in iterable if 조건]list
Set Comprehension{표현식 for 항목 in iterable if 조건}set
Dict Comprehension{K:V for K, V in iterable if 조건}dict
Generator Expression(표현식 for 항목 in iterable if 조건)generator

2. List Comprehension [ ]

리스트 내부에서 for문과 if문을 사용하여 간결하게 새 리스트를 생성합니다.

a = [1, 2, 3, 4]

# 1. 기본 생성: [3, 6, 9, 12]
[num * 3 for num in a]

# 2. 조건문 포함 (짝수만): [6, 12]
[num * 3 for num in a if num % 2 == 0]
  1. Set Comprehension { }
    중복을 허용하지 않는 집합의 특성을 유지하며 생성합니다.
# List의 경우: [0, 1, 2, 0, 1, 2, 0, 1, 2, 0] (중복 포함)
[num % 3 for num in range(10)]

# Set의 경우: {0, 1, 2} (중복 제거)
{num % 3 for num in range(10)}
  1. Dict Comprehension {K:V}
    키(Key)와 값(Value)의 쌍을 생성하며, 키-값의 위치를 바꾸거나 특정 항목을 필터링할 때 유용합니다.
# 1. 숫자:나머지 쌍 생성: {0: 0, 1: 1, 2: 2, 3: 0, ...}
{num: num % 3 for num in range(10)}

# 2. 기존 딕셔너리 활용 및 필터링
fruits = {"peach": 10000, "apple": 4000, "banana": 6000}

# banana 제외하고 생성
{k: v for k, v in fruits.items() if k != 'banana'}

# 3. Key와 Value 뒤집기 (Inverting a Dictionary)
# {10000: 'peach', 4000: 'apple', 6000: 'banana'}
{v: k for k, v in fruits.items()}
profile
Hard Trying

0개의 댓글