Питхон бројеви, конверзија типова и математика

У овом чланку ћете сазнати о различитим бројевима који се користе у Питхону, како се претвара из једног типа података у други и математичким операцијама које подржава Питхон.

Тип броја броја у Питхону

Питхон подржава целе бројеве, бројеве са покретном зарезом и сложене бројеве. Они су дефинисани као int, floatи complexкласе у Питхон.

Цели бројеви и покретне тачке одвојени су присуством или одсуством децималне тачке. На пример, 5 је цео број, док је 5.0 број са покретном зарезом.

Комплексни бројеви су написани у облику, x + yjгде је к стварни део, а и имагинарни део.

Помоћу type()функције можемо да знамо којој класи припада променљива или вредност и isinstance()да бисмо проверили да ли припада одређеној класи.

Погледајмо пример:

 a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))

Када покренемо горњи програм, добијамо следећи излаз:

 (8 + 3ј) Тачно

Иако цели бројеви могу бити било које дужине, број са помичним зарезом је тачан само до 15 децималних места (16. место је нетачно).

Бројеви с којима се свакодневно бавимо су децималног (основног 10) бројевног система. Али рачунарски програмери (углавном уграђени програмери) морају да раде са бинарним (база 2), хексадецималним (база 16) и осминским (основа 8) бројевним системима.

У Питхону ове бројеве можемо представити одговарајућим префиксом испред тог броја. Следећа табела наводи ове префиксе.

Систем бројева Префикс
Бинарно „0б“ или „0Б“
Оцтал '0о' или '0О'
Хексадецимални „0к“ или „0Кс“

Ево неколико примера

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

Приликом претварања из флоат-а у цео број, број се скраћује (децимални делови се уклањају).

Питхон Децимал

Питхон уграђени флоат класе изводи неке прорачуне који би нас могли запањити. Сви знамо да је збир 1.1 и 2.2 3.3, али чини се да се Питхон не слаже.

 >>> (1.1 + 2.2) == 3.3 False

Шта се догађа?

Испоставило се да се бројеви са помичном зарезом имплементирају у рачунарски хардвер као бинарни разломци, јер рачунар разуме само бинарне (0 и 1). Из тог разлога, већина децималних разломака које познајемо не може се тачно сачувати у нашем рачунару.

Узмимо пример. Разломак 1/3 не можемо представити као децимални број. То ће дати 0,33333333 … што је бескрајно дуго, и можемо га само приближити.

Испоставило се да ће децимални разломак 0,1 резултирати бескрајно дугачким бинарним разломком од 0,000110011001100110011… а наш рачунар га чува само коначан број.

Ово ће бити приближно 0,1, али никада неће бити једнако. Дакле, то је ограничење рачунарског хардвера, а не грешка у Питхону.

 >>> 1.1 + 2.2 3.3000000000000003

Да бисмо превазишли овај проблем, можемо користити децимални модул који долази са Питхоном. Док бројеви с помичном зарезом имају прецизност до 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 е ('ц', 'е', 'д', 'б', 'а') 0,5682821194654443

Овде је комплетна листа функција и атрибута доступних у Питхон рандом модулу.

Занимљиви Чланци...