English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете о различных числах, используемых в Python, как преобразовать один тип данных в другой, а также о поддерживаемых Python математических операциях.
Python поддерживает целые числа, плавающие числа и комплексные числа. Они определены как int, float и complex в типах данных Python.
Целые и плавающие числа разделены или не разделены точкой с запятой. 5 является целым числом, а 5.0 — плавающей точкой.
Комpleksные числа пишутся в виде x + yj, гдеxЭто действительная часть,yЭто мнимая часть.
Мы можем использовать функцию type() для определения типа переменной или значения, и функцию isinstance() для проверки, принадлежит ли оно к определенному типу.
a = 5 # Вывод: <class 'int'> print(type(a)) # Вывод: <class 'float'> print(type(5.0)) # Вывод: (8+3j) c = 5 + 3j print(c + 3) # Вывод: True print(isinstance(c, complex))
Хотя целые числа могут быть любого размера, но плавающие числа могут быть точными только до 15 знаков после запятой (16-й знак不准确).
Мы обрабатываем числа каждый день в десятичной системе счисления (с основанием 10). Но программисты компьютеров (обычно嵌入式 программисты) должны использовать системы счисления двоичной (основание 2), шестнадцатеричной (основание 16) и восьмеричной (основание 8).
В Python мы можем указать эти числа, добавляя префикс перед ними. В таблице ниже приведены эти префиксы.
Система счисления | Префикс |
---|---|
Бинарная | '0b' или '0B' |
Октальная | '0o' или '0O' |
Шестнадцатеричная | '0x' или '0X' |
Здесь есть несколько примеров
# Вывод: 107 print(0b1101011) # Вывод: 253 (251 + 2) print(0xFB + 0b10) # Вывод: 13 print(0o15)
При выполнении программы вывод будет следующим:
107 253 13
Мы можем преобразовать одно числовое значение в другое. Это также называется принудительным преобразованием.
Если одним из операндов является плавающая точка, то операции, такие как сложение, вычитание и т.д., будут принудительно выполнять явное (автоматическое) преобразование целого в плавающую точку.
>>> 1 + 2.0 3.0
Мы можем преобразовать одно числовое значение в другое. Это также называется принудительным преобразованием.
Мы также можем использовать内置енные функции int(), float() и complex() для явного преобразования типов. Эти функции могут даже преобразовывать изСтрокаПреобразование.
>>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)
При преобразовании из float в integer число будет отрезано (близкое к нулю целое).
Внутренний класс float Python выполняет некоторые вычисления, которые могут нас удивить. Мы все знаем, что 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 # Вывод: 0.1 print(0.1) # Вывод: Decimal('0.1000000000000000055511151231257827021181583404541015625') print(decimal.Decimal(0.1))
Когда мы хотим выполнять десятичные вычисления, как в школе, мы используем этот модуль.
Он также сохраняет значение. Мы знаем, что 25.50 кг точнее, чем 25.5 кг, потому что у него два знака после запятой, а не один.
from decimal import Decimal as D # Вывод: Decimal('3.3') print(D('1.1') + D('2.2')) # Вывод: Decimal('3.000') print(D('1.2') * D('2.50'))
Обратите внимание на trailing zeros в предыдущем примере.
Мы можем спросить, почему не использовать Decimal вместо float каждый раз? Основная причина - это эффективность. Выполнение операций с плавающей запятой должно быть быстрее, чем операции с десятичными.
В следующих случаях мы обычно используем десятичные.
Когда мы выполняем финансовые приложения, требующие точного десятичного представления
Когда мы хотим определить уровень точности
Когда мы хотим реализовать концепцию значащего числа
Когда мы хотим выполнять операции, как в школе
Python предоставляет операции с десятичными дробями через модуль fractions.
Десятичные дроби имеют числитель и знаменатель, которые оба являются целыми числами. Этот модуль поддерживает алгоритмы рациональных чисел.
Мы можем создавать объекты Fraction несколькими способами.
import fractions # Вывод: 3/2 print(fractions.Fraction(1.5)) # Вывод: 5 print(fractions.Fraction(5)) # Вывод: 1/3 print(fractions.Fraction(1,3))
При создании дробей из float мы можем получить некоторые необычные результаты. Это связано с несовершенной репрезентацией двоичных чисел с плавающей запятой, обсужденной в предыдущем разделе.
К счастью, десятичные дроби также позволяют использовать строковые примеры. Это предпочтительный вариант при использовании десятичных чисел.
import fractions # В качестве числа с плавающей запятой # Вывод: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # В качестве строки # Вывод: 11/10 print(fractions.Fraction('1.1'))
Этот тип данных поддерживает все основные операции. Вот несколько примеров.
from fractions import Fraction as F # Вывод: 2/3 print(F(1, 3) + F(1, 3)) # Вывод: 6/5 print(1 / F(5, 6)) # Вывод: False print(F(-3, 10) > 0) # Вывод: True print(F(-3, 10) < 0)
Python предоставляет аналогичные модули, такие как math и random, которые могут выполнять различные математические операции, такие как тригонометрические функции, логарифмы, вероятность и статистика и т.д.
import math # Вывод: 3.141592653589793 print(math.pi) # Вывод: -1.0 print(math.cos(math.pi)) # Вывод: 22026.465794806718 print(math.exp(10)) # Вывод: 3.0 print(math.log10(1000)) # Вывод: 1.1752011936438014 print(math.sinh(1)) # Вывод: 720 print(math.factorial(6))
ЭтоВ модуле math PythonПолный список функций и свойств, доступных.
import random # Вывод: 16 print(random.randrange(10, 20)) x = ['a', 'b', 'c', 'd', 'e'] # Получить случайный элемент print(random.choice(x)) # Перемешать порядок элементов в списке x random.shuffle(x) # Вывод измененного порядка x print(x) # Вывод случайного элемента print(random.random())
Результат вывода (случайный результат):
19 c ['e', 'a', 'd', 'c', 'b'] 0.707947055817621
ЭтоВ модуле random PythonПолный список функций и свойств, доступных.