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

Когда мы запускаем указанную выше программу, мы получаем следующий результат:

 (8 + 3j) Верно

Хотя целые числа могут иметь любую длину, число с плавающей запятой является точным только до 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

Чтобы решить эту проблему, мы можем использовать модуль decimal, который поставляется с 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каждый раз вместо float? Основная причина - оперативность. Операции с плавающей запятой должны выполняться быстрее, чем Decimalоперации.

Когда использовать Decimal вместо float?

Обычно мы используем Decimal в следующих случаях.

  • Когда мы создаем финансовые приложения, которые нуждаются в точном десятичном представлении.
  • Когда мы хотим контролировать необходимый уровень точности.
  • Когда мы хотим реализовать понятие значащих десятичных знаков.

Фракции Python

Python предоставляет операции с дробными числами через свой fractionsмодуль.

У дроби есть числитель и знаменатель, оба целые числа. Этот модуль поддерживает арифметику рациональных чисел.

Мы можем создавать объекты Fraction различными способами. Посмотрим на них.

 import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3))

Output

 3/2 5 1/3

While creating Fraction from float, we might get some unusual results. This is due to the imperfect binary floating point number representation as discussed in the previous section.

Fortunately, Fraction allows us to instantiate with string as well. This is the preferred option when using decimal numbers.

 import fractions # As float # Output: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # As string # Output: 11/10 print(fractions.Fraction('1.1'))

Output

 2476979795053773/2251799813685248 11/10

This data type supports all basic operations. Here are a few examples.

 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)

Output

 2/3 6/5 False True

Python Mathematics

Python offers modules like math and random to carry out different mathematics like trigonometry, logarithms, probability and statistics, etc.

 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))

Output

 3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720

Here is the full list of functions and attributes available in the Python math module.

 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.

Интересные статьи...