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
, float
a complex
tried 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 + yj
kde 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.