파이썬의 조건문은 프로그램의 실행 흐름을 제어하기 위한 문법으로, 기본적으로 if, elif, else를 사용하여 조건의 참(True)과 거짓(False)에 따라 다른 코드를 실행할 수 있다. 간단한 조건에 대해서는 "값1 if 조건 else 값2" 형태의 조건부 표현식을 사용해 한 줄로 값을 선택할 수 있다.
1. if, elif, else
1. if 문
가장 기본적인 조건문. 특정 조건이 참(True)일 경우에만 해당 블록 내의 코드가 실행된다.
if 조건:
실행할 코드
여기에서 조건은 True 또는 False로 평가될 수 있는 표현식이어야 한다. 조건이 True로 평가되면 if 문 바로 아래의 코드 블록이 실행된다. 조건이 False로 평가되면 그 코드 블록은 건너뛰고 if문 밖으로 나온다.
age = int(input('나이를 입력하세요: '))
if age > 19:
print('성인입니다')
print('넷플릭스 성인영화를 감상할 수 있습니다')
print('입력한 나이: ', age)
2. else 문
else 문은 조건문에서 특정 조건이 충족되지 않을 때 실행할 코드 블록을 정의할 때 사용.
if 조건:
코드 블록1
else:
코드 블록2
age = int(input('나이를 입력하세요'))
if age > 19:
print('성인입니다')
print('넷플릭스 성인영화를 감상할 수 있어요')
else:
print('미성년입니다')
print('디즈니플러스를 보세요')
print('입력한 나이: ', age)
text = input("아이디를 입력하세요: ")
if (length := len(text)) < 3:
print(f"아이디가 너무 짧습니다. (입력한 글자 수: {length})")
else:
print(f"아이디 '{text}'는 사용 가능합니다.")
※ 왈라스 연산자 (:=)
:= 연산자는 파이썬에서 값을 할당하면서 동시에 그 값을 표현식 안에서 사용할 수 있게 해주는 할당 표현식(assignment expression)이다. 기존에는 값을 변수에 저장한 뒤 다시 사용하는 두 단계 과정이 필요하지만, :=를 사용하면 조건문, 반복문, 컴프리헨션 등에서 값을 한 번 계산하면서 변수에 저장하고 바로 활용할 수 있어 코드가 더 간결해진다.
3. elif문
elif if-else 구조에서 추가적인 조건을 검사하기 위해 사용합니다. elif는 "else if"의 줄임말이며, 주어진 여러 조건 중에서 하나만 참일 때 실행되는 코드 블록을 정의한다.
- elif는 if 없이 단독으로 사용될 수 없다.
- elif는 필요에 따라 여러 번 사용될 수 있다.
- else는 선택적이다. 사용될 경우, 항상 if나 elif 뒤에 나타나야 한다.
if 조건1:
코드 블록1
elif 조건2:
코드 블록2
elif 조건3:
코드 블록3
else:
코드 블록4
age = int(input('나이를 입력하세요: '))
if age > 19:
print('성인입니다')
elif age > 14:
print('청소년입니다')
elif age > 6:
print('어린이입니다')
elif age > 0:
print('유아입니다')
else:
print('입력을 확인하세요')
print('입력한 나이: ', age)
print("오늘 저녁 뭐 먹지?")
# 첫 번째 질문: 한식 vs 양식/일식
answer1 = input("Q1. 오늘 뜨끈한 밥이나 국물이 있는 '한식'이 당기시나요? (y/n): ")
if answer1.lower() == 'y':
# 한식으로 진행
print("[한식 메뉴 분석 중...]")
answer2 = input("Q2. 매콤하거나 얼큰한 음식을 좋아하시나요? (y/n): ")
if answer2.lower() == 'y':
# 한식 + 매운맛
answer3 = input("Q3. 고기가 들어간 음식을 원하시나요? (y/n): ")
if answer3.lower() == 'y':
print("추천 메뉴: 제육볶음이나 닭볶음탕을 드셔보세요!")
else:
print("추천 메뉴: 순두부찌개나 떡볶이를 추천합니다!")
else:
# 한식 + 안 매운맛
answer3 = input("Q3. 국물이 있는 요리를 원하시나요? (y/n): ")
if answer3.lower() == 'y':
print("추천 메뉴: 갈비탕이나 설렁탕을 추천합니다")
else:
print("추천 메뉴: 비빔밥이나 불고기를 드셔보세요!")
else:
# 한식 외(양식/일식/중식 등)로 진행
print("[한식 외 메뉴 분석 중...]")
answer2 = input("Q2. 면 요리(누들)를 좋아하시나요? (y/n): ")
if answer2.lower() == 'y':
# 외식 + 면 요리
answer3 = input("Q3. 국물이 있는 따뜻한 면을 원하시나요? (y/n): ")
if answer3.lower() == 'y':
print("추천 메뉴: 일본식 라멘이나 쌀국수를 추천합니다!")
else:
print("추천 메뉴: 크림 파스타나 짬뽕을 추천합니다!")
else:
# 외식 + 밥/빵/기타
answer3 = input("Q3. 오늘 탄수화물이 당기시나요? (y/n): ")
if answer3.lower() == 'y':
print("추천 메뉴: 피자나 수제버거는 어떠신가요?")
else:
print("추천 메뉴: 일식 돈카츠나 초밥을 드셔보세요!")
print("맛있게 드시고 행복한 저녁 보내세요!")
2. if 여러 개 쓰기 VS if ~ elif ~ else 쓰기
1. if ~ elif ~ else
score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
else:
print("F")
👉 조건을 위에서부터 검사하다가
👉 처음 True가 나오면 그 이후는 전부 무시
2. if를 여러 번 쓰는 경우
score = 85
if score >= 90:
print("A")
if score >= 80:
print("B")
if score >= 70:
print("C")
👉 각각 독립적으로 검사됨
👉 여러 개가 동시에 실행될 수 있음
3. 조건부 표현식(Conditional Expression)
조건부 표현식(Conditional Expression)은 조건의 참(True)과 거짓(False)에 따라 값을 선택하는 한 줄짜리 조건문으로, 간단한 분기 로직을 간결하게 표현할 때 유용하다. 다만 조건이 복잡하거나 여러 줄의 처리가 필요한 경우에는 일반적인 if문을 사용하는 것이 가독성 측면에서 더 적절하다.
조건이 참인 경우 값 if 조건 else 조건이 거짓인 경우 값
# if~else로 작성
num = int(input('숫자를 입력하세요: '))
if num % 2 == 0:
print('짝수')
else:
print('홀수')
# 조건부 표현식으로 작성
num = int(input('숫자를 입력하세요: '))
print('짝수') if num % 2 == 0 else print('홀수')
4. 구조적 패턴 매칭
Python 3.10 버전부터 도입된 도입된 구조적 패턴 매칭이다. match ~ case 구문은 "이 데이터의 '모양(구조)'과 '내용'이 내가 원하는 조건과 딱 맞아떨어지는가?를 검사한다고 생각하면 된다. Java/C의 switch-case와 비슷하지만 훨씬 더 강력한 기능을 가진다.
match 값:
case 패턴1:
실행할 코드1
case 패턴2:
실행할 코드2
case _: # _는 else와 비슷한 역할
기본 실행 코드 (default)
- 파이프(|)연산자로 묶기
# 1~5세는 유아, 6~12세는 초등학생 이런 식으로 특정 값들을 매칭
age = int(input("나이를 입력하세요: "))
match age:
case 1 | 2 | 3 | 4 | 5 | 6 | 7:
print("미취학 아동입니다. 보호자 동반 시 무료 입장 가능합니다. 👶")
case 8 | 9 | 10 | 11 | 12 | 13:
print("초등학생입니다. 어린이 요금이 적용됩니다. 🎒")
case 14 | 15 | 16 | 17 | 18 | 19:
print("청소년입니다. 청소년 요금이 적용됩니다. 🧑🎓")
case _:
# 위의 나이에 해당하지 않는 20세 이상 성인이나 기타 예외 처리
if age > 19:
print("성인입니다. 일반 요금이 적용됩니다. 🧑")
else:
print("잘못된 나이 입력입니다.")
- 시퀀스 패턴 과 매핑 패턴
# 예시 A: 딕셔너리 데이터 (매핑 패턴)
data = {"type": "login", "id": "python_user", "status": "success"}
# 예시 B: 3개짜리 리스트 데이터 (시퀀스 패턴)
# data = ["logout", "python_user", "2026-05-27"]
# 예시 C: 2개짜리 튜플 데이터 (시퀀스 패턴 - 다른 구조)
# data = ("error", "404_Not_Found")
match data:
# 1. 매핑 패턴: 딕셔너리이면서 특정 키들이 다 있는가?
case {"type": "login", "id": user_id, "status": login_status}:
print(f"🔑 로그인 알림 -> 아이디: {user_id}, 결과: {login_status}")
# 2. 시퀀스 패턴 (리스트): 방이 3개이고 첫 번째 값이 "logout"인가?
case ["logout", user_id, logout_time]:
print(f"🚪 로그아웃 알림 -> 아이디: {user_id}님이 {logout_time}에 로그아웃했습니다.")
# 3. 시퀀스 패턴 (튜플): 방이 2개이고 첫 번째 값이 "error"인가?
case ("error", error_message):
print(f"🚨 에러 발생 -> 내용: {error_message}")
# 4. 아무것도 매칭되지 않는 나머지 경우
case _:
print("알 수 없는 형태의 데이터 포맷입니다.")
# 예시 1: 딕셔너리로 들어온 주소 데이터
address_data = {"city": "서울시", "district": "강남구", "detail": "테헤란로"}
# 예시 2: 리스트로 들어온 주소 데이터
# address_data = ["경기도", "수원시", "영통구"]
# 예시 3: 한 줄 문자열로 들어온 주소 데이터
# address_data = "부산시 해운대구 우동"
match address_data:
# 1. 타입이 dict() 이면서 내부 구조가 일치할 때
case dict({"city": c, "district": d, "detail": det}):
print(f"🏠 [딕셔너리 분석] 배송지: {c} {d} (상세주소: {det})")
# 2. 타입이 list() 이면서 내부 구조가 일치할 때
case list([c, d, det]):
print(f"🚛 [리스트 분석] 배송지: {c} {d} {det}")
# 3. 타입이 str(문자열) 자체일 때 (구조 분해가 필요 없는 기본 타입)
case str() as full_address:
print(f"✉️ [문자열 분석] 배송지 구문 전체: {full_address}")
# 4. 아무것도 매칭되지 않는 예외 상황
case _:
print("❌ 지원하지 않는 주소 데이터 형식입니다.")'Python' 카테고리의 다른 글
| 이터러블(Iterable)과 이터레이터(Iterator) (0) | 2026.05.27 |
|---|---|
| 제어문 - 반복문 (0) | 2026.05.27 |
| 컬렉션 타입 (딕셔너리) (0) | 2026.05.26 |
| 컬렉션 타입 (세트) (0) | 2026.05.26 |
| 컬렉션 타입 (튜플) (0) | 2026.05.26 |