3.2.2 조건문 심화: 다중 조건과 중첩 if
1. 반복된 다중 조건문 if … elif … else
(웹툰 비유: 복도에 여러 개의 잠긴 문이 순서대로 늘어서 있습니다. 로봇이 85번 키를 들고 첫 번째 >= 90 문에 꽂아보지만 열리지 않습니다(False). 다음 문인 >= 80 문에 꽂자 철칵! 하고 위풍당당하게 문이 열립니다(True). 로봇은 뒤에 남은 >= 70 문 따위는 쳐다보지도 않고 열린 방 안으로 들어가 버립니다. 이것이 elif의 핵심 원리인 ‘순차적 숏서킷(Short-Circuit)’입니다.)
Python에서는 조건 판단이 3갈래 이상으로 나뉘는 경우 elif (else if의 줄임말) 구문을 사용합니다. 첫 조건부터 순차적으로 검사하며, 한 번이라도 참을 달성하면 하위 조건들은 쳐다보지도 않고 스킵(건너뜀)합니다.
point = 85
if 90 <= point:
print('A')
elif 80 <= point:
print('B')
elif 70 <= point:
print('C')
else:
print('F')
출력:
B
2. 논리 연산자(and, or, not)를 활용한 다중 조건문
여러 조건을 동시에 평가해야 할 때는 앞서 배운 논리 연산자를 사용합니다.
age = 25
has_ticket = True
# 두 조건을 모두 만족해야 입장 가능
if age >= 19 and has_ticket:
print("관람이 가능합니다.")
else:
print("입장할 수 없습니다.")
# 출력: 관람이 가능합니다.
3. 중첩 조건문 (Nested if)
(웹툰 비유: 로봇이 힘겹게 첫 번째 거대한 자물쇠 상자(성적 >= 80)를 열었는데, 그 안에 보물이 있는 게 아니라 또 다른 두 번째 자물쇠 상자(출석 == 100)가 들어있습니다! 로봇은 땀을 한 방울 흘리며 두 번째 열쇠까지 꽂아 넣고 나서야 비로소 진짜 황금 트로피(최종 합격)를 꺼냅니다. 퀘스트 안의 퀘스트, 이것이 바로 중첩 조건문입니다.)
if 블록 안에 또 다른 if 블록을 중첩시켜, 조건 판별을 2중 3중으로 단계적이고 깊숙하게 들어갈 수도 있습니다. 단, 너무 많은 중첩 조건문(If depth)은 코드를 오른쪽으로만 길게 만들고 가독성을 훼손하므로 적절히 분리하는 것이 좋습니다.
score = 85
attendance = 100
if score >= 80:
print("1차 평가: 성적 평가는 통과했습니다.")
# 1차 조건을 통과한 경우에만 내부 if문을 검사
if attendance == 100:
print("최종 합격: 장학금 지급 대상입니다!")
else:
print("최종 합격: 하지만 결석이 있어 장학금은 제외됩니다.")
else:
print("성적 미달로 불합격입니다.")
4. 파이썬의 암묵적인 참/거짓 (Truthy & Falsy)
파이썬에서는 굳이 세부적인 비교 연산자(==, >, <)를 쓰지 않아도 데이터 자체가 문맥에 따라 True나 False로 판별되는 암묵적인 논리 평가 특징이 있습니다. 데이터가 “비어 있느냐, 값이 없느냐”를 가장 파이썬답고 세련되게 검사하는 패턴입니다.
- Falsy 평가 (거짓 처리):
0,0.0,""(빈 문자열),[](빈 리스트),(),{},None,False - Truthy 평가 (참 처리): 위를 제외한, 값이 채워져 있는 모든 데이터
user_name = "" # 빈 문자열은 Falsy로 평가됨
items = [] # 빈 리스트도 Falsy로 평가됨
if user_name: # user_name이 비어있으면 조건은 False가 되어 else 블록으로 감
print(f"환영합니다, {user_name}님.")
else:
print("이름이 입력되지 않았습니다.")
# 리스트에 데이터가 있는지 없는지 직관적으로 확인
if not items:
print("장바구니가 비어 있습니다.")
5. 포함 여부를 검사하는 멤버십 연산자 (in, not in)
리스트, 튜플, 문자열 등 연속형 자료 안에 특정 값이 들어 있는지 확인할 때 in과 not in 연산자를 활용하면 매우 직관적인 조건 처리가 가능합니다.
allowed_users = ["Alice", "Bob", "Charlie"]
user = "David"
if user not in allowed_users:
print(f"경고: {user}는 허가되지 않은 사용자입니다.")
[실전 예제] 게임 체력(HP) 상태 경고 시스템
조건 판단이 여러 갈래로 나뉘는 if ~ elif ~ else 구문은 실제 로직을 분기하는 데 매우 흔하게 쓰입니다.
hp = 30
# 조건 1: 체력이 20 이하니?
if hp <= 20:
print("⚠️ 위험! 포션을 사용하세요!")
# 조건 2: 체력이 50 이하니?
elif hp <= 50:
print("주의! 체력을 관리하세요.")
# 그 외 모든 경우
else:
print("상태 양호. 전투를 계속합니다.")
[데이터 분석 심화] np.select() 조건 처리
Python 기본 제어문을 넘어 Pandas 등 대용량 데이터 전처리를 할 때, numpy.select()를 응용하면 중첩된 if else 없이 여러 조건을 깔끔하게 배열 단위로 변환할 수 있습니다.
import numpy as np
arr = np.array([1, -2, 3, -4, 0])
# 분기될 조건들의 리스트
conditions = [arr > 0, arr == 0, arr < 0]
# 조건에 매칭되어 반환될 값 리스트
choices = ["양수", "0", "음수"]
result = np.select(conditions, choices)
print(result) # ['양수' '음수' '양수' '음수' '0']
🎧 Vibe Coding
🗣️ 학생 프롬프트 (AI에게 이렇게 명령해 보세요): “파이썬에서 점수를 입력받아 A, B, C, D, F 학점을 매겨주는 간단한 성적 판별기 코드를 작성해줘. 단,
if,elif,else가 정확히 어떻게 분기되는지 옆에 자세한 주석을 달아주고, 내가 잘못된 값(음수나 100점 초과)을 넣었을 때 에러 메시지를 띄우는 중첩 if문 예외처리도 상세하게 추가해봐.”
코딩 영단어 학습 📝
elif: else if 의 줄임말. (두 번째, 세 번째 플랜B 조건들을 계속해서 다중으로 엮을 때 씁니다.)Nested: 중첩된, 포개어진. (러시아 마트료시카 인형처럼,if문 안에 또 다른if문이 겹겹이 쌓여있는 복잡한 심화 논리 구조를 부를 때 사용합니다.)