Перейти к содержимому

Алгебра логики в питоне как записываются операции

  • автор:

Алгебра логики в питоне как записываются операции

Ряд операций представляют условные выражения. Все эти операции принимают два операнда и возвращают логическое значение, которое в Python представляет тип bool . Существует только два логических значения — True (выражение истинно) и False (выражение ложно).

Операции сравнения

Простейшие условные выражения представляют операции сравнения, которые сравнивают два значения. Python поддерживает следующие операции сравнения:

  • == Возвращает True, если оба операнда равны. Иначе возвращает False.
  • != Возвращает True, если оба операнда НЕ равны. Иначе возвращает False.
  • > (больше чем) Возвращает True, если первый операнд больше второго.
  • < (меньше чем) Возвращает True, если первый операнд меньше второго.
  • >= (больше или равно) Возвращает True, если первый операнд больше или равен второму.

Примеры операций сравнения:

a = 5 b = 6 result = 5 == 6 # сохраняем результат операции в переменную print(result) # False - 5 не равно 6 print(a != b) # True print(a > b) # False - 5 меньше 6 print(a < b) # True bool1 = True bool2 = False print(bool1 == bool2) # False - bool1 не равно bool2

Операции сравнения могут сравнивать различные объекты - строки, числа, логические значения, однако оба операнда операции должны представлять один и тот же тип.

Логические операции

Для создания составных условных выражений применяются логические операции. В Python имеются следующие логические операторы:

    Оператор and (логическое умножение) применяется к двум операндам:

x and y

Сначала оператор and оценивает выражение x, и если оно равно False, то возвращается его значение. Если оно равно True, то оценивается второй операнд - y и возвращается значение y.

age = 22 weight = 58 result = age > 21 and weight == 58 print(result) # True

В данном случае оператор and сравнивает результаты двух выражений: age > 21 weight == 58 . И если оба этих выражений возвращают True, то оператор and также возвращает True (формально возвращается значение последнего операнда). Но операндами оператора and необязательно выступают значения True и False. Это могут быть любые значения. Например:

result = 4 and "w" print(result) # w, так как 4 равно True, поэтому возвращается значение последнего операнда result = 0 and "w" print(result) # 0, так как 0 эквивалентно False
x or y

Сначала оператор or оценивает выражение x, и если оно равно True, то возвращается его значение. Если оно равно False, то оценивается второй операнд - y и возвращается значение y. Например

age = 22 isMarried = False result = age > 21 or isMarried print(result) # True, так как выражение age > 21 равно True

И также оператор or может применяться к любым значениям. Например:

result = 4 or "w" print(result) # 4, так как 4 эквивалентно True, поэтому возвращается значение первого операнда result = 0 or "w" print(result) # w, так как 0 эквивалентно False, поэтому возвращается значение последнего операнда
age = 22 isMarried = False print(not age > 21) # False print(not isMarried) # True print(not 4) # False print(not 0) # True

Оператор in

Оператор in возвращает True если в некотором наборе значений есть определенное значение. Он имеет следующую форму:

значение in набор_значений

Например, строка представляет набор символов. И с помощью оператора in мы можем проверить, есть ли в ней какая-нибудь подстрока:

message = "hello world!" hello = "hello" print(hello in message) # True - подстрока hello есть в строке "hello world!" gold = "gold" print(gold in message) # False - подстроки "gold" нет в строке "hello world!"

Если нам надо наоборот проверить, нет ли в наборе значений какого-либо значения, то мы може использовать модификацию оператора - not in . Она возвращает True , если в наборе значений НЕТ определенного значения:

message = "hello world!" hello = "hello" print(hello not in message) # False gold = "gold" print(gold not in message) # True

Алгебра логики в питоне как записываются операции

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Python: Логические операторы

Мы уже умеем писать функции, которые проверяют одиночные условия. А в этом уроке научимся строить составные условия.

Предположим, что сайт при регистрации требует, чтобы пароль был длиннее восьми символов и содержал хотя бы одну заглавную букву. Попробуем написать два отдельных логических выражения и соединим их специальным оператором «И»:

Пароль длиннее 8 символов И пароль содержит хотя бы одну заглавную букву

Вот функция, которая принимает пароль и говорит, соответствует ли он условиям ( True ) или не соответствует ( False ):

def has_capital_letter(string): # Проверяет наличие хотя бы одной заглавной буквы в строке def is_correct_password(password): length = len(password) return length > 8 and has_capital_letter(password) print(is_correct_password('Qwerty')) # => False print(is_correct_password('Qwerty1234')) # => True print(is_correct_password('qwerty1234')) # => False 

and — означает «И». В математической логике это называют конъюнкцией. Все выражение считается истинным, если истинен каждый операнд — каждое из составных выражений. Иными словами, and означает «и то, и другое». Приоритет этого оператора ниже, чем приоритет операторов сравнения. Поэтому выражение has_capital_letter(password) and length > 8 тоже правильно отрабатывает без скобок.

Кроме and часто используется оператор or — «ИЛИ» (дизъюнкция). Он означает «или то, или другое, или оба». Выражение a or b считается истинным, если хотя бы один из операндов или одновременно все — истинные. В другом случае выражение ложное.

Операторы можно комбинировать в любом количестве и любой последовательности. Если в коде одновременно встречаются and и or , то приоритет задают скобками. Ниже пример расширенной функции, которая определяет корректность пароля:

def has_capital_letter(string): # Проверяет наличие хотя бы одной заглавной буквы в строке def has_special_chars(string): # Проверяет содержание специальных символов в строке def is_strong_password(password): length = len(password) # Скобки задают приоритет. Понятно, что к чему относится. return (length > 8 and has_capital_letter(password)) and has_special_chars(password) 

Теперь представим, что мы хотим купить квартиру, которая удовлетворяет таким условиям: площадь от 100 квадратных метров и больше на любой улице ИЛИ площадь от 80 квадратных метров и больше, но на центральной улице Main Street .

Напишем функцию, которая проверит квартиру. Она принимает два аргумента: площадь — число и название улицы — строку:

def is_good_apartment(area, street): return area >= 100 or (area >= 80 and street == 'Main Street') print(is_good_apartment(91, 'Queens Street')) # => False print(is_good_apartment(78, 'Queens Street')) # => False print(is_good_apartment(70, 'Main Street')) # => False print(is_good_apartment(120, 'Queens Street')) # => True print(is_good_apartment(120, 'Main Street')) # => True print(is_good_apartment(80, 'Main Street')) # => True 

Область математики, в которой изучаются логические операторы, называется булевой алгеброй. Ниже увидите таблицы истинности — по ним можно определить, каким будет результат, если применить оператора:

И and
A B A and B
True True True
True False False
False True False
False False False
ИЛИ or
A B A or B
True True True
True False True
False True True
False False False

Задание

Реализуйте функцию is_leap_year() , которая принимает год в форме числа и определяет является ли он високосным или нет. Год будет високосным, если он кратен (то есть делится без остатка) 400 или он одновременно кратен 4 и не кратен 100. Как видите, в определении уже заложена вся необходимая логика, осталось только переложить её на код:

is_leap_year(2018) # false is_leap_year(2017) # false is_leap_year(2016) # true 

Кратность можно проверять так:

# % - возвращает остаток от деления левого операнда на правый # Проверяем что number кратен 10 number % 10 == 0 # Проверяем что number не кратен 10 number % 10 != 0 

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Полезное

  • Булева алгебра
  • Логическое «И»
  • Логическое «ИЛИ»

Определения

  • Логические операторы — операторы «И» ( and ), ИЛИ ( or ), позволяющие создавать составные логические условия.

Алгебра логики в питоне как записываются операции

В сегодняшнем уроке мы узнаем, что такое логические операторы и выражения. В математике и в программировании такие выражения и операторы еще называют булевы, или булевые (от английского Boolean – логический).

Без использования булевых выражений и операторов невозможно составить какую-либо хоть немного сложную программу на любом языке программирования, в том числе на Python 2.7.
На первый взгляд все логические выражения понять сложно, но попрактиковавшись 2-3 дня в их запоминании и применении на практике, вы вполне спокойно будете ими пользоваться в дальнейшем.

Итак, скажите мне, верно ли выражение:

5 > 2

Да, верно, скажете вы. Число 5 больше, чем число 2.

Так вот, знак > является логическим (булевым) оператором.

У всех логических выражений есть два значения – Верно или Ложно. Но чаще всего программисты говорят по-английски: Тру (True) или Фалс (False).

Итак, если мы в программе PowerShell запишем это выражение, то Python нам должен выдать значение: True

