
Шаг 2. decimal, fractions, complex
Баллов за прохождение: 1
decimal, fractions, complex
На этом уроке мы рассмотрим модули decimal и fratcions, а так же функцию complex для работы с числами
Модуль decimal
При работе с числами с плавающей точкой мы сталкиваемся с проблемой: интерпретатор неверно подсчитывает результат:
float_sum = 0.3 + 0.3 + 0.3
print(float_sum) # 0.8999999999999999
В программах, где все зависит от точности вычислений, данная проблема может сильно вам помешать. К счастью, мы можем это исправить благодаря встроенному в Python модулю decimal.
Для того, чтобы начать работать с числами с помощью данного модуля, нужно использовать класс Decimal. Создадим объект класса и передадим в него строковое значение, представляющее число:
from decimal import Decimal
num = Decimal('0.3')
num = num + num + num
print(num) # 0.9
Теперь Python верно подсчитал результат сложения наших чисел.
Мы можем использовать целые числа в операциях с Decimal, но не можем смешивать числа Decimal с float:
from decimal import Decimal
num = Decimal('0.3')
num = num + 2
print(num) # 2.3
num = Decimal('0.3')
num = num + 0.3
print(num) # Ошибка
Модуль fractions
Модуль fractions позволяет нам работать с рациональными числами с помощью класса Fraction. Для создания экземпляра класса мы можем использовать пару чисел(числитель и знаменатель соответственно), числа с плавающей точкой, числа Decimal, строку, представляющей собой число и другое рациональное число.
Мы так же можем производить математические операции с рациональными числами
from fractions import Fraction
a = Fraction(1, 2)
b = Fraction(3, 4)
print(a + b) # 5/4
print(a - b) # -1/4
print(a * b) # 3/8
print(a / b) # 2/3
print(a // b) # 0
print(a % b) # 1/2
Для того, чтобы найти ближайшее рациональное число со знаменателем не больше данного, используем метод Fraction.limit_denominator
from fractions import Fraction
a = Fraction(23.456)
print(a.limit_denominator()) # 2932/125
Функция complex
Функция complex позволяет создать комплексное число из целого числа и строки.
Она имеет два параметра:
Real - действительная часть, если данный параметр не передается, то он равен нулю
Imag - Мнимая часть, если параметр не передается, то он так же равен нулю
Строка, которая передается методу complex() должна иметь вид real + imagj или real + imagJ
a = complex(2, -7)
print(a) # (2-7j)
b = complex('2+3j')
print(b) # (2+3j)