Python: Отрицание
Наряду с логическими операторами И и ИЛИ, часто используется операция "отрицание". Она меняет логическое значение на противоположное. В Python отрицанию соответствует унарный оператор not (в других языках !):
not True # False
not False # TrueНапример, если есть функция, которая проверяет четность числа, то с помощью отрицания можно выполнить проверку нечетности:
def is_even(number: int) -> bool:
return number % 2 == 0
print(is_even(10)) # => True
print(not is_even(10)) # => FalseВ примере выше мы добавили not слева от вызова функции и получили обратное действие.
Отрицание позволяет выражать задуманные правила в коде без написания новых функций. Если написать not not is_even(10), то код сработает даже в таком случае:
print(not not is_even(10)) # => TrueВ логике двойное отрицание равносильно отсутствию отрицания:
not not True # True
not not False # False
print(not not is_even(10)) # => True
print(not not is_even(11)) # => Falsenot можно комбинировать с and и or. Среди логических операторов у него наивысший приоритет, поэтому он применяется первым:
not True or True # (not True) or True => False or True => True
not True and False # (not True) and False => False and False => FalseСкобки меняют порядок вычисления:
not (True or True) # not True => False
not (True and False) # not False => TrueПрактический пример — функция проверяет, может ли водитель сесть за руль: нужны права и трезвость:
def can_drive(has_license: bool, is_drunk: bool) -> bool:
return has_license and not is_drunk
print(can_drive(True, False)) # => True (есть права, трезвый)
print(can_drive(True, True)) # => False (есть права, но пьяный)
print(can_drive(False, False)) # => False (нет прав)Теперь вы знаете, что означают операторы И, ИЛИ и not. С их помощью вы сможете задавать составные условия из двух и более логических выражений.
Законы де Моргана
При работе со сложными логическими выражениями бывает нужно их инвертировать или переписать в эквивалентную форму, которую легче читать. Для этого существуют законы де Моргана - два правила, которые описывают, как отрицание распределяется по составному выражению:
not (A and B) == not A or not B
not (A or B) == not A and not BПервый закон: отрицание конъюнкции равно дизъюнкции отрицаний. Проверим:
not (True and False) # not False => True
not True or not False # False or True => TrueВторой закон: отрицание дизъюнкции равно конъюнкции отрицаний:
not (True or False) # not True => False
not True and not False # False and True => FalseНа практике законы де Моргана помогают упрощать условия. Например, вместо not (is_admin or is_moderator) можно написать not is_admin and not is_moderator — читается как "не администратор и не модератор".
Задание
В этом уроке вам нужно будет реализовать две функции is_palindrome() и is_not_palindrome(), принимающие строку на вход
-
Реализуйте функцию
is_palindrome(), которая определяет, является ли слово палиндромом или нет. Палиндром - это слово, которое читается одинаково в обоих направлениях. Слова в функцию могут быть переданы в любом регистре, поэтому сначала нужно привести слово к нижнему регистру:word.lower().is_palindrome('шалаш') # true is_palindrome('хекслет') # false is_palindrome('Довод') # true is_palindrome('Функция') # false -
Реализуйте функцию
is_not_palindrome(), которая проверяет что слово НЕ является палиндромом:is_not_palindrome('шалаш') # false is_not_palindrome('Ага') # false is_not_palindrome('хекслет') # trueДля этого, вызовите функцию
is_palindrome()внутриis_not_palindrome()и примените отрицание.
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import solution
def test1():
assert not solution.is_not_palindrome("wow")
assert solution.is_not_palindrome("hexlet")
assert not solution.is_not_palindrome("asdffdsa")
assert not solution.is_not_palindrome("Wow")
assert solution.is_not_palindrome("CodeBasics")Решение учителя откроется через:
20:00
