Številke Pythona, pretvorba tipov in matematika

V tem članku boste spoznali različne številke, ki se uporabljajo v Pythonu, kako pretvoriti iz enega podatkovnega tipa v drugega in matematične operacije, ki jih podpira Python.

Številčni podatkovni tip v Pythonu

Python podpira cela števila, števila s plavajočo vejico in kompleksna števila. Opredeljeni so kot int, floatin complexrazrede v Python.

Cela števila in plavajoče vejice ločujeta prisotnost ali odsotnost decimalne vejice. Na primer, 5 je celo število, medtem ko je 5.0 število s plavajočo vejico.

Kompleksna števila so zapisana v obliki, x + yjkjer je x realni del, y pa namišljeni del.

S type()funkcijo lahko vemo, kateremu razredu pripada spremenljivka ali vrednost, in s isinstance()funkcijo preverimo, ali pripada določenemu razredu.

Oglejmo si primer:

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

Ko zaženemo zgornji program, dobimo naslednji izhod:

 (8 + 3j) Res

Medtem ko so lahko cela števila poljubne dolžine, je število s plavajočo vejico natančno le do 15 decimalnih mest (16. mesto je netočno).

Števila, s katerimi imamo opravka vsak dan, so decimalnega (osnovnega 10) številskega sistema. Toda računalniški programerji (na splošno vgrajeni programerji) morajo delati z binarnimi (osnova 2), šestnajstiškimi (osnova 16) in osmiško (osnova 8) številskimi sistemi.

V Pythonu lahko te številke predstavimo tako, da pred to številko ustrezno postavimo predpono. Naslednja tabela navaja te predpone.

Številski sistem Predpona
Binarno '0b' ali '0B'
Oktalna '0o' ali '0O'
Šestnajstiška '0x' ali '0X'

Tu je nekaj primerov

 # Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)

Ko zaženete program, bo rezultat:

 107 253 13

Pretvorba tipa

Eno vrsto številk lahko pretvorimo v drugo. To je znano tudi kot prisila.

Operacije, kot je seštevanje, odštevanje, prisilno celo število, ki lebdi implicitno (samodejno), če je eden od operandov float.

 >>> 1 + 2.0 3.0

Zgoraj lahko vidimo, da je 1 (celo število) prisiljeno v 1,0 (plavajoče) za seštevanje, rezultat pa je tudi število s plavajočo vejico.

Uporabljamo lahko tudi vgrajene funkcije, kot so int(), float()in complex()za eksplicitno pretvorbo med vrstami. Te funkcije lahko celo pretvorijo iz nizov.

 >>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)

Pri pretvorbi iz float v celo število se število skrajša (decimalni deli se odstranijo).

Python Decimal

Python vgrajeni plovec razreda izvaja nekatere izračune, ki bi nas lahko presenetili. Vsi vemo, da je vsota 1,1 in 2,2 3,3, vendar se zdi, da se Python ne strinja.

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

Kaj se dogaja?

Izkazalo se je, da so številke s plavajočo vejico v računalniški strojni opremi v obliki binarnih ulomkov, saj računalnik razume le binarne (0 in 1). Zaradi tega večine decimalnih ulomkov, ki jih poznamo, ni mogoče natančno shraniti v naš računalnik.

Vzemimo primer. Ulomka 1/3 ne moremo predstaviti kot decimalno število. Tako bomo dobili 0,33333333… kar je neskončno dolgo in ga lahko samo približamo.

Izkazalo se je, da bo decimalni ulomek 0,1 povzročil neskončno dolg binarni ulomek 0,000110011001100110011… in naš računalnik ga shrani le končno število.

To bo samo približno 0,1, vendar nikoli ne bo enako. Zato gre za omejitev naše računalniške strojne opreme in ne za napako v Pythonu.

 >>> 1.1 + 2.2 3.3000000000000003

Da bi odpravili to težavo, lahko uporabimo decimalni modul, ki je priložen Pythonu. Medtem ko imajo številke s plavajočo vejico natančnost do 15 decimalnih mest, ima decimalni modul natančnost, ki jo nastavi uporabnik.

Poglejmo razliko:

 import decimal print(0.1) print(decimal.Decimal(0.1))

Izhod

 0,1 0,1000000000000000055511151231257827021181583404541015625

Ta modul se uporablja, kadar želimo izvajati decimalne izračune, kot smo se naučili v šoli.

Ohranja tudi pomen. Vemo, da je 25,50 kg natančnejše od 25,5 kg, saj ima dve pomembni decimalni mesti v primerjavi z eno.

 from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))

Izhod

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

Ko zaženemo zgornji program, dobimo izhodne podatke na naslednji način (vrednosti se lahko razlikujejo zaradi naključnega vedenja)

 18 e ("c", "e", "d", "b", "a") 0,5682821194654443

Tu je celoten seznam funkcij in atributov, ki so na voljo v naključnem modulu Python.

Zanimive Članki...