Числа, преобразования типов чисел, и математика в Python
В блоке введение, мы с вами уже поверхностно рассматривали типы данных в Python. Как мы помним, Python поддерживает целые числа, числа с десятичными значениями, и комплексные числа. Каждый из них имеет свой класс, int, float, complex соответственно.
Различие этих классов в следующем. Целое число и число с десятичным значением отличаются наличием запятой, 5 — int, 5.0 — float. А комплексное, записывается x + yj где x действительная часть, а y мнимая его часть. В приведенном ниже примере, мы будем использовать функцию type(), что бы понять, к каком классу принадлежит переменная.
a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex)) Результат: <class 'int'> <class 'float'> (8+3j) True
Важно запомнить.в Python, целые числа могут быть любой длинны, но и в то же время числа с десятичными значениями ограничиваются 15 знаками после запятой.
Преобразование типов чисел
В Python мы можем преобразовать типы чисел. Допустим, при операциях сложения, вычитания, целое преобразуется в число с десятичным значением, если одним из операндов является float.
1 + 3.0 результат: 4.0 # как мы видим целое число превратилось в float
Так же для преобразования, мы можем использовать уже знакомые нам функции:
int(1.6) 1 # при преобразовании из float в int, число усекается до целого float(8) 8.0 complex('1+3j') 1+3j
Странная математика в Python. Python Decimal
Иногда математика в Python может вас удивить. Например, возьмем два float числа 1.1 и 2.2, по логике мы же понимаем, что результатом их сложения будет 3.3. Python с нами в этом плане не согласен.
(1.1 + 2.2) == 3.3 False
И так, мы видим что Python говорит нам, что вышеописанное равенство неверное. На самом деле, Python в этом не виноват, проблема в ограничениях нашего компьютера. Полный разбор этого момента, наверное заслуживает отдельной статьи, поэтому сейчас мы опустим этот момент, и сразу перейдем к тому, как обходить эту проблему.
Для обхода этой проблемы, у нас есть специальный модуль Python, который называется Decimal. Ниже рассмотрим то, как он работает.
from decimal import Decimal as D # Мы переименовали название модуля в D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50')) Результат: 3.3 3.000
Видите нули в конце? Использование данного модуля однозначно повышает точность вычислений. Естественно возникает логичный вопрос, а почему бы нам всегда его не использовать? Главная причина, это эффективность, обычные вариант вычислений выполнится быстрее чем Decimal операция.
В каких случаях использовать Decimal вместо float?
Обычно модуль Decimal используется в следующих случаях:
- При разработке финансового приложения, в котором есть необходимость точных вычислений
- Когда в нашем приложений в целом требуется точность вычислений
Дроби в Python
Математика в Python довольно хорошо реализована, и к примеру работа с дробями не вызывает каких либо сложностей. Для работы с дробями в Python есть отличный модуль fractions.
import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3)) Результат: 3/2 5 1/3
Данный модуль, нам так же позволяет легко работать и со строками.
print(fractions.Fraction('1.1')) Результат: 10/11
Давайте рассмотрим еще несколько примеров работы с данным модулем
from fractions import Fraction as F #Переименовываем модуль print(F(1, 3) + F(1, 3)) print(1 / F(5, 6)) print(F(-3, 10) > 0) print(F(-3, 10) < 0) Результат: 2/3 6/5 False True
Математика в Python
Вообще для математических вычислений Python довольно отлично реализован. Python предлагает нам модуль math, и random. С помощью этих модулей, мы можем работать с Тригонометрией, Логарифмами, Статистикой, Вероятностями.
import math print(math.pi) print(math.cos(math.pi)) print(math.exp(10)) print(math.log10(1000)) print(math.sinh(1)) print(math.factorial(6)) Результат: 3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720