Числа Python, преобразование типов и математика
Числа Python, преобразование типов и математика
В этой статье вы узнаете о различных числах, используемых в Python, о том, как преобразовать один тип данных в другой, и о математических операциях, поддерживаемых Python.
Числовой тип данных в Python
Python поддерживает целые числа, числа с плавающей запятой и комплексные числа. Они определяются как int
, float
и complex
классы в Python.
Целые числа и числа с плавающей запятой разделяются наличием или отсутствием десятичной точки. Например, 5 — это целое число, а 5,0 — число с плавающей запятой.
Комплексные числа записываются в виде x + yj
, где x — действительная часть и y мнимая часть.
Мы можем использовать type()
функция, чтобы узнать, к какому классу принадлежит переменная или значение, и isinstance()
функция, чтобы проверить, принадлежит ли он к определенному классу.
Давайте рассмотрим пример:
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
Хотя целые числа могут быть любой длины, число с плавающей запятой является точным только до 15 знаков после запятой (16-е место является неточным).
Числа, с которыми мы имеем дело каждый день, относятся к десятичной (с основанием 10) системе счисления. Но компьютерные программисты (как правило, встроенные программисты) должны работать с двоичной (с основанием 2), шестнадцатеричной (с основанием 16) и восьмеричной (с основанием 8) системами счисления.
В Python мы можем представить эти числа, поместив соответствующий префикс перед этим числом. В следующей таблице перечислены эти префиксы.
Система счисления | Префикс |
---|---|
Двоичный | '0b' или '0B' |
Восьмеричный | '0o' или '0O' |
Шестнадцатеричный | '0x' или '0X' |
Вот несколько примеров
# Output: 107
print(0b1101011)
# Output: 253 (251 + 2)
print(0xFB + 0b10)
# Output: 13
print(0o15)
Когда вы запустите программу, вывод будет:
107 253 13<час>
Преобразование типов
Мы можем преобразовать один тип числа в другой. Это также известно как принуждение.
Такие операции, как сложение и вычитание, неявно (автоматически) заставляют целое число плавать, если один из операндов является плавающим.
>>> 1 + 2.0
3.0
Выше мы видим, что 1 (целое) преобразуется в 1,0 (с плавающей запятой) для сложения, и результат также является числом с плавающей запятой.
Мы также можем использовать встроенные функции, такие как int()
. , float()
и complex()
для явного преобразования между типами. Эти функции могут даже преобразовывать строки.
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
При преобразовании из числа с плавающей запятой в целое число усекается (удаляются десятичные части).
<час>Десятичный Python
Встроенный в Python класс float выполняет некоторые вычисления, которые могут нас удивить. Все мы знаем, что сумма 1,1 и 2,2 равна 3,3, но Python с этим не согласен.
>>> (1.1 + 2.2) == 3.3
False
Что происходит?
Оказывается, числа с плавающей запятой реализованы в аппаратном обеспечении компьютера как двоичные дроби, поскольку компьютер понимает только двоичные числа (0 и 1). По этой причине большинство известных нам десятичных дробей не могут быть точно сохранены в нашем компьютере.
Возьмем пример. Мы не можем представить дробь 1/3 в виде десятичного числа. Это даст 0,33333333..., что бесконечно долго, и мы можем только приблизиться к нему.
Оказывается, десятичная дробь 0,1 даст бесконечно длинную двоичную дробь 0,000110011001100110011... и наш компьютер хранит только ее конечное число.
Это будет только приблизительно 0,1, но никогда не будет равным. Следовательно, это ограничение нашего компьютерного оборудования, а не ошибка в Python.
>>> 1.1 + 2.2
3.3000000000000003
Чтобы решить эту проблему, мы можем использовать десятичный модуль, который поставляется с Python. Хотя числа с плавающей запятой имеют точность до 15 знаков после запятой, точность десятичного модуля устанавливается пользователем.
Давайте посмотрим на разницу:
import decimal
print(0.1)
print(decimal.Decimal(0.1))
Вывод
0.1 0.1000000000000000055511151231257827021181583404541015625
Этот модуль используется, когда мы хотим выполнять десятичные вычисления, как мы учились в школе.
Он также сохраняет значимость. Мы знаем, что 25,50 кг более точны, чем 25,5 кг, поскольку в нем два значащих десятичных знака по сравнению с одним.
from decimal import Decimal as D
print(D('1.1') + D('2.2'))
print(D('1.2') * D('2.50'))
Вывод
3.3 3.000
Обратите внимание на конечные нули в приведенном выше примере.
Мы могли бы спросить, почему бы не реализовать Decimal
каждый раз вместо поплавка? Основная причина – эффективность. Операции с плавающей запятой должны выполняться быстрее, чем Decimal
операций.
Когда использовать Decimal вместо float?
Обычно мы используем Decimal в следующих случаях.
- Когда мы создаем финансовые приложения, которым требуется точное десятичное представление.
- Когда мы хотим контролировать требуемый уровень точности.
- Когда мы хотим реализовать понятие значащих десятичных разрядов.
Дроби Python
Python предоставляет операции с дробными числами через свой fractions
модуль.
У дроби есть числитель и знаменатель, оба из которых являются целыми числами. Этот модуль поддерживает арифметику рациональных чисел.
Мы можем создавать объекты Fraction различными способами. Давайте посмотрим на них.
import fractions
print(fractions.Fraction(1.5))
print(fractions.Fraction(5))
print(fractions.Fraction(1,3))
Вывод
3/2 5 1/3
При создании Fraction
от float
, мы можем получить некоторые необычные результаты. Это связано с несовершенным представлением двоичных чисел с плавающей запятой, как обсуждалось в предыдущем разделе.
К счастью, Fraction
позволяет нам также создавать экземпляры со строкой. Это предпочтительный вариант при использовании десятичных чисел.
import fractions
# As float
# Output: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1))
# As string
# Output: 11/10
print(fractions.Fraction('1.1'))
Вывод
2476979795053773/2251799813685248 11/10
Этот тип данных поддерживает все основные операции. Вот несколько примеров.
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 предлагает такие модули, как 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
Вот полный список функций и атрибутов, доступных в математическом модуле Python.
import random
print(random.randrange(10, 20))
x = ['a', 'b', 'c', 'd', 'e']
# Get random choice
print(random.choice(x))
# Shuffle x
random.shuffle(x)
# Print the shuffled x
print(x)
# Print random element
print(random.random())
Когда мы запускаем приведенную выше программу, мы получаем следующий вывод. (Значения могут отличаться из-за случайного поведения)
18 e ['c', 'e', 'd', 'b', 'a'] 0.5682821194654443
Вот полный список функций и атрибутов, доступных в модуле Python random.
Python
- Преобразование типов С#
- Ключевые слова и идентификаторы Python
- Оператор Python, отступы и комментарии
- Переменные Python, константы и литералы
- Преобразование типов Python и приведение типов
- Ввод, вывод и импорт Python
- Глобальные, локальные и нелокальные переменные Python
- Управление каталогами и файлами Python
- Ошибки Python и встроенные исключения
- Как получить текущую дату и время в Python?