← SEARCHABLE ARCHIVE
Python · 2026-07-17

Python 기초부터 마스터까지 — 2화

조건문, 반복문, 컴프리헨션으로 흐름 만들기

INTERACTIVE READING MODE →

본 블로그 작성 글들은, 강의를 목표로 하고 제작되었습니다. 또한 작성된 글의 정보도 틀렸을 수 있으니, 주의해주세요.

프로그램은 위에서 아래로만 실행되지 않는다. 조건에 따라 길을 고르고 같은 작업을 반복하면서 입력을 원하는 결과로 바꾼다.

조건문은 정책을 표현한다

def get_rank(score: int) -> str:
    if score < 0 or score > 100:
        raise ValueError("점수는 0부터 100 사이여야 합니다.")
    if score >= 90:
        return "S"
    if score >= 70:
        return "A"
    return "B"

위에서 먼저 만족한 분기만 실행되므로 조건의 순서도 프로그램의 규칙이다. 90, 89, 70, 69처럼 경계 바로 옆의 값을 넣어보면 규칙을 빠르게 확인할 수 있다.

Python은 빈 문자열, 빈 컬렉션, 숫자 0, None을 조건식에서 거짓으로 평가한다. 하지만 값이 없는 상태와 값이 0인 상태를 구분해야 한다면 value is None처럼 명시적으로 비교해야 한다.

for와 while

damages = [10, 0, 25, -3, 15]
total = 0

for damage in damages:
    if damage <= 0:
        continue
    total += damage

print(total)  # 50

for는 리스트, 문자열, range처럼 반복 가능한 값에서 원소를 하나씩 읽는다. 반복 횟수보다 종료 조건이 중요한 경우에는 while이 잘 맞는다.

remaining = 3

while remaining > 0:
    print(f"남은 기회: {remaining}")
    remaining -= 1

while에서는 조건을 바꾸는 코드가 빠지면 무한 반복이 생길 수 있다. 종료 조건과 한 번 반복할 때 무엇이 변하는지 먼저 확인해야 한다.

컴프리헨션

단순한 변환과 필터는 컴프리헨션으로 표현할 수 있다.

scores = [45, 82, 91, 67, 100]

passed = [score for score in scores if score >= 70]
labels = {score: get_rank(score) for score in passed}

앞의 코드는 통과 점수만 새 리스트에 모으고, 점수별 등급을 딕셔너리로 만든다. 여러 단계의 분기나 상태 변경이 들어간다면 짧게 줄이기보다 일반 반복문으로 풀어 쓰는 편이 읽기 쉽다.

match로 구조 나누기

Python 3.10 이상에서는 값의 구조에 따라 분기할 수 있다.

def describe(event: dict) -> str:
    match event:
        case {"type": "join", "name": str(name)}:
            return f"{name} 입장"
        case {"type": "leave", "name": str(name)}:
            return f"{name} 퇴장"
        case _:
            return "알 수 없는 이벤트"

match는 복잡한 입력 검증 전체를 대신하지 않는다. 외부에서 들어온 값은 필요한 키와 타입, 범위를 별도로 확인해야 한다.

조건과 반복을 익힐 때는 문법을 외우기보다 입력 표를 먼저 만들고 실행 결과를 예상해보는 것이 좋다. 정상값, 경계값, 잘못된 값을 각각 실행하면 프로그램의 흐름을 더 정확히 이해할 수 있다.