Menu
CoddyTech

논리 연산자 파트 4

Coddy Python 여정의 기초 섹션에 포함된 레슨. 77개 중 19번째.

논리 표현식을 다룰 때는 이를 단순화하거나 재배열해야 할 때가 있습니다. 여러 and 및 or 연산자를 결합하는 복잡한 조건을 다룰 때 특히 유용합니다.

드모르간의 법칙은 논리 표현식을 변환하는 규칙을 제공합니다. 이러한 변환은 코드를 더 읽기 쉽고 이해하기 쉽게 만드는 데 도움이 됩니다.

제1법칙: not (A and B)는 (not A) or (not B)와 같습니다.

표현식에 not을 분배하면 두 가지 일이 일어납니다. 각 피연산자가 부정됩니다(A는 not A가 되고, B는 not B가 됩니다). 그리고 연산자가 바뀝니다: and는 or가 됩니다. not은 값만 부정하는 것이 아니라, 값 사이를 연결하는 연산자도 바꿉니다.

예를 들면:

# 숫자가 (1과 10 사이)에 있지 않은지 확인해 봅시다
number = 15
# 이 두 표현식은 동등합니다:
result1 = not (number >= 1 and number <= 10)
result2 = (not number >= 1) or (not number <= 10)
print(result1)  # True
print(result2)  # True

제2법칙: not (A or B)는 (not A) and (not B)와 같습니다.

여기에도 같은 2단계 규칙이 적용됩니다. 각 피연산자를 부정하고, 연산자는 뒤집힙니다. 이번에는 or가 and로 바뀝니다. 다음과 같이 생각해 보세요. not을 분배하면 각 부분을 부정하면서 항상 and ↔ or가 뒤집힙니다.

예를 들어:

# 어떤 사람이 (학생이거나 직장인인 경우)가 아닌지 확인하기
is_student = False
is_employed = False
# 이 두 표현식은 동등합니다:
result1 = not (is_student or is_employed)
result2 = (not is_student) and (not is_employed)
print(result1)  # True
print(result2)  # True

AND와 OR를 모두 사용하는 복잡한 예: 때로는 두 연산자를 모두 결합하는 조건이 필요합니다. 실용적인 예를 살펴보겠습니다.

# 입사 지원서를 접수할 수 없는지 확인
# 거절 조건: (경력이 없고 AND 학위도 없음) OR 연령 요건을 충족하지 않음
has_experience = False
has_degree = False
meets_age = True
# AND와 OR를 모두 사용하는 복합 조건
reject_application = (not has_experience and not has_degree) or not meets_age
print(reject_application)  # True (경력도 없고 학위도 없어 거절됨)
# 이는 드모르간의 법칙을 사용해 다음과 같이 쓸 수도 있습니다:
# accept = (experience OR degree) AND meets age; reject = not accept
accept_application = (has_experience or has_degree) and meets_age
reject_application2 = not accept_application
print(reject_application2)  # True (결과는 같지만 논리는 다름)

드모르간 법칙을 사용하는 경우:

  • 부정 조건을 더 쉽게 읽을 수 있도록 할 때
  • 복잡한 논리식을 단순화할 때
  • 같은 논리를 서로 다른 표현으로 변환할 때
challenge icon

챌린지

초급

반려동물 가게에서 고객에게 반려동물을 판매할 수 있는지 판단하는 시스템을 만들도록 돕고 있습니다.

다음 변수를 초기화하세요:

  • has_license의 값은 True
  • has_space의 값은 True
  • has_experience의 값은 False

다음 여부를 판단하는 논리식을 작성하세요:

  • can_sell_regular_pet: 고객이 면허 또는 경험 중 하나를 보유하고 있으며, 공간도 있어야 일반 반려동물을 구매할 수 있습니다.
  • can_sell_exotic_pet: 고객이 면허와 경험을 모두 보유하고 있으며, 공간도 있어야 이국적인 반려동물을 구매할 수 있습니다.
  • cannot_sell_any_pet: 고객에게 면허도 없고 경험도 없거나, 공간이 없으면 가게는 어떤 반려동물도 판매할 수 없습니다.

주어진 값에 대한 예상 결과:

  • can_sell_regular_pet: True (면허와 공간이 있음)
  • can_sell_exotic_pet: False (경험이 없음)
  • cannot_sell_any_pet: False (면허와 공간이 모두 있음)

직접 해보기

# 변수를 초기화하세요

# 조건을 계산하세요
# 아래의 각 임시 값을 올바른 논리식으로 바꾸세요
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False

# 아래 줄을 삭제하지 마세요
print("Can sell regular pet:", can_sell_regular_pet)
print("Can sell exotic pet:", can_sell_exotic_pet)
print("Cannot sell any pet:", cannot_sell_any_pet)
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러