논리 연산자 파트 4
Coddy Python 여정의 기초 섹션에 포함된 레슨. 77개 중 19번째.
logical expressions을 다룰 때는 때때로 이를 단순화하거나 재배열해야 합니다. 이는 여러 and 및 or 연산자를 결합하는 복잡한 conditions을 다룰 때 특히 유용합니다.
De Morgan's Laws는 logical expressions를 변환하기 위한 규칙을 제공합니다. 이러한 변환은 코드를 더 읽기 쉽고 이해하기 쉽게 만드는 데 도움이 됩니다.
First Law: not (A and B)은 (not A) or (not B)과 같습니다
표현식에 not을 분배하면 두 가지 일이 일어난다는 점에 주목하세요: 각 피연산자가 부정됩니다(A는 not A가 되고, B는 not B가 됩니다). 그리고 연산자가 뒤집힙니다: and는 or가 됩니다. not은 값만 부정하는 것이 아니라, 값 사이를 연결하는 연산자도 바꿉니다.
예를 들어:
# 숫자가 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) # TrueComplex 예제: Both AND 및 OR 사용: 때로는 두 연산자를 모두 결합하는 conditions가 필요합니다. 다음은 실용적인 예제입니다:
# 우리가 구직 지원을 수락할 수 없는지 확인하기
# 다음의 경우 거부합니다: (경험 없음 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 (경험 없음 AND 학위 없음 때문에 거부됨)# 이것은 De Morgan's Laws를 사용하여 작성할 수도 있습니다:
# 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 (같은 결과, 다른 논리)De Morgan's Laws를 사용하는 경우:
- 음의 conditions를 더 쉽게 읽기 위해
- 복잡한 logical expressions를 단순화하기 위해
- 동일한 logic의 different 표현 간에 변환하기 위해
챌린지
초급반려동물 가게에서 고객에게 pet을 판매할 수 있는지 판단하는 시스템을 만들도록 돕고 있습니다.
다음 변수를 Initialize하세요:
has_license에True값을 할당has_space에True값을 할당has_experience에False값을 할당
다음 여부를 판단하는 logical expressions을 작성하세요:
can_sell_regular_pet: 고객에게 license 또는 experience가 EITHER 하나라도 있고, AND space도 있는 경우 regular pet을 구매할 수 있습니다can_sell_exotic_pet: 고객에게 license와 experience가 BOTH 있고, AND space도 있는 경우 exotic pet을 구매할 수 있습니다cannot_sell_any_pet: 고객에게 license도 experience도 NO이고, OR space도 NO인 경우 가게는 어떤 pet도 판매할 수 없습니다
주어진 값에 따른 예상 결과:
can_sell_regular_pet:True(license와 space가 있음)can_sell_exotic_pet:False(experience가 없음)cannot_sell_any_pet:False(license와 space가 둘 다 있음)
직접 해보기
# 변수 초기화
# 조건 계산
# 아래의 각 플레이스홀더 값을 올바른 논리 표현식으로 바꾸세요
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)이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러