Čísla Pythonu, prevádzanie typov a matematika

V tomto článku sa dozviete o rôznych číslach používaných v Pythone, o spôsobe prevodu z jedného dátového typu na druhý a o matematických operáciách podporovaných v Pythone.

Číselný dátový typ v Pythone

Python podporuje celé čísla, čísla s pohyblivou rádovou čiarkou a komplexné čísla. Sú definované ako int, floata complextried v Pythone.

Celé čísla a plávajúce body sú oddelené prítomnosťou alebo neprítomnosťou desatinnej čiarky. Napríklad 5 je celé číslo, zatiaľ čo 5,0 je číslo s pohyblivou rádovou čiarkou.

Komplexné čísla sa píšu vo forme, x + yjkde x je skutočná časť a y je imaginárna časť.

Pomocou tejto type()funkcie môžeme zistiť, do ktorej triedy premenná alebo hodnota patrí, a pomocou isinstance()funkcie skontrolovať, či patrí do konkrétnej triedy.

Pozrime sa na príklad:

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

Keď spustíme vyššie uvedený program, dostaneme nasledujúci výstup:

 (8 + 3j) Pravda

Zatiaľ čo celé čísla môžu mať ľubovoľnú dĺžku, číslo s pohyblivou rádovou čiarkou je presné iba na 15 desatinných miest (16. miesto je nepresné).

Čísla, s ktorými narábame každý deň, majú desatinný číselný systém (základ 10). Ale počítačoví programátori (zvyčajne zabudované programátory) musia pracovať s binárnymi (základ 2), hexadecimálnymi (základ 16) a osmičkovými (základ 8) číselnými systémami.

V Pythone môžeme tieto čísla reprezentovať vhodným umiestnením predpony pred toto číslo. V nasledujúcej tabuľke sú uvedené tieto predpony.

Číselný systém Predpona
Binárne „0b“ alebo „0B“
Osmičkový „0o“ alebo „0O“
Hexadecimálne „0x“ alebo „0X“

Tu je niekoľko príkladov

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

Po spustení programu bude výstup:

 107 253 13

Konverzia typu

Jeden typ čísla môžeme previesť na iný. Toto sa nazýva aj nátlak.

Operácie ako sčítanie, odčítanie prinútia celé číslo implicitne floatovať (automaticky), ak je jeden z operandov float.

 >>> 1 + 2.0 3.0

Vyššie vidíme, že 1 (celé číslo) je pre doplnenie vynútené do 1,0 (float) a výsledkom je aj číslo s pohyblivou rádovou čiarkou.

Môžeme tiež použiť vstavané funkcie, ako je int(), float()a complex()pre prevod medzi rôznymi typmi explicitne. Tieto funkcie môžu dokonca prevádzať z reťazcov.

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

Pri prevode z float na integer sa číslo skráti (desatinné časti sa odstránia).

Python Desatinné číslo

Float vstavaný v triede Python vykonáva niektoré výpočty, ktoré by nás mohli ohromiť. Všetci vieme, že súčet 1,1 a 2,2 je 3,3, ale zdá sa, že Python nesúhlasí.

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

Čo sa deje?

Ukazuje sa, že čísla s pohyblivou rádovou čiarkou sú implementované v počítačovom hardvéri ako binárne zlomky, pretože počítač chápe iba binárne hodnoty (0 a 1). Z tohto dôvodu nie je možné väčšinu desatinných zlomkov, ktoré poznáme, presne uložiť v našom počítači.

Zoberme si príklad. Zlomok 1/3 nemôžeme reprezentovať ako desatinné číslo. Takto získate 0,33333333…, čo je nekonečne dlho a môžeme to iba priblížiť.

Ukazuje sa, že desatinný zlomok 0,1 bude mať za následok nekonečne dlhý binárny zlomok 0,000110011001100110011… a náš počítač uloží iba jeho konečný počet.

Bude to iba približne 0,1, ale nikdy nebude rovnaké. Ide teda o obmedzenie nášho počítačového hardvéru, nie o chybu v Pythone.

 >>> 1.1 + 2.2 3.3000000000000003

Na prekonanie tohto problému môžeme použiť desatinný modul, ktorý sa dodáva s Pythonom. Zatiaľ čo čísla s pohyblivou rádovou čiarkou majú presnosť až na 15 desatinných miest, desatinný modul má presnosť nastaviteľnú používateľom.

Pozrime sa na rozdiel:

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

Výkon

 0,1 0,10000000000000055511151231257827021181583404541015625

Tento modul sa používa, keď chceme vykonávať desatinné výpočty, ktoré sme sa naučili v škole.

Tiež si zachováva význam. Vieme, že 25,50 kg je presnejších ako 25,5 kg, pretože má dve významné desatinné miesta v porovnaní s jednou.

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

Výkon

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

Keď spustíme vyššie uvedený program, dostaneme výstup nasledovne. (Hodnoty sa môžu líšiť v dôsledku náhodného správania)

 18 e ('c', 'e', ​​'d', 'b', 'a') 0,5682821194654443

Tu je úplný zoznam funkcií a atribútov dostupných v náhodnom module Python.

Zaujímavé články...