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

03.01.2022 0 Автор : Дмитрий Николаевич
Логические операторы

Что делать, когда есть несколько условий? В Python есть три логических оператора, которые позволяют создавать сложные условия:

  • and — логическое умножение;
  • or — логическое сложение;
  • not — логическое отрицание

Оператор and

Давайте представим, что мы написали программу для студентов от 15 лет, которые учатся, по крайней мере, на первом курсе. Доступ к ней тем, кто младше нужно запретить. Следующий код решает поставленную задачу:

age = int(input('Сколько Вам лет? '))
course = int(input('На каком курсе Вы учитесь? '))
if age >= 15 and course >= 1:
    print('Доступ разрешен.')
else:
    print('Доступ запрещен.')
Так мы объединили два условия при помощи оператора and. Оно означает, что в этом ветвлении блок кода выполняется только при выполнении обоих условий одновременно.
Оператор and может объединить произвольное количество условий:
age = int(input('Сколько Вам лет? '))
course = int(input('На каком курсе Вы учитесь? '))
city = input('В каком городе Вы живете? ')
if age >= 15 and grade >= 1 and city == 'Уфа':
    print('Доступ разрешен.')
else:
    print('Доступ запрещен.')
Здесь представлена таблица истинности для оператора and. В этой таблице перечислены выражения, соединенные оператором and. Также в этой таблице показаны все возможные комбинации True и False и приведены результаты значения выражений.
Для того чтобы выражение or было истиной, то требуется хотя бы одно условие оператора or было истинным. При этом не имеет значения, истиной или ложью является второе выражение

Логическое выражение X and Y истинно, если оба значения X и Y истинны.

Логическое выражение X or Y истинно, если хотя бы одно из значений X и Y истинно.

Мы можем использовать оба логических оператора одновременно:

age = int(input('Сколько Вам лет?: '))
course = int(input('На каком курсе Вы учитесь?: '))
city = input('В каком городе Вы живете?: ')
if age >= 15 and grade >= 1 and (city == 'Уфа' or city == 'Стерлитамак' )
    print('Доступ разрешен.')
else:
    print('Доступ запрещен.')

Данный код проверяет, что возраст студентов от пятнадцати лет и учатся они, по крайней мере, на первом курсе и живут в Уфе или Стерлитамаке.

Оператор not

Оператор not позволяет инвертировать (т. е. заменить на противоположный) результат логического выражения. Например, следующий код:
course = int(input('На каком курсе Вы учитесь?: '))
if not (course < 1):
    print('Доступ разрешен.')
else:
    print('Доступ запрещен.')

Полностью равен коду:

course = int(input('На каком курсе Вы учитесь?: '))
if course >= 1:
    print('Доступ разрешен.')
else:
    print('Доступ запрещен.')
В первом примере мы поместили выражение age < 12 в скобки для того, чтобы четко видно, что применяется оператор not к значению выражения age < 12, а не только к переменной age.
Здесь представлена таблица истинности для оператора not:

Приоритеты логических операторов

Логические операторы, подобно арифметическим операторам, имеют приоритет выполнения. Приоритет выполнения следующий:

  • В первую очередь выполняется логическое отрицание not;
  • Далее выполняется логическое умножение and;
  • Далее выполняется логическое сложение or.

Для явного указания порядка выполнения условных операторов используют скобки.

Комментарии Дмитрия Николаевича о данной теме

1. Частой ошибкой у тех, кто начал изучать Python, является путаница логических операторов and и or. Давайте рассмотрим два условия:

if y > 30 and y < 3000
if y > 30 or y < 3000

Верным является только первое условие. В нем проверяется что число y находится в диапазоне от 30 до 3000, другими словами, y ∈ (30; 3000). Второе условие проверяет, что число y или больше 30, или меньше 3000. Однако такому условию удовлетворяет любое число!

2. Другую частую ошибку видно в следующем примере кода:

if age >= 7 and <= 9

Запуск такого кода приведет к появлению ошибки во время выполнения программы. Необходимо явно записывать условия:

if age >= 7 and age <= 9

3. Следует не забывать, что в Python есть удобный способ для проверки принадлежности диапазону. Например, следующий код:

if age >= 7 and age <= 9

Полностью равен коду, показанному ниже:

if 7 <= age <= 9

Последний, конечно, предпочтительнее.

4. Оба оператора, and и or вычисляются по укороченной схеме.
Вот как это работает с оператором and: если условие слева от оператора and является ложным, то условие справа от него не проверяется, так как результат выражения будет гарантированно ложным и проверка оставшегося условия — пустая трата процессорного времени.
Подобным же образом работает оператор or. Если условие слева от оператора or истинное, то условие справа от него не проверяется. Действительно, результат будет гарантированно истинным и проверка оставшегося условия станет пустой тратой процессорного времени.

Задачи по теме "Логические операторы"

Задача 1. Напишите программу, которая определяет, является ли заданное натуральное число четырехзначным.


Задача 2. Напишите программу, которая проверяет различность всех четырех цифр натурального четырехзначного числа.

Задача 3. Напишите программу, которая определяет номер координатной четверти, не лежащей на осях координат, в которой она находится.

Пояснение к задачам.

Обратите внимание что никакие два из четырех условий не могут быть истинными одновременно.

Можно посмотреть хорошее объяснение темы «Условный оператор» и «Логические операции»

Если есть вопросы, то задавайте их в комментариях или заполнив форму обратной связи.