Выражения в Python: арифметика и логика
Два выражения языка Python
Выражение в Python - это конструкция, которая после вычисления даёт значение. В основе языка лежат два больших класса: арифметические и логические выражения. Они используются в присваиваниях, условиях, циклах и других инструкциях. Понимание их особенностей помогает избежать ошибок.
Арифметические выражения
Арифметическое выражение строится из чисел, переменных и операторов: +, -, *, /, //, %, **. Результатом всегда является число.
# Пример базового арифметического выражения
x = 10 + 5 * 2 # умножение выполняется первым
print(x) # 202 выражения языка python (два выражения языка python)
20
Порядок операций соответствует математическим правилам: сначала возведение в степень (**), потом умножение и деление, затем сложение и вычитание. Скобки меняют порядок.
y = (10 + 5) * 2
print(y) # 30Как избежать ошибки при делении на целое число?
В Python 3 деление / всегда возвращает число с плавающей точкой. Если нужен целый результат, используется // (целочисленное деление). Ошибка: забыть про преобразование типов - деление на ноль вызывает исключение ZeroDivisionError.
# Ошибка: деление на ноль
# a = 10 / 0 # ZeroDivisionError
# Корректно: проверка перед делением
divisor = 0
if divisor != 0:
result = 100 / divisor
else:
result = None
print(result) # NoneЛогические выражения
Как проверить условие и получить булево значение?
Логические выражения используют операторы сравнения (==, !=, <, >, <=, >=) и логические операторы (and, or, not). Результат - True или False.
age = 25
is_adult = age >= 18
print(is_adult) # True
# Составное условие
if age >= 18 and age <= 60:
print("Трудоспособный возраст")True Трудоспособный возраст
Почему не срабатывает сравнение с несколькими значениями через or?
Новички часто пишут if x == 5 or 6. Но Python интерпретирует это как (x == 5) or (6), а 6 - истинное значение. Правильно: if x == 5 or x == 6. Это и есть типичная логическая ошибка.
x = 7
# Неверно
if x == 5 or 6:
print("Верно") # выведет, потому что 6 - истина
# Верно
if x == 5 or x == 6:
print("Найдено")
else:
print("Нет")Верно Нет
Короткое замыкание
Логические операторы and и or вычисляются по короткой схеме: если результат уже ясен, дальнейшие части не проверяются. Это используется для условного выполнения.
# or: если первое True, второе не вычисляется
def risky_function():
print("Вызов функции")
return True
result = True or risky_function() # risky_function не вызовется
print(result)True
Расширенные примеры выражений
Смешанные арифметические и логические выражения
Логическое выражение может содержать арифметические операции. Важно помнить приоритет: арифметика выполняется раньше сравнения.
# Проверка на чётность: (x % 2 == 0) - логическое выражение
x = 7
is_even = (x % 2 == 0) # False
print(is_even)
# Приоритет: сначала умножение, потом сравнение
cond = x * 2 > 10
print(cond) # 7*2=14 > 10 -> TrueFalse True
Тернарное выражение (условный оператор в одну строку)
Тернарное выражение - это аналог if-else, возвращающий значение. Запись: значение_если_True if условие else значение_если_False.
age = 20
status = "Взрослый" if age >= 18 else "Ребёнок"
print(status) # Взрослый
# Можно вкладывать, но лучше не злоупотреблять
mark = 75
grade = "Отлично" if mark >= 85 else "Хорошо" if mark >= 70 else "Удовлетворительно"
print(grade) # ХорошоВзрослый Хорошо
Цепочки сравнений
Python допускает запись a < b < c, что эквивалентно a < b and b < c. Это повышает читаемость.
x = 5
if 0 < x < 10:
print("x в диапазоне (0,10)") # выведет
# Эквивалентная запись
if x > 0 and x < 10:
print("то же самое")x в диапазоне (0,10) то же самое
Выражения с плавающей точкой и точность
Из-за двоичного представления числа с плавающей точкой могут давать неожиданные результаты. Сравнение на равенство == для чисел с плавающей точкой - опасная практика.
result = 0.1 + 0.2
print(result) # 0.30000000000000004
print(result == 0.3) # False
# Решение: сравнивать с погрешностью
epsilon = 1e-9
if abs(result - 0.3) < epsilon:
print("Практически равно")0.30000000000000004 False Практически равно
Использование короткого замыкания для проверки
Короткое замыкание может предотвратить ошибки при обращении к атрибуту или индексу.
lst = [1, 2, 3]
# Если первый операнд False, второй не вычисляется - не будет IndexError
if len(lst) > 2 and lst[2] == 3:
print("Третий элемент равен 3")
# Альтернатива с or: выбрать значение по умолчанию
value = lst[3] if len(lst) > 3 else None
print(value) # NoneТретий элемент равен 3 None
Выражения с оператором `in`
Оператор in проверяет вхождение элемента в коллекцию. Это тоже логическое выражение.
fruits = ["яблоко", "банан", "апельсин"]
has_banana = "банан" in fruits
print(has_banana) # True
# Для строк - поиск подстроки
text = "Python programming"
has_python = "Python" in text
print(has_python) # TrueTrue True
Деление по модулю и его применение
Оператор % возвращает остаток от деления. Часто используется для проверки чётности.
number = 11
is_odd = number % 2 == 1
print(is_odd) # True
# Циклический счёт: например, смена дня недели
day = 4
next_day = (day + 1) % 7 # 5 (пятница)
print(next_day)
# Альтернативное использование: выделение последней цифры
num = 1234
last_digit = num % 10
print(last_digit) # 4True 5 4