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()и примените отрицание.
Полезное
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