Откроем программу PowerShell, наберем в ней команду python, а затем введем наше выражение:

Должно получиться, как на изображении.

А если мы введем 5 < 2– что будет тогда? По идее, зная математику, это выражение должно иметь значение Ложно (False)!
В открытом окне PowerShell набираем наше выражение: 5 < 2
И видим, что Питон нам говорит: False

Вы заметили, что в первом случае я не делал пробелы между числами и знаком больше-меньше, а во втором случае - сделал. Никаких ошибок Питон мне не выдал, но читать удобнее код, когда есть пробелы между отдельными символами.

Мы рассмотрели самый простой вариант логического выражения и оператора. А сейчас я дам вам основные логические операторы (булевы операторы) и их значения, которые вы будете использовать в программировании на Python. Запомните их, запишите на листке бумаги и повторяйте в течение 2 дней.

Оператор not

not False - значение True (Верно)
not True - значение False (Ложно)

То есть оператор not дает противоположное значение: «не ложь – это правда».

Теперь запишем эти выражения в окне PowerShell и увидим результат.

Посмотрите на картинке, я первый раз набрал not false , то есть с маленькой буквы. В результате Питон мне выдал ошибку. Второй раз я набрал с большой буквы not False - ошибки нет. Результат: True

Кстати, попробуйте самостоятельно набрать Not False и посмотрите, что выдаст Питон.

Оператор or

True or False – значение True
True or True – значение True
False or True – значение True
False or False - значение False

Этот оператор говорит: Правда или Ложь? – Правда. Если в выражении «или» встречается хоть одно True – общее значение будет True.

Если оба False – значит False

А теперь наберем в окне PowerShell выражение:

5 > 2 or 5 < 2

Посмотрим на результат, он должен быть таким как на картинке:

Оператор and

True and False – значение False
True and True – значение True
False and True – значение False
False and False - значение False

То есть здесь мы видим все наоборот. Оператор and дает приоритет значению False. И только если оба значения True and True – итоговое значение тоже будет True.
Запишите в окне PowerShell выражение

5 > 2 and 5 < 2

и узнайте итоговое значение.

Оператор not or

not (True or False) – значение False
not (True or True) – значение False
not (False or True) – значение False
not (False or False) - значение True

Здесь все понятно: сначала делаем действие в скобках, а потом – за скобками. Получается оператор not будет переводить значение в скобках на противоположное.

Оператор not and

not (True and False) – значение True
not (True and True) – значение False
not (False and True) – значение True
not (False and False) - значение True

Здесь тоже все понятно: сначала делаем действие в скобках, а потом – за скобками.

Оператор != (не равно)

5 != 2 – значение True
5 != 5 – значение False

Здесь также все ясно: 5 не равно 2 – это Правда. А 5 не равно 5 – это Ложь.
Некоторые программисты иногда используют знак <> в значении «не равно». Но вам следует сразу привыкать к правильному написанию оператора: !=

Оператор == (равно)

5 == 2 – значение False
5 == 5 – значение True

И здесь все понятно: 5 равно 2 – это Ложь, а 5 равно 5 – Правда.

Оператор записывается как два подряд знака =

Внимание: не путайте с операцией присваивания переменной.

Например, запись:
peremen = 5 + 2 - это присваивание суммы 5 и 2 переменной peremen.

7 == 5 + 2 - это простое логическое выражение, в котором нам будет значение – верно или не верно. Посмотрите, как это будет выглядеть в PowerShell.

Сравнивать можно не только числа, но и слова.

Например, если вы введете в PowerShell выражение ‘lodka’ == ‘lodka’, то Питон вам выдаст значение True. А если ‘lodka’ == ‘notebook’ – будет значение False.

Домашнее задание

  1. Запомните основные логические операторы.
  2. Запишите по 2 примера для каждого выражения и каждого оператора – первый пример с числом, второй – с текстом.
  3. Наберите в PowerShell, а затем разберите по действиям следующее выражение:
5 != 2 and not (‘lodka’ != ‘notebook’ or ‘lodka’ == ‘lodka’ )

В следующем уроке мы на практике начнем применять логические выражения и писать программный код, где будут учитываться значения этих логических действий - перейти в урок 26.

  • Вы здесь:
  • Главная
  • Python 2.7 с нуля
  • Урок 25. Логические (булевы) выражения и операторы в Питоне

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *