Čísla v Pythonu, převody typů a matematika

V tomto článku se dozvíte o různých číslech používaných v Pythonu, o převodu z jednoho datového typu na druhý a o matematických operacích podporovaných v Pythonu.

Počet datových typů v Pythonu

Python podporuje celá čísla, čísla s plovoucí desetinnou čárkou a komplexní čísla. Jsou definovány jako int, floata complextříd v Pythonu.

Celá čísla a plovoucí body jsou odděleny přítomností nebo nepřítomností desetinné čárky. Například 5 je celé číslo, zatímco 5,0 je číslo s plovoucí desetinnou čárkou.

Složitá čísla se zapisují ve tvaru, x + yjkde x je skutečná část a y je imaginární část.

Pomocí této type()funkce můžeme zjistit, do které třídy proměnná nebo hodnota patří, a pomocí isinstance()funkce zkontrolovat, zda patří do konkrétní třídy.

Podívejme se na příklad:

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

Když spustíme výše uvedený program, získáme následující výstup:

 (8 + 3j) Pravda

Zatímco celá čísla mohou mít libovolnou délku, číslo s plovoucí desetinnou čárkou je přesné pouze na 15 desetinných míst (16. místo je nepřesné).

Čísla, s nimiž se každý den zabýváme, mají desítkový (základní 10) číselný systém. Ale počítačoví programátoři (obvykle vestavěné programátoři) musí pracovat s binárními (základ 2), šestnáctkovými (základ 16) a osmičkovými (základ 8) číselnými systémy.

V Pythonu můžeme tato čísla reprezentovat vhodným umístěním předpony před toto číslo. V následující tabulce jsou uvedeny tyto předpony.

Číselný systém Předpona
Binární „0b“ nebo „0B“
Osmičkový „0o“ nebo „0O“
Hexadecimální „0x“ nebo „0X“

Zde jsou nějaké příklady

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

Když spustíte program, výstup bude:

 107 253 13

Převod typu

Můžeme převést jeden typ čísla na jiný. Toto je také známé jako nátlak.

Operace jako sčítání, odčítání vynucují integer k floatování implicitně (automaticky), pokud je jeden z operandů float.

 >>> 1 + 2.0 3.0

Nahoře vidíme, že 1 (celé číslo) je pro přidání vynuceno do 1,0 (float) a výsledkem je také číslo s plovoucí desetinnou čárkou.

Můžeme také použít vestavěné funkce jako int(), float()a complex()pro převod mezi typy explicitně. Tyto funkce lze dokonce převádět z řetězců.

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

Při převodu z float na integer se číslo zkracuje (desítkové části jsou odstraněny).

Python desítkové

Plovoucí vestavěná třída Pythonu provádí některé výpočty, které by nás mohly ohromit. Všichni víme, že součet 1,1 a 2,2 je 3,3, ale zdá se, že Python nesouhlasí.

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

Co se děje?

Ukazuje se, že čísla s plovoucí desetinnou čárkou jsou implementována v počítačovém hardwaru jako binární zlomky, protože počítač rozumí pouze binárním (0 a 1). Z tohoto důvodu nelze většinu našich desetinných zlomků přesně uložit v našem počítači.

Vezměme si příklad. Zlomek 1/3 nemůžeme představovat jako desetinné číslo. To dá 0,33333333… což je nekonečně dlouho a my to můžeme jen přiblížit.

Ukazuje se, že desetinný zlomek 0,1 bude mít za následek nekonečně dlouhý binární zlomek 0,000110011001100110011… a náš počítač uloží pouze jeho konečný počet.

To bude jen přibližně 0,1, ale nikdy nebude stejné. Jedná se tedy o omezení našeho počítačového hardwaru, nikoli o chybu v Pythonu.

 >>> 1.1 + 2.2 3.3000000000000003

K překonání tohoto problému můžeme použít desítkový modul dodávaný s Pythonem. Zatímco čísla s plovoucí desetinnou čárkou mají přesnost až na 15 desetinných míst, desítkový modul má uživatelsky nastavitelnou přesnost.

Uvidíme rozdíl:

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

Výstup

 0,1 0,10000000000000055511151231257827021181583404541015625

Tento modul se používá, když chceme provádět desítkové výpočty, jak jsme se učili ve škole.

Zachovává také význam. Víme, že 25,50 kg je přesnější než 25,5 kg, protože má dvě významná desetinná místa ve srovnání s jedním.

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

Výstup

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

Když spustíme výše uvedený program, dostaneme výstup následovně. (Hodnoty se mohou lišit kvůli náhodnému chování)

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

Zde je úplný seznam funkcí a atributů dostupných v náhodném modulu Pythonu.

Zajímavé články...