Выражения в Python: арифметика и логика

Раздел: Основы Python -> Выражения и присваивание

Два выражения языка Python

Выражение в Python - это конструкция, которая после вычисления даёт значение. В основе языка лежат два больших класса: арифметические и логические выражения. Они используются в присваиваниях, условиях, циклах и других инструкциях. Понимание их особенностей помогает избежать ошибок.

Арифметические выражения

Арифметическое выражение строится из чисел, переменных и операторов: +, -, *, /, //, %, **. Результатом всегда является число.

# Пример базового арифметического выражения
x = 10 + 5 * 2   # умножение выполняется первым
print(x)         # 20

2 выражения языка 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 -> True
False
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)  # True
True
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)  # 4
True
5
4

Два выражения языка Python - comments

En
2 выражения языка python (python)