Menu
Coddy logo textTech

논리 연산자 파트 4

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

논리식을 다룰 때, 때때로 이를 단순화하거나 재배열해야 할 필요가 있습니다. 이는 여러 개의 andor 연산자가 결합된 복잡한 조건을 처리할 때 특히 유용합니다.

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

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

not을 표현식에 분배할 때 두 가지 일이 일어나는 것을 주목하세요: 각 피연산자가 부정되고 (A는 not A가 되고, B는 not B가 됩니다), 그리고 연산자가 뒤집힙니다andor가 됩니다. 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단계 규칙이 적용됩니다: 각 피연산자가 부정되고, 연산자가 뒤집힙니다 — 이번에는 orand가 됩니다. 이렇게 생각하세요: not을 분배하면 각 부분을 부정하면서 항상 andor가 뒤집힙니다.

예를 들어:

# 어떤 사람이 (학생이거나 고용된 상태)가 아닌지 확인
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_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: 고객이 면허(license) 또는 경험(experience) 중 하나라도 있고, 공간(space)이 반드시 있는 경우 일반 애완동물을 구매할 수 있습니다.
  • can_sell_exotic_pet: 고객이 면허(license)와 경험(experience)을 모두 갖추고 있고, 공간(space)이 반드시 있는 경우 희귀 애완동물을 구매할 수 있습니다.
  • cannot_sell_any_pet: 고객이 면허(license)도 없고 경험(experience)도 없는 경우, 또는 공간(space)이 없는 경우 가게는 어떤 애완동물도 판매할 수 없습니다.

주어진 값에 따른 예상 결과:

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

치트 시트

드 모르간의 법칙 (De Morgan's Laws) — 논리식을 변환하는 규칙:

  • not (A and B)(not A) or (not B)
  • not (A or B)(not A) and (not B)

not을 분배할 때: 각 피연산자는 부정되고 연산자는 반전됩니다 (andor).

# 첫 번째 법칙 예시
result = not (number >= 1 and number <= 10)
result = (not number >= 1) or (not number <= 10)  # 동일함

# 두 번째 법칙 예시
result = not (is_student or is_employed)
result = (not is_student) and (not is_employed)  # 동일함

직접 해보기

# 변수 초기화

# 조건 계산
can_sell_regular_pet = 
can_sell_exotic_pet = 
cannot_sell_any_pet =

# 아래 줄을 삭제하지 마세요
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실력 점검

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

Fundamentals의 모든 레슨