Числовые операции в Python: арифметика и не только
Арифметические операторы для чисел в Python
В Python существует несколько операторов для выполнения арифметических операций с числовыми типами данных. Ниже рассмотрены основные операторы, их применение, альтернативные подходы и типичные ошибки.
Как выполнить базовые арифметические действия?
Операторы +, -, * используются для сложения, вычитания и умножения соответственно. Они работают с целыми (int) и дробными (float) числами.
a = 10
b = 3
print(a + b) # 13
print(a - b) # 7
print(a * b) # 30операторы чисел python (операторы для чисел в python)
Пояснение:
В приведенном примере переменныеa и b содержат целые числа. Результат каждой операции выводится на экран.
Для сложения последовательности чисел применяется функция sum(), для умножения - math.prod() из модуля math.
numbers = [10, 3, 5]
print(sum(numbers)) # 18
import math
print(math.prod(numbers)) # 150
Функция sum() принимает итерабельный объект (список, кортеж) и возвращает сумму его элементов. math.prod() - произведение элементов.
Типичная ошибка:
Попытка сложить число и строку приводит к ошибкеTypeError. Перед операцией необходимо преобразовать тип с помощью int() или float().
x = 10
y = '5'
# print(x + y) # TypeError
print(x + int(y)) # 15
Как получить точный результат деления?
Оператор / выполняет деление с плавающей точкой и всегда возвращает число с плавающей точкой (float).
a = 7
b = 2
result = a / b
print(result) # 3.5
Пояснение:
Даже если числа целые, результат будет дробным.Для получения целой части от деления используется оператор // (целочисленное деление). Он возвращает наибольшее целое число, не превышающее результат деления.
a = 7
b = 2
print(a // b) # 3
Для отрицательных чисел результат округляется вниз: -7 // 2 даст -4.
Типичная ошибка:
Деление на ноль вызываетZeroDivisionError. Перед делением стоит проверять делитель.
a = 5
b = 0
# print(a / b) # ZeroDivisionError
if b != 0:
print(a / b)
else:
print('Деление на ноль недопустимо')
Как получить целочисленный результат и остаток от деления?
Для одновременного получения целой части и остатка от деления применяется функция divmod(). Она возвращает кортеж из двух значений: (частное, остаток).
a = 17
b = 5
quotient, remainder = divmod(a, b)
print(quotient, remainder) # 3 2
Пояснение:
divmod(a, b) эквивалентна (a // b, a % b).
Отдельно можно использовать операторы // (целая часть) и % (остаток).
a = 17
b = 5
print(a // b) # 3
print(a % b) # 2
Остаток от деления часто применяется для проверки четности числа: a % 2 == 0 - число четное.
Типичная ошибка:
При использовании% с отрицательными делимым результат может быть отрицательным. В Python остаток берется со знаком делителя.
print(-17 % 5) # 3 (а не -2)
print(17 % -5) # -3
Следует учитывать эту особенность при написании кода, зависящего от знака.
Как возвести число в степень?
Оператор ** возводит левый операнд в степень правого.
base = 2
exp = 3
print(base ** exp) # 8
Пояснение:
Оператор работает с целыми и дробными показателями:2 ** 0.5 вернет квадратный корень.
Функция pow() выполняет ту же операцию, но позволяет указать третий аргумент для модульного возведения (возведение в степень по модулю).
print(pow(2, 3)) # 8
print(pow(2, 3, 5)) # 8 % 5 = 3
Модульное возведение используется в криптографии для эффективного вычисления больших степеней.
Типичная ошибка:
Возведение в очень большую степень может привести к огромному числу, что замедлит выполнение. Функцияpow() с модулем решает эту проблему.
Как совместить арифметическую операцию с присваиванием?
Комбинированные операторы (+=, -=, *=, /=, //=, %=, **=) изменяют значение переменной на месте.
x = 10
x += 5 # x = x + 5 -> 15
x *= 2 # 30
print(x) # 30
Пояснение:
Такой подход делает код более кратким и понятным. Оператор выполняет вычисление и присваивание за один шаг.Тот же результат можно получить без комбинированного оператора: x = x + 5.
x = 10
x = x + 5
print(x) # 15
Однако использование += предпочтительнее для читаемости.
Типичная ошибка:
Путаница с порядком операций:x += 2 * 3 эквивалентно x = x + (2*3), а не (x+2)*3.
Расширенные примеры использования числовых операторов
Рассмотрим более сложные сценарии, включая работу с отрицательными числами, большими целыми и комплексными числами.
Пример 1: Целочисленное деление и остаток с отрицательными числами
a = -7
b = 3
print(a // b) # -3
print(a % b) # 2
-3 2
Оператор // округляет результат вниз, поэтому -7 // 3 равно -3 (так как -2.333... округляется до -3). Остаток % подбирается так, чтобы выполнялось равенство (a // b)*b + (a % b) == a. В данном случае (-3)*3 + 2 = -7.
Пример 2: Использование pow с тремя аргументами для модульного возведения
base = 5
exp = 3
mod = 13
result = pow(base, exp, mod)
print(result) # 5^3 = 125, 125 % 13 = 8
8
Функция pow(base, exp, mod) вычисляет (base ** exp) % mod более эффективно, особенно при больших числах, так как не создает промежуточное огромное значение.
Пример 3: Комплексные числа и арифметика
c1 = 2 + 3j
c2 = 1 - 2j
print(c1 + c2) # (3+1j)
print(c1 * c2) # (8-1j)
print(abs(c1)) # sqrt(2^2+3^2) = 3.60555127546
(3+1j) (8-1j) 3.605551275463989
Комплексные числа поддерживают те же арифметические операторы. abs() возвращает модуль комплексного числа.
Пример 4: Приоритет операторов и скобки
print(2 + 3 * 4) # 14
print((2 + 3) * 4) # 20
14 20
Умножение имеет более высокий приоритет, чем сложение. Скобки изменяют порядок вычислений.
Пример 5: Работа с большими числами (int неограничен)
big = 10**100
print(big * 2) # 2*10^100
20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Целые числа в Python имеют произвольную точность, что позволяет выполнять арифметику с очень большими значениями без переполнения.
Пример 6: Округление и преобразование
a = 7.5
print(round(a)) # 8
print(int(a)) # 7 (отсечение дробной части)
print(abs(-5)) # 5
print(float(3)) # 3.0
8 7 5 3.0
round() округляет до ближайшего целого (банковское округление при .5), int() отбрасывает дробную часть, abs() возвращает абсолютное значение, float() преобразует целое в дробное.