조건 조합과 논리 설계

in #krsuccess8 days ago

조건을 “조합”해서 똑똑하게 만들기: 논리 연산자와 if의 진짜 맛

이전 글(4-1)에서 “문제 해결 흐름”을 잡는 느낌으로 갔잖아?
이번에는 그 흐름에서 판단(조건) 을 더 정교하게 만드는 파트야. 솔직히 말하면, 조건문이 단순하면 금방 끝나는데… 현실 프로그램은 거의 항상 “여러 조건 중에 뭘 만족해야 하냐”가 나오더라. 그래서 오늘은 조건 조합 + 논리 연산자를 딱 익혀볼 거야.

아! 그리고 나도 예전에 조건을 너무 복잡하게 걸어놨다가, “왜 결과가 다 똑같지?” 하고 한참 헤맨 적 있어. (유머러스하게 말하면… 내 코드가 아니라 내가 논리 회로를 틀어버린 거지 뭐 😅)

jwvein


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("입장 불가!")

Van3ssa_


✅ OR (or) : 둘 중 하나만 참이면 됨

  • 조건 A가 참이거나
  • 조건 B가 참이면

둘 중 하나만 맞아도 통과.

예시:

  • “학생이거나(학생증 보유) 아니면 직원이면 할인”
student = True
staff = False

if student or staff:
    print("할인 가능!")
else:
    print("할인 불가!")

✅ NOT (not) : 반대로 뒤집기

  • 참이면 거짓
  • 거짓이면 참

예시:

  • “결제가 됐으면 결제 안내 메시지”
paid = False

if not paid:
    print("결제를 먼저 해주세요!")

Simon


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

Pexels


실수 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만원 이상” + “이번 달 구매 안 함” 조합으로 판단

이게 바로 “조건 조합과 논리 설계”의 핵심 느낌!

StartupStockPhotos


6) 다음 4-3로 자연스럽게 넘어가기

음… 여기까지 하면 이제 “판단”은 꽤 그럴듯하게 만들 수 있어.
근데 프로그램은 보통 이렇게 끝나진 않잖아?

  • 여러 사람을 반복해서 검사한다거나
  • 여러 조건을 패턴처럼 계속 적용한다거나
  • 같은 규칙을 데이터가 바뀔 때마다 적용해야 하거나

그래서 다음 단계(4-3)는 반복과 패턴 찾기로 이어져.
조건은 조립했고, 이제는 그 조립품을 여러 번 자동으로 굴리는 감각을 익히는 거지!


원하면, 내가 너랑 같이 예제 하나 더 만들어볼 수도 있어.
예를 들어 “게임 캐릭터 레벨 조건”, “시험 합격 조건”, “회원 등급별 혜택 조건” 같은 걸로 말이야.

다음 글(4-3)에서는 어떤 반복 패턴이 자주 나오는지, 그리고 조건이랑 같이 쓰면 왜 더 편해지는지 이어서 갈게!