Numerické funkce  (pokračovaní)

Pro ilustraci vestavěných matematických funkcí lze
uvést ty, které jsou používány nejčastěji:

abs

abs(číslo)

            Vrátí absolutní hodnotu argumentu.

coerce

coerce(číslo1, číslo2)

            Vrátí tuple … (výsledek1, výsledek2). Tuple je datový typ, o
němž bude řeč později, v sekci pojednávající o
sekvenčních datových typech. Výsledky reprezentují
čísla (číslo1 a číslo2)
převedené  na stejný číselný typ. Výsledným datovým
typem je přesnější datový typ.

       >>> cislo1 = 123

>>> cislo2 = 2L

>>> coerce(cislo1, cislo2)

(123L, 2L)

>>> 

>>> cislo3 = 0.5

>>> coerce(cislo1, cislo3)

(123.0, 0.5)

>>> 

>>> coerce(cislo2, cislo3)

(2.0, 0.5)

divmod

divmod(x, y)

            Vrátí tuple celých čísel. První položka
je celočíselný podíl x/y, druhá položka je zbytek po
dělení. Čísla předaná funkci nemusí mít celočíselný
datový typ. (Tuple, viz. coerce …).

pow

pow(základ, exponent [, mod])

            Vrátí hodnotu základ ** exponent. Pokud
je zadána i nepovinná hodnota mod, výsledek je roven
(základ ** exponent) % mod.

round

round(číslo, počet_číslic=0)

            Vrátí číslo zaokrouhlené na zadaný
počet číslic.

int, long, float a complex

Pro typovou konverzi lze použít funkce int(),
long(), float() a complex() jak je patrné z níže
uvedených příkladů:



>>> int(3.5)

3

>>> 

>>> long(22)

22L

>>> 

>>> float(3)

3.0

Řetězce

Protože v Jythonu je všechno objektem, tak i
řetězce jsou objekty. To znamená, že s řetězcem se
pracuje jako s objektem a nikoliv jako s polem znaků.
Je potřeba dát pozor na skutečnost, že řetězce jsou
konstantní, což znamená, že jednou vytvořený řetězec
již nelze měnit. Jython neobsahuje vestavěnou třídu
proměnných řetězců, která by byla ekvivalentem třídy
StringBuffer v Javě. Obdobně jako v Javě, i
v Jythonu, jsou řetězce vnitřně kódovány v kódování
Unicode.

Existuje několik různých způsobů jak lze vytvářet
řetězcové konstanty. Řetězce mohou být uzavřeny jak
ve dvojitých uvozovkách tak v jednoduchých
uvozovkách:

>>> "Retezec ve dvojitych uvozovkach"

'Retezec ve dvojitych uvozovkach'

>>> 

>>> 'Retezec v jednoduchych uvozovkach'

'Retezec v jednoduchych uvozovkach'

>>> 

>>> msg = '"Warovani!!!" je asi spatne napsane'

>>> msg

'"Warovani!!!" je asi spatne napsane'

Uvnitř uvozovek je možné uvést speciální znaky
pomocí „escape" sekvencí. „Escape" sekvence
použitelné v Jythonu jsou uvedeny v tabulce 2-1.

Tab. 2-1. „Escape" nejdůležitější
sekvence použitelné v Jythonu

„Escape" sekvence

Význam

\\

Zpětné lomítko

\‘

Apostrof

\"

Uvozovky

\r

Návrat vozíku

\t

Tabulátor

\uxxxx

16-bitový znak Unicode, xxxx
(hex)

\b

Couvnutí (znak backspace)

\f

Nová stránka

\n

Nový řádek

\N{jmeno}

Znak Unicode identifikovaný pomocí jmeno

\Uxxxxxxxx

32 – bitový znak Unicode, xxxxxxxx (hex)

\xhh

8 – bitový znak Unicode v hexadecimálním
zápisu

Nyní se podíváme na základní operace s řetězci.
Řetězce je možné spojovat. Řetězce uvedené vedle sebe
jsou spojeny automaticky. Je možné použít i operátor
+ (křížek):

>>> 'prvni'  " druhy retezec"

'prvni druhy retezec'

>>> 

>>> slovo = 'prvni retezec' + ' a druhy retezec'

>>> 

>>> slovo

'prvni retezec a druhy retezec'

Operátor * (hvězdička) slouží k opakování řetězce:

>>> leva_zavorka = '<'

>>> prava_zavorka = '>'

>>> leva_zavorka * 3 + "AHOJ" + prava_zavorka * 3

'<<<AHOJ>>>'

Řetězce mohou být také indexovány. To znamená, že
lze přistupovat k libovolné části řetězce
prostřednictvím indexů. První znak v řetězci má index
0. V Jythonu neexistuje žádný datový typ analogický k
datovému typu char v Javě. Znak je jednoduše řetězec
s délkou 1.

>>> slovo = "Popokatepetl"

>>> 

>>> slovo

'Popokatepetl'

>>> slovo[0]

'P'

>>> slovo[4]

'k'

Řetězec je možné též indexovat se zápornými indexy.
Poslední znak v řetězci lze například získat takto:

>>> slovo

'Popokatepetl'

>>> slovo[-1]

'l'

Jak již bylo uvedeno dříve, řetězce jsou
konstatní a nelze je změnit
. Pokus o změnu
na indexované pozici skončí chybou:

>>> slovo

'Popokatepetl'

>>> slovo[0] = 'K'

Traceback (innermost last):

  File "<console>", line 1, in ?

TypeError: can't assign to immutable object

Mezi pokročilejší prvky v práci s řetězci, a jak
později uvidíme nejen s řetězci, patří takzvané "výřezy" (anglicky slices,
slice annotation
). Jedná se o konstrukci, kdy z
určitého řetězce vyberete pouze některé znaky. Výřezy
je možné zadávat uvedením rozmezí od : az_do. Horní rozmezí je od dolního odděleno dvojtečkou.

>>> slovo = 'Popokatepetl'

>>> 

>>> slovo[0:4]

'Popo'

>>> 

>>> slovo[4:6]

'ka'

Výřezy mají definovány užitečné defaultní hodnoty.
První index, pokud jej nezadáme, má defaultní hodnotu
0, druhý index je defaultně nastaven na délku
řetězce.

>>> slovo = 'Popokatepetl'

>>> slovo[:2]           #Prvni dva znaky

'Po'

>>> slovo[:4]           #Prvni ctyri znaky

'Popo'

>>> slovo[4:]           #Vsechny znaky krome prvnich 4

'katepetl'

>>> slovo[-2:]          #Posledni dva znaky

'tl'

>>> slovo[:-2]          #Vsechny znaky krome poslednich 2

'Popokatepe'

Pozn.: výřez vždy vrací nový objekt definovaný rozmezím od :
az_do
.

Mezi základní funkce pro práci s
řetězci lze uvést následující:

len

len(řetězec)

            Vrátí počet znaků v řetězci

     >>> s = 'supercalifragilisticexpialidocious'

>>> len(s)

34

ord

ord(znak)

            Vrátí celé číslo odpovídající kódování
znaku.

chr

chr(číslo)

            Vrátí řetězec délky 1, obsahující znak
odpovídající danému kódovaní. Argument číslo může nabývat hodnot 1 – 255.

unichr

unichr(číslo)

            Vrátí Unicode řetězec délky 1,
obsahující znak odpovídající danému kódovaní.
Argument číslo může nabývat hodnot 1 –
65535. V Jythonu není rozdíl mezi funkcemi chr() a
unichr().