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

Вграденият в 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

Notice the trailing zeroes in the above example.

We might ask, why not implement Decimal every time, instead of float? The main reason is efficiency. Floating point operations are carried out must faster than Decimal operations.

When to use Decimal instead of float?

We generally use Decimal in the following cases.

  • When we are making financial applications that need exact decimal representation.
  • When we want to control the level of precision required.
  • When we want to implement the notion of significant decimal places.

Python Fractions

Python provides operations involving fractional numbers through its fractions module.

A fraction has a numerator and a denominator, both of which are integers. This module has support for rational number arithmetic.

We can create Fraction objects in various ways. Let's have a look at them.

 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.

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