Логические операторы. Часть 4
Часть раздела Fundamentals путешествия по Python на Coddy. Урок 19 из 77.
При работе с логическими выражениями иногда нам требуется их упростить или перестроить. Это особенно полезно при работе со сложными условиями, сочетающими несколько операторов and и or.
Законы Де Моргана (De Morgan's Laws) предоставляют правила для преобразования логических выражений. Эти преобразования помогают сделать код более читаемым и простым для понимания.
First Law: 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Второй закон: not (A or B) — то же самое, что (not A) and (not B)
Здесь применяется то же правило из двух шагов: каждый операнд отрицается, а оператор меняется на противоположный — на этот раз 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 (отклонено, потому что нет опыта AND нет диплома)# Это также можно записать, используя законы де Моргана:
# 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 (тот же результат, другая логика)Когда использовать законы Де Моргана:
- Чтобы сделать отрицательные условия более простыми для чтения
- Чтобы упростить сложные логические выражения
- Чтобы конвертировать между различными представлениями одной и той же логики
Задание
НовичокВы помогаете зоомагазину создать систему, чтобы определить, можно ли продать питомца клиенту.
Инициализируйте следующие переменные:
has_licenseсо значениемTruehas_spaceсо значениемTruehas_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)В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Fundamentals
4Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение — простая логикаЛогические операторы. Часть 3Логические операторы. Часть 47Калькулятор разделения счета
Приветственное сообщениеПолучение данных13Списки: продвинутый уровень
Срезы списков. Часть 1Срезы списков. Часть 2Операторы последовательностейПроверка вхождения2Переменные
ЧислаСтрокиЛогический типПравила именованияПустые переменныеИтоги — Инициализация переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileОператор BreakОператор ContinueПовторение: ФакториалФункция RangeВложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыОператор остатка от деленияСокращенная арифметикаИтоги: простая математикаОператоры сравнения6Основы ввода-вывода
ВыводВывод с переменнымиВводПриведение типовПовторение — До 120Повторение — Истина или ложь9Функции
Объявление функцииАргументыВозврат значенияПовторение — функция SigmaПовторение — функция валидацииЗначения по умолчанию12Итерация по последовательностям
Итерация по элементамФункция enumerateИтерация по строкам. Часть 1Итерация по строкам. Часть 2Потренируйтесь самостоятельно: Онлайн-компилятор Python