Применение базовых операций и математических функций в коде

Раздел: Основы Python -> Основы математики в Python

Математические выражения в 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.718281828459045
5.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'))  # True
0.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/4
11/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)   # False
4 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.5833333333333333333333333333
0.5833333333333333333333333333

Математические выражения в Python - comments

En
Python математические выражения (python)