Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Числа 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

  1. Преобразование типов С#
  2. Ключевые слова и идентификаторы Python
  3. Оператор Python, отступы и комментарии
  4. Переменные Python, константы и литералы
  5. Преобразование типов Python и приведение типов
  6. Ввод, вывод и импорт Python
  7. Глобальные, локальные и нелокальные переменные Python
  8. Управление каталогами и файлами Python
  9. Ошибки Python и встроенные исключения
  10. Как получить текущую дату и время в Python?