Применение базовых операций и математических функций в коде
Математические выражения в Python
Основной способ выполнения математических вычислений в Python - использование встроенных арифметических операторов: +, -, *, /, //, %, **. Они поддерживают целые числа (int), числа с плавающей точкой (float) и комплексные числа (complex). Приоритет операций соответствует стандартному математическому порядку: сначала возведение в степень, затем умножение и деление, потом сложение и вычитание. Скобки меняют приоритет.
# Примеры базовых операций
a = 10
b = 3
print(a + b) # 13
print(a - b) # 7
print(a * b) # 30
print(a / b) # 3.3333333333333335
print(a // b) # 3 (целочисленное деление)
print(a % b) # 1 (остаток от деления)
print(a ** b) # 1000 (10 в степени 3)Python математические выражения (математические выражения в python)
13 7 30 3.3333333333333335 3 1 1000
Обратите внимание на деление / : оно всегда возвращает float, даже если числа делятся нацело. Для целочисленного деления используется //. Оператор % полезен для определения чётности, работы с циклическими индексами.
Типичная ошибка: деление на ноль вызывает исключение ZeroDivisionError. Всегда проверяйте делитель.
# Ошибка деления на ноль
# print(10 / 0) # ZeroDivisionErrorПроблема точности float: числа с плавающей точкой могут накапливать погрешность из-за двоичного представления. Например:
print(0.1 + 0.2) # 0.30000000000000004Как вычислить квадратный корень, синус, логарифм?
Для расширенных математических операций импортируется модуль math. Он содержит функции: sqrt, sin, cos, tan, log, log10, exp, pi, e и другие.
import math
x = 25
print(math.sqrt(x)) # 5.0
print(math.sin(math.radians(30))) # 0.5 (синус 30 градусов)
print(math.log(100, 10)) # 2.0 (логарифм по основанию 10)
print(math.pi) # 3.141592653589793
print(math.e) # 2.7182818284590455.0 0.49999999999999994 2.0 3.141592653589793 2.718281828459045
Ошибка: передача отрицательного числа в sqrt вызывает ValueError. Используйте cmath для комплексных чисел.
Как избежать ошибок округления при работе с десятичными дробями?
Модуль decimal обеспечивает десятичную арифметику с контролируемой точностью. Подходит для финансовых расчётов.
from decimal import Decimal, getcontext
getcontext().prec = 4 # точность 4 знака
d1 = Decimal('0.1')
d2 = Decimal('0.2')
print(d1 + d2) # 0.3 точно
# Сравнение с float
print(0.1 + 0.2 == 0.3) # False
print(d1 + d2 == Decimal('0.3')) # True0.3 False True
Внимание: создавать Decimal нужно из строки, а не из float, иначе точность будет потеряна.
Как выполнить точные арифметические операции с дробями без потери точности?
Модуль fractions реализует рациональные числа в виде числителя и знаменателя.
from fractions import Fraction
f1 = Fraction(1, 3)
f2 = Fraction(2, 5)
print(f1 + f2) # 11/15
print(f1 * f2) # 2/15
print(Fraction('0.25')) # 1/411/15 2/15 1/4
Как получить модуль числа, возвести в степень с остатком?
Функции abs, pow, round, divmod встроены и не требуют импорта.
print(abs(-7)) # 7
print(pow(2, 10)) # 1024 (2^10)
print(pow(2, 10, 100)) # 24 (остаток от деления 2^10 на 100)
print(round(3.14159, 2)) # 3.14
print(divmod(17, 5)) # (3, 2) (частное и остаток)7 1024 24 3.14 (3, 2)
Как разделить числа нацело и получить остаток в одном шаге?
Операторы // и % часто используются вместе, например, для разбиения числа на цифры или проверки деления.
num = 1234
# Получение последней цифры и удаление её
last = num % 10
num = num // 10
print(last, num) # 4 123
# Проверка чётности
print(10 % 2 == 0) # True
print(7 % 2 == 0) # False4 123 True False
Как работать с мнимыми числами в Python?
Python поддерживает комплексные числа буквально: j используется для мнимой единицы.
c1 = 3 + 4j
c2 = 1 - 2j
print(c1 + c2) # (4+2j)
print(c1.real) # 3.0
print(c1.imag) # 4.0
print(abs(c1)) # 5.0 (модуль)(4+2j) 3.0 4.0 5.0
Дополнительные примеры
Пример 1: решение квадратного уравнения ax^2 + bx + c = 0 с вещественными и комплексными корнями.
import math
import cmath
def solve_quadratic(a, b, c):
if a == 0:
return "Уравнение не квадратное"
d = b**2 - 4*a*c
if d >= 0:
x1 = (-b + math.sqrt(d)) / (2*a)
x2 = (-b - math.sqrt(d)) / (2*a)
else:
x1 = (-b + cmath.sqrt(d)) / (2*a)
x2 = (-b - cmath.sqrt(d)) / (2*a)
return x1, x2
print(solve_quadratic(1, -3, 2)) # (2.0, 1.0)
print(solve_quadratic(1, 2, 5)) # ((-1+2j), (-1-2j))(2.0, 1.0) ((-1+2j), (-1-2j))
Пример 2: точное начисление сложных процентов с Decimal и округлением до копеек.
from decimal import Decimal, ROUND_HALF_UP
principal = Decimal('1000.00')
rate = Decimal('0.05') # 5%
years = 3
amount = principal * (1 + rate) ** years
amount = amount.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
print(f"Итоговая сумма: {amount}")Итоговая сумма: 1157.63
Пример 3: подсчёт статистических показателей списка (среднее, дисперсия) с использованием math.fsum для точного суммирования.
import math
data = [2.5, 3.1, 4.0, 5.2, 6.8]
n = len(data)
mean = math.fsum(data) / n
variance = math.fsum((x - mean)**2 for x in data) / n
std_dev = math.sqrt(variance)
print(f"Среднее: {mean}, стандартное отклонение: {std_dev}")Среднее: 4.32, стандартное отклонение: 1.479...
Пример 4: перевод рациональной дроби в десятичное представление с помощью Decimal.
from fractions import Fraction
from decimal import Decimal
frac = Fraction(7, 12)
decimal_value = Decimal(frac.numerator) / Decimal(frac.denominator)
print(decimal_value) # 0.58333333333333333333333333330.5833333333333333333333333333