Документация по Python. Теоретические материалы, и практические задачи

Числа в Python 3

Числа, преобразования типов чисел, и математика в 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 используется в следующих случаях:

  1. При разработке финансового приложения, в котором есть необходимость точных вычислений
  2. Когда в нашем приложений в целом требуется точность вычислений

Дроби в 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

 

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *