Pokročilejšie matematické funkcie (Moduly)
V Pythone (tak ako aj vo väčšine ostatných jazykov) je už v základnej inštalácii dostupných niekoľko knižníc – modulov, ktoré združujú rôzne funkcie. Moduly Pythonu sú väčšinou napísané v Céčku alebo v Pythone samotnom. Jedným z modulov je aj modul math, ktorý obsahuje pokročilé matematické funkcie. Predtým, ako chceme daný modul použiť, musíme ho najprv importovať.
Moduly sa importujú pomocou príkazu import
(nečakané, že?) a to takto:
>>> import math
Teraz máme importovaný modul math, ktorý v sebe obsahuje niekoľko funkcií týkajúcich sa matematiky. Nájdeme v ňom napríklad funkcie pre odmocniny, logaritmy či goniometrické funkcie. Celý zoznam funkcií a ich popis nájdete v oficiálnej dokumentácii Python 3, my si teraz ukážeme len nejaké základné príklady.
Funkcie modulov po importovaní modulu príkazom import voláme spôsobom: názov_modulu.funkcia()
. Takže v prípade, že by sme chceli z modulu math použiť funkciu pre druhú odmocninu, použijeme: math.sqrt(36)
. Goniometrické funkcie ako sínus, kosínus či tangens majú v module skrátené názvy cos
, sin
a tan
. Môžeme teda skúsiť vypočítať sínus 90° takto:
>>> math.sin(90) 0.8939966636005579
Vidíme však, že sme nedostali očakávaný výsledok. Ide o to, že vstupom týchto funkcií je veľkosť uhla v radiánoch. V module math však nájdeme aj funkcie pre premenu veľkosti uhla zo stupňov na radiány math.radians()
a opačne math.degrees()
. Vypočítanie sínusu 90° bude teda vyzerať takto:
>>> math.sin(math.radians(90)) 1.0
Okrem funkcií v module math nájdeme aj dve konštanty: Ludolfovo a Eulerovo číslo.
>>> math.pi 3.141592653589793 >>> math.e 2.718281828459045
Ostatným modulom sa postupne budem podrobnejšie venovať v ďalších dieloch.
Premenné a dátové typy
Premenná je niečo, čo nám umožňuje ukladať dáta rôzneho typu. V prípade Pythonu premenná po vytvorení ukazuje na nejaký objekt. Je potrebné si uvedomiť, že všetko v Pythone je objekt či už sa jedná o funkciu, slovo (reťazec) alebo číslo. Pre jednoduchú ukážku použijem dátový typ integer čiže celé číslo.
>>> Číslo = 12345 >>> Číslo 12345
Týmto sme vytvorili objekt obsahujúci celé číslo 12345, na ktorý ukazuje premenná s názvom „Číslo“. V Pythone je možné premennú nazvať akýmkoľvek zhlukom čísel a písmen vrátane diakritiky a veľkých písmen, pričom môžeme použiť aj podčiarkovník _. Nie je však povolené názov premennej začať číslom a takisto nemôžete premennú pomenovať kľúčovým slovom Pythonu. Python je case-sensitive, čo znamená, že rozlišuje veľké a malé písmená.
Pozíciu objektu v pamäti, na ktorý ukazuje premenná, Číslo zistíme pomocou funkcie id.
>>> id(Číslo) 140580596424592
Graficky znázornená premenná ukazujúca na vytvorený objekt
Teraz skúsime ďalšej premennej priradiť obsah premennej Číslo:
>>> To_isté_číslo = Číslo >>> To_isté_číslo 12345 >>> id(To_isté_číslo) 140580596424592
Vidíme, že keď sme premennej To_isté_číslo priradili obsah premennej Číslo, naozaj ukazuje na ten istý objekt (s rovnakou pozíciou v pamäti).
To_isté_číslo ukazuje na rovnaký objekt ako premenná Číslo
Čo sa stane pokiaľ zmeníme obsah premennej Číslo?
>>> Číslo = 54321 >>> Číslo 54321 >>> To_isté_číslo 12345 >>> id(Číslo) 140580595791888 >>> id(To_isté_číslo) 140580596424592
Po priradení čísla 54321 premennej Číslo sme vytvorili nový objekt s obsahom 54321. Premenná Číslo tak prestala ukazovať na predchádzajúci objekt a odteraz ukazuje na objekt nový. Na objekt s číslom 12345 naďalej ukazuje premenná To_isté_číslo, takže tento objekt sa nikde nestratil a stále existuje v pamäti.
To_isté_číslo naďalej ukazuje na objekt 12345
Ukážme si, čo sa stane, pokiaľ ďalšej premennej priradíme rovnaké číslo, ale nepoužijeme pri tom ani jednu z predchádzajúcich premenných:
>>> Rovnaké_číslo = 12345 >>> Rovnaké_číslo 12345 >>> id(Rovnaké_číslo) 140580595791856
Teraz vidíme, že premenná Rovnaké_číslo síce vráti rovnaké číslo ako premenná To_isté_číslo, ale nejedná sa o ten istý objekt. Týmto sme vytvorili nový objekt s obsahom 12345 a v pamäti tak máme dva obsahovo identické objekty s rozdielnou pozíciou.
Premenná Rovnaké_číslo je síce obsahovo zhodná s premennou To_isté_číslo ale neukazuje na rovnaký objekt
5.png, Pokiaľ na objekt prestanú ukazovať všetky premenné, objekt zanikne.
Poznámka 1: pri menších číslach alebo krátkych reťazcoch a podobne sa môže stať, že budú všetky premenné ukazovať na rovnaký objekt aj pokiaľ premennej nepriradíme priamo obsah inej premennej. Táto vec je ovplyvnená implementáciou Pythonu 3, a tak sa toto správanie môže v závislosti od platformy a operačného systému meniť.
Poznámka 2: Názvy premenných som napísal s diakritikou len pre ukážku, že sa to dá. V praxi sa však diakritika a slovenské či české názvy nepoužívajú. Preto v ďalších príkladoch už budem používať len názvy premenných v angličtine.
Integer – celé číslo
>>> binary_num = 0b1100101 >>> octal_num = 0o74152063 >>> hexadecimal_num = 0xFEABCD9517368420
type()
:>>> type(binary_num) <class 'int'>
Float – číslo s desatinnou čiarkou
>>> float_num = 658.0 >>> type(float_num) <class 'float'> >>> float_num = 0.25 >>> type(float_num) <class 'float'>
Complex – komplexné číslo
>>> complex_number = 3.3+2j >>> complex_number (3.3+2j) >>> type(complex_number) <class 'complex'>
String – reťazec
>>> string1 = 'He said: "I\'ll kill you!"' >>> print(string1) He said: "I'll kill you!" >>> type(string1) <class 'str'> >>> string2 = "\"Mňa kedys' zvádzal svet\" - Pavol Országh-Hviezdoslav" >>> print(string2) "Mňa kedys' zvádzal svet" - Pavol Országh-Hviezdoslav >>> string3 = """"Mňa kedys’ zvádzal svet, mi hovoriac: ... Reč, ktorú z domu vieš, ó, jak je lichá!" ... - Pavol Országh-Hviezdoslav""" >>> print(string3) "Mňa kedys' zvádzal svet, mi hovoriac: Reč, ktorú z domu vieš, ó, jak je lichá!" - Pavol Országh-Hviezdoslav
List – zoznam
[]
a jednotlivé prvky oddeľujeme čiarkami.>>> list = [54, 8.9, 0j, "slovo", string1, [], [1, 2, "a"]] >>> type(list) <class 'list'> >>> print(list) [54, 8.9, 0j, 'slovo', '"Mňa kedys\' zvádzal svet" - Pavol Országh-Hviezdoslav', [], [1, 2, 'a']]
Set – list druhýkrát
{}
a neobsahuje duplicitné prvky.>>> list = [1, 2, 4, 3, 3] >>> set = {1, 2, 4, 3, 3} >>> print(list) [1, 2, 4, 3, 3] >>> print(set) {1, 2, 3, 4}
Tuple – N-tica (list tretíkrát)
>>> tuple = (0, "rtzc", list, ("a", "b"), ()) >>> print(tuple) (0, 'rtzc', [1, 2, 4, 3, 3], ('a', 'b'), ())
Dictionary – slovník
>>> dict = {1:"A", 2: set, 9:54} >>> type(dict) <class 'dict'> >>> print(dict) {1: 'A', 2: {1, 2, 3, 4}, 9: 54}
None – nič
>>> none = None >>> none >>> print(none) None >>> type(none) <class 'NoneType'>
Boolean – pravda/nepravda
>>> truth = True >>> untruth = False >>> type(truth) <class 'bool'> >>> print(truth, untruth) True False