조건 조합과 논리 설계
조건을 “조합”해서 똑똑하게 만들기: 논리 연산자와 if의 진짜 맛
이전 글(4-1)에서 “문제 해결 흐름”을 잡는 느낌으로 갔잖아?
이번에는 그 흐름에서 판단(조건) 을 더 정교하게 만드는 파트야. 솔직히 말하면, 조건문이 단순하면 금방 끝나는데… 현실 프로그램은 거의 항상 “여러 조건 중에 뭘 만족해야 하냐”가 나오더라. 그래서 오늘은 조건 조합 + 논리 연산자를 딱 익혀볼 거야.
아! 그리고 나도 예전에 조건을 너무 복잡하게 걸어놨다가, “왜 결과가 다 똑같지?” 하고 한참 헤맨 적 있어. (유머러스하게 말하면… 내 코드가 아니라 내가 논리 회로를 틀어버린 거지 뭐 😅)
1) 조건 조합이 왜 필요할까?
예를 들어 이런 상황을 생각해보자.
- 나이로 입장 가능한지 판단한다
- 결제 상태가 확인되어야 한다
- 회원 등급이 특정 이상이어야 한다
이런 건 조건 하나만으로는 부족해. 보통 아래처럼 묶어야 해.
- “A이고 B도 맞으면 통과”
- “A는 맞고, B는 틀리면 통과”
- “A 또는 B면 통과”
즉, 조건도 AND / OR / NOT 같은 재료로 조립해야 함!
2) AND, OR, NOT: 논리 연산자의 3종 세트
자, 여기 핵심이야. (음… 사실 이거만 제대로 잡으면 조건문이 갑자기 쉬워져.)
✅ AND (and) : 둘 다 참이어야 함
- 조건 A가 참
- 조건 B도 참
둘 다 만족해야 최종 결과가 참이야.
예시로 생각해보자.
- “나이가 19 이상 그리고 결제가 완료일 때만 입장”
age_ok = age >= 19
paid_ok = paid == True
if age_ok and paid_ok:
print("입장 가능!")
else:
print("입장 불가!")
✅ OR (or) : 둘 중 하나만 참이면 됨
- 조건 A가 참이거나
- 조건 B가 참이면
둘 중 하나만 맞아도 통과.
예시:
- “학생이거나(학생증 보유) 아니면 직원이면 할인”
student = True
staff = False
if student or staff:
print("할인 가능!")
else:
print("할인 불가!")
✅ NOT (not) : 반대로 뒤집기
- 참이면 거짓
- 거짓이면 참
예시:
- “결제가 안 됐으면 결제 안내 메시지”
paid = False
if not paid:
print("결제를 먼저 해주세요!")
3) 조건 조합 실전: “길고 복잡한 if”를 정리하는 법
여기서 많은 사람들이 실수해.
나도 예전에 그냥 한 줄에 다 때려 넣다가… 결과가 이상하게 나와서 멘붕했거든. (아! 이거 내 예전 나한테 하는 말이기도 해 😂)
나쁜 예: 한 줄에 다 들어간 if
if age >= 19 and paid == True or grade == "VIP":
print("입장/혜택 가능")
이거… 얼핏 보면 맞는 것 같아 보이는데, 연산자 우선순위 때문에 생각한 것과 다르게 동작할 수 있어.
솔직히 말하면, “내 머릿속 우선순위랑 파이썬 우선순위가 같겠지”라고 믿는 순간… 사고 나더라.
좋은 예: 중간 변수를 만들어서 의미를 남기기
age_ok = age >= 19
paid_ok = paid == True
vip_ok = grade == "VIP"
if (age_ok and paid_ok) or vip_ok:
print("입장/혜택 가능")
else:
print("불가능")
이렇게 하면 “아! 이 조건은 뭐 때문에 참이 되는 거구나”가 한눈에 보여.
나름 이게 디버깅 시간 아끼는 지름길이더라.
4) 흔한 실수 2가지 (진짜 많이 나옴)
실수 1) = 와 == 헷갈리기
조건에서 비교는 ==인데, 대입은 =이야.
이거 한번 틀리면 오류나거나, 가끔 진짜 헷갈리는 상황이 나와.
- 비교:
age == 19 - 대입:
age = 19
실수 2) 괄호 없이 조건을 섞기
AND랑 OR 섞이면 괄호가 진짜 중요해져.
예를 들어 이런 의도였다고 해보자:
- “(A 그리고 B) 또는 C”
이때 괄호 없이 쓰면, 사람 머리 기준으로 읽히는 게 아니라 코드 기준으로 계산돼.
그래서 규칙:
- 복잡해지면 괄호로 의도 고정하기!
if (A and B) or C:
...
이게 제일 안전해.
5) 바로 써먹는 미니 예제: “할인 쿠폰 발급”
자, 그럼 짧게 실전 감각 만들어보자.
다음 조건을 만족하면 쿠폰을 준다고 가정할게.
- 회원 등급이 VIP 이거나
- 누적 구매액이 5만원 이상이고
- 이번 달에 구매하지 않았다
grade = "NORMAL"
total_spent = 60000
bought_this_month = False
vip_ok = (grade == "VIP")
spending_ok = (total_spent >= 50000)
not_bought_ok = (bought_this_month == False)
if vip_ok or (spending_ok and not_bought_ok):
print("쿠폰 발급!")
else:
print("쿠폰 없음.")
여기서 포인트는 딱 두 개야.
- VIP면 그냥 발급 (VIP는 다른 조건과 상관없이 통과)
- VIP가 아니면 “5만원 이상” + “이번 달 구매 안 함” 조합으로 판단
이게 바로 “조건 조합과 논리 설계”의 핵심 느낌!
6) 다음 4-3로 자연스럽게 넘어가기
음… 여기까지 하면 이제 “판단”은 꽤 그럴듯하게 만들 수 있어.
근데 프로그램은 보통 이렇게 끝나진 않잖아?
- 여러 사람을 반복해서 검사한다거나
- 여러 조건을 패턴처럼 계속 적용한다거나
- 같은 규칙을 데이터가 바뀔 때마다 적용해야 하거나
그래서 다음 단계(4-3)는 반복과 패턴 찾기로 이어져.
조건은 조립했고, 이제는 그 조립품을 여러 번 자동으로 굴리는 감각을 익히는 거지!
원하면, 내가 너랑 같이 예제 하나 더 만들어볼 수도 있어.
예를 들어 “게임 캐릭터 레벨 조건”, “시험 합격 조건”, “회원 등급별 혜택 조건” 같은 걸로 말이야.
다음 글(4-3)에서는 어떤 반복 패턴이 자주 나오는지, 그리고 조건이랑 같이 쓰면 왜 더 편해지는지 이어서 갈게!





