Урок 2. Условия в Python

Операторы "and", "or" и " not"

Во втором уроке мы изучим условные конструкции в программировании, познакомимся с операторами and, or и not. Затем напишем программы, в которых применим эти знания. 

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

Пароль длиннее 8 символов И пароль короче 20 символов

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

def is_correct_password(password):

length = len(password)

return length > 8 and length < 20

print(is_correct_password('qwerty')) # => False

print(is_correct_password('qwerty1234'))# => True

print(is_correct_password('zxcvbnmasdfghjkqwertyui'))  # => False

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

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

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

import string

def has_special_chars(str):

# Проверяет содержание специальных символов в строке

 return any(ch for ch in str if ch in string.punctuation)

def is_strong_password(password):

length = len(password)

# Скобки задают приоритет. Понятно, что к чему относится.

return (length > 8 and length < 20) 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

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

Отрицание

Наряду с логическими операторами И и ИЛИ, часто используется операция «отрицание». Она меняет логическое значение на противоположное. В программировании отрицанию соответствует унарный оператор not:

not True   # False

not False  # True

Например, если есть функция, которая проверяет четность числа, то с помощью отрицания можно выполнить проверку нечетности:

def is_even(number):

return number % 2 ==

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))  # => False

Теперь вы знаете, что означают операторы И, ИЛИ и not. С их помощью вы сможете задавать составные условия из двух и более логических выражений.

Page updated

Google Sites

Report abuse