ÚVOD.

Jednoduchý, funkčný, ľahko použiteľný to je objektovo-orientovaný programovací jazyk PYTHON.Vznikol rok 1989 v Amsterdame, jeho autorom je Guido van Rossum. Autor využil viacero osvedčených veci z rôznych iných jazykov ako C, C#, lisp a pod. Je to optimálny jazyk na rýchly vývoj aplikácii (RAD).

Python ponúka high-level datové typy, triedy, možnosť práce s modulmy a s chybami sa vyrovná pomocou výnimiek. Je postavený podľa hesla „less is more“ a využíva tieto koncepty:

· malý počet výkonných a kombinovateľných základných dátových typov,štandardných funkcií a konštrukcií,

· štrukturovateľnosť pomocou blokov, funkcií, tried a modulov,

· všetky prvky jazyka sú objekty, čo znamená, že sa s nimi manipuluje ako s inými dátami,

· rozšíriteľnosť - pre Python nie je problém "asimilovať" osvedčené prvky z iných jazykov.

Vďaka tomu jazyk odstraňuje hlavné nedostatky iných jazykov. Najväčší problém C/C++ je dĺžka vývojového cyklu. Je nevyhnutné napísať program, kompilovať ho, testovať a rekompilovať ho. Pri Pythone odpadá (re)kompilácia, testovanie je kratšie a ľahšie, okrem toho má Python kratšie a prehľadnejšie zdrojové kódy. Aj preto je vývoj programov v Pythone kratší ako v iných jazykoch, dokonca 5 až 10-krát kratší ako v C/C++. Hlavnú zbraň Perlu - regulárne výrazy - ponúka Python v module re. Takisto budete môcť hravo využívať kryptografiu, multimédiá, X Window System POSIX system calls, uľahčíte si prácu s reťazcami, databázami a internetom (CGI, WWW, FTP, HTML/XML). Tieto moduly vám budú fungovať tak pod rôznymi Unixmi, ako aj pod OS Windows a Macintosh, čo znamená skoro stopercentnú portabilitu. Python je navyše veľmi elegantný a jednoduchý jazyk, ktorý sa dá bez problémov rýchlo naučiť. Mimochodom, Python nebol pomenovaný po nejakom hadovi, ale po show BBC Monty Python's Flying Circus.

KTO POUŽÍVA PYTHON?

Infoseek používa Python ako implementáciu a prispôsobenie jazyka

Yahoo! Používa Python v mnohých z jeho služieb

NASA používa Python pri systémoch riadenia úloh

Intel používa Python pri testovaní čipov a matičných dosiek

Seznam používa Python

INŠTALÁCIA

Python nemá problém so žiadním operačným systémom. Na Unixoch býva často predinštalovaný, znesie aj Win, či Mac. Inštaláciu pre Windows si možete stiahnut tu, pre iný OS z http://python.org/download

Interpreter Pythona spustíte príkazom „python“, ak ste Python kompilovali, tak /usr/local/bin/python. Malo by sa zobrazi :

Python 2.2.1 (#34, Apr 9 2002, 19:34:33) [MSC 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information.

>>>

Pythonovské súbory sa ukladajú do súborov s príponou .py. Tie vykonáte príkazom python subor.py. Ku každej funkcii je v pythone dostupný help. Stačí do interpretra napísať

>>> help(nazov_funkcie)

PREMENNÉ

Premenné nám slúžia na ukladanie čísel, reťazcov a ďalších dátových štruktúr. Premenné sa nedeklarujú ale typ premennej je určený automaticky. Meno premennej môže obsahovať písmená či čísla. Python je case sensitive. Názvy premenných by tiež nemali mať tvar slov, ktoré má Python rezervované na vlastné účely, takými slovami sú: access, and, break, class, continue, def, del, elif, else, except, exec, finally, import, in, is, lambda, not, or, pass, print, raise, return, try, while, for, from, global, if

príklady:

>>> is = 100 # chyba is je rezervovane slovo

>>> i = 100 # ok

Komentár sa v pythone píše pomocou #.

ČÍSLA

V pythone poznáme tieto čísla.

Integers - celé čísla

plain integers (int) - od -2147483648 do 2147483647

long integers (long) -sú limitované len pamäťou počítača

floating point numbers (float) - čísla s desatinnou čiarkou

complex numbers - komplexné čísla

Operácie nad číslami

+, -, *, / bežné operácie

pow(a,b) umocní a na b

a%b operátor modulu, vydá zvyšok po delení a/b

hex(a) vráti hodnotu decimálneho čísla a v hexadecimálnej sústave

oct(a) vráti hodnotu decimálneho čísla a v oktánovej sústave

long(a) vráti číslo a v celočíselnom tvare (long), desatinnú časť zaokrúhli na nulu smerom na dol

int(a) vráti číslo a v celočíselnom tvare (int), desatinnú časť zaokrúhli na nulu smerom na dol

float(a) vráti číslo a v desatinnom tvare

coerce(a,b) ak sa dajú obidva argumenty upraviť na ten istý typ, vráti tuple s týmito upravenými argumentami, ináč vráti hodnotu None

divmod(a,b) vráti tuple s ((a-a%b)/b, a%b)

complex(real, imag) vytvorí komplexné číslo z reálnej časti a z imagnárnej časti

abs(z) vráti absolútnu hodnotou argumentu z

z.real vráti reálnu časť čísla z

z.imag vráti imaginárnu časť čísla z

round(x,n=0) zaokrúhli x na n miest (default 0)range(start=0,koniec,krok=1) vráti pole s číslami od start (default 0) do koniec-1 s krokom (default 1)

príklady:

>>> 2+2

4

>>>3*3.75/1.5

7.5

>>>hex(650)

'0x28a'

>>>4%3

1

>>>round(3.43752)

3.44

SEKVENČNÉ DATOVÉ TYPY

Sekvenčné dátové typy sú reťazce, tuple a polia. Reťazce a tuple su nemenné, prvky polí sa meniť dajú. Ku sekvenčným dátovým typom máme prístup pomocou indexov. V Pythone nemusíme pristupovať k jednotlivým prvkom len jednotlivo ale ide to aj hromadne prostredníctvom slice notácie, teda zápisom dvoch čísel oddelených dvojbodkou, pričom prvé číslo hovorí, u ktorého prvku zoznamu sa má začať a to druhé, pochopiteľne, skončiť. Číslovanie sa bez zadania štartu začína od nuly a je možné používať aj záporné indexy:

Príklady:

>>> retazec='python'

>>> retazec[2] # klasika

't'

>>> retazec[-3] # tretie od konca

'h'

>>> retazec[1:6] # slice notacia

'ython'

>>> retazec[-3:] # posledne tri

'hon'

>>> retazec[-4:-2]

'th'

REŤAZCE

majú obsah premennej ohraničený úvodzovkami alebo apostrofami. Keď chceme vložiť do reťazca nejaké "divné" znaky, tak použijeme escape sekvenciu:

\ prázdna escape sekvencia

\\ spätné lomítko (\)

\' apostrof (')

\" úvodzovka (")

\a pípnutie (BEL)

\b backspace (BS)

\e escape (ESC)

\t horizontálny tabulátor (HT)

\v vertikálny tabulátor (VT)

\n nový riadok (NL)

\r návrat vozíka (CR)

\f odstránkovanie (FF)

\0XX ASCII znak v oktánovej sústave s hodnotou XX

\xXX ASCII znak v hexadecimalnej sústave s hodnotou XX

Príklady:

>>> print "\x50\x79\x74\x68\x6f\x6e"

Python

>>> 'Milan\'s auto'

"Milan's auto"

Funkcie pre prácu s reťazcami:

repr(s) vráti argument s v apostrofoch

str(s) vráti argument s ak je reťazec, ak s nie je reťazec, tak ho konvertuje na reťazec a vráti

eval(s) vyhodnotí a vráti výraz v reťazci s, opak funkcie repr()

ord(c) vráti ASCII hodnotu znaku c

chr(i) vráti ASCII znak, ktorému zodpovedá hodnota argumentu i, opak funkcie ord(), 0 <= i < 25

Polia

Pole vytvoríme priradením hodnôt v hranatých zátvorkách nejakej premennej. S jednotlivými prvkami poľa sa dá manipulovať, teda meniť ich a pridávať nové prvky. Použitím slice notácie sa dajú prvky meniť hromadne, ak priraďujeme menej hodnôt ako je prvkov, na ktoré ukazujeme, budú prebytočné prvky zrušené:

>>> pole=[1,2,3,4,5,6,7,8,9]

>>> pole[:5]=[10,20] #prvky 3 az 5 zmiznu,

>>> pole

[10, 20, 6, 7, 8, 9]

>>> pole[2:]=[30,40,50]

>>> pole

[10, 20, 30, 40, 50]

Vnorené polia v Pythone sú ekvivalentom pre C-čkovské viacrozmerné polia:

>>> elop=['python', 'je', 'jazyk']

>>> elop[2]=['programovaci', 'jazyk'] #vnorenie ďalšieho pola

>>> elop

['python', 'je', ['programovaci', 'jazyk']]

>>> elop[2][1] #prístup pomocou dvojitého indexovania

'jazyk'

Extrahovanie prvkov poľa do jednotlivých premenných, čiže List unpacking:

>>> [c1, c2, c3] = elop

>>> c1

'python'

>>> c2

'je'

>>> c3

['programovaci', 'jazyk']

Metódy a funkcie pre prácu s poliami:

a.append(x) na koniec poľa a pripojí hodnotu x

a.extend(P) na koniec poľa a pripojí pole P

a.insert(i, x) na pozíciu (index) v poli a, danú argumentom i, priradí hodnotu x

a.remove(x) prepíše prvý prvok poľa a s hodnotou x

a.pop([i]) zmaže a vráti prvok poľa a z pozície i; pri nezadaní argumentu, zmaže a vráti posledný prvok poľa

a.index(x) vráti index prvého prvku s hodnotou x v poli a, v prípade, že žiadny prvok poľa nemá hodnotu x, vráti chybu

a.count(x) vráti, info o tom, koľkokrát sa nachádza prvok s hodnotou x v poli a

a.sort() zoradí prvky poľa a podľa abecedy

a.reverse() to isté čo sort, len zoradí prvky poľa a v obrátenom poradí

del a[x] zmaže prvok poľa a s indexom x, dá sa použiť aj so slice notáciou a môže zmazávať celé premenné

Tuple

Je kombinacia poľa a reťazca. Tuple je nemenné! Vytvoríme ho ako pole, ale jednotlivé prvky, ktoré ho tvoria môžu aj nemusia byť ohraničené v okrúhlych zátvorkách:

>>> a=1,2,3 #a=(1,2,3) je to iste

Ak priradíme Tuple len jednu hodnotu, treba riadok ukončiť čiarkou:

>>> a='python',

>>> a

('python',)

Pre všetky sekvenčné dátové typy existujú tieto funkcie spoločne:

min(s) vráti najmenší prvok zo sekvencie s

max(s) vráti najväčší prvok zo sekvencie s

z [not] in s ak je písmeno z v sekvencii s, tak vráti 1, v opačnom prípade vráti 0. Použitím not sa otázka neguje

len(s) vráti počet prvkov v poli alebo tuple pri použití na reťazec jeho dĺžku, čo sme použili vyššie

s1 + s2 spojí sekvenciu s1 so sekvenciou s2

seq * x opakuje sekvenciu seq x krát, pričom x musí byť prirodzené číslo

Asociatívne polia

Čiže slovníky alebo hashe(#), čo sú špeciálnym typom polí, ktorých indexy nemusia byť nutne čísla. Vytvárajú sa tu teda dvojice: heslo a hodnota jemu priradená, teda:

>>> rodnecisla={'fero':'750729/7676','andrej':'841206/8366'}

>>> rodnecisla['andrej']

'841206/8366'

Metódy a funkcie pre prácu s nimi sú:

slov.items() vydá pole s pármi heslo:hodnota zo slovníka slov

slov.keys() vydá pole s heslami zo slovníka slov

slov.values() vydá pole s hodnotami zo slovníka slov

slov.has_key(k) ak slovník slov obsahuje heslo k, tak vráti 1, ináč 0

slov[k]=x priradí slovníku slov heslo k s hodnotou x

len(slov) vráti počet prvkov v slovníku slov

del slov[k] zmaže zo slovníka slov prvok s heslom k

RELAČNÉ A LOGICKÉ OPERÁTORY

Všetky relačné, teda porovnávacie operátory majú tú istú prioritu a ešte aj tá je nižšia ako u aritmetických operátorov. Čísla sa porovnávajú aritmeticky, znaky podľa ASCII hodnoty, to znamená, že "a" > "A". Reťazce sa porovnávajú lexikograficky až do konca jedného z reťazcov alebo do prvého rozdielu medzi porovnávanými reťazcami, to znamená, že "abcde" < "abcdef".

relačné operátory operátor význam

< menšie ako

> väčšie ako

== rovná sa

<= menšie ako, alebo sa rovná

>= väčšie ako, alebo sa rovná

!= nerovná sa

in je v sekvenčnom dátovom type

not in nie je v sekvenčnom dátovom type

logické operátory operátor význam

and logické and

or logické or

not neguje pravdivosť operandu

Príkaz if

Podmienený príkaz if, spôsob jeho zápisu v pythone:

if podmienka1:

blok1

elif podmienka2:

blok2

elif ...

blok ...

else:

blok

Cyklus while

opakuje blok kým má uvedená podmienka pravdivú hodnotu:

while podmienka:

blok

else:

blok

Cyklus for

Úlohou pythonovského for príkazu je prechádzať medzi prvkami sekvenčného dátového typu (reťazec, pole, tuple). Cyklus for sa zapisuje takto:

for premenná in sekvenčný_dátový_typ:

blok

else:

blok

priklad:

for i in range(len(‘autobus’)):

print i

#vrati nam cisla zacinajuce 0 az po dlzku slova autobus – 1

Príkaz skoku

Príkaz break

zapríčiní ukončenie najbližšieho cyklu príkazu for alebo while, pričom ak za ňím nasleduje podmienka else, potom bude chúdiatko ignorovaná.

Príkaz continue

v podstate povie programu, aby pri splnení určenej podmienky už ďalej nestrácal čas, ukončil začatý cyklus a šiel na ďalší až do splnenia podmienky, ktorou bol definovaný príkaz while alebo do prejdenia všetkých prvkov v sekvenčnom dátovom type, čo sa týka príkazu for. Ukážem to na príklade, ktorý vypíše všetky nepárne čísla a to takým spôsobom, že ak pri prechádzaní zadaného sekvenčného dátového typu range(1,19) natrafí program na číslo delitelné dvoma bez zvyšku, potom tento cyklus zastaví a preskúma sa ďalší prvok v poradí, ktorý ak danej podmienke nebude vyhovovať, tak sa vypíše na obrazovku:

for k in range(1,19):

if k%2 == 0:

continue

print k

pričom výpis bude mať tvar:

1

3

5

7

9

11

13

15

17

SÚBORY

Súbory si vie určite každý v nejakom textovom editore otvoriť,pracovať s nimi a potom ich aj zavrieť. V programovacom zmysle sa so súbormi pracuje rovnako, máme možnosť ich otvoriť, načítať si jednotlivé riadky, niečo s nimi postvárať a nakoniec ich zavrieť. Takže poďme rovno na to, vytvorme si nejaký pomocný súbor, ktorému dám názov ahoj.txt a bude obsahovať tieto slová v takomto rozložení:

ahoj

ako

sa mas?

Teraz si pomocou Pythonu, tento súbor otvoríme, načítame si daný súbor po riadkoch a každý riadok postupne vypíšeme na obrazovku.

subor = open("ahoj.txt","r")

for line in subor.readlines():

print line

subor.close()

rovnako by malo fungovat aj

subor=file(“ahoj.txt”,”r”) # v novsich verziach pythonu sa vyuziva hlavne file() miesto open()

Výpis bude mať pochopiteľne tvar:

ahoj

ako

sa mas?

Zo zápisu open / file je zrejmé, že má dva argumenty. Prvým argumentom je názov súboru, ktorý môže mať aj tvar premennej, druhým argumentom prezrádzame Pythonu náš úmysel s volaným súborom, teda či chceme zo súboru čítať (r) alebo budeme do neho zapisovať (w). Ešte ho, ak pôjde o súbor s binárnymi znakmi, musíme na to vopred pripraviť pridaním písmena 'b' pred 'r' alebo 'w', to znamená, že súbor s binármymi znakmi, ktorý otvárame pre čítanie označíme dvojicou písmen (br) a analogicky pre zapisovanie (bw). Pokiaľ pôjde o ASCII text, tak ako v ahoj.txt, uvádza sa len príslušné začiatočné písmeno slov read alebo write. Samotné otvorenie a uzatvorenie súboru je jasné z uvedeného príkladu.

Skopírujme teraz jeden súbor do druhého:

subor = open("ahoj.txt","r")

copia = open("ahoj.bak","w")

for line in subor.readlines():

copia.write(line)

print "subor skopirovany"

subor.close()

copia.close()

Po spustení programu Python skutočne vytvorí nový subor ahoj.bak, ktorý obsahuje slová zapísané do ahoj.txt. Doteraz sme vždy manipulovali so všetkými riadkami vytvoreného súboru ahoj.txt, ale čo ak chcem vypísať na obrazovku len napríklad prvý riadok súboru? Urobíme to takýmto jednoduchým zápisom:

subor = open("ahoj.txt","r")

lines = subor.readlines() #vrati zoznam riadkov

print lines[0]

A skutočne výpisom takéhoto programu po jeho spustení bude prvý riadok z ahoj.txt: ahoj

Akým spôsobom pridať nové informácie na koniec súboru? Dá sa to pochopiteľne otvorením súboru pre čítanie, načítaním dát do zoznamu, do ktorého pridáme nové dáta a potom zapísať celý zoznam do starého súboru, ale v Pythone existuje pre takýto prípad možnosť ako to obísť. Zvlášť pri veľkých súboroch, ktoré pre nedostatok pamäti nejde načítať, to musíme previesť pomocou ďalšie módu 'a', ktorý zapíšeme do open().

subor = open("ahoj.txt","a") # a= append ako v poliach J

subor.write("Dakujem dobre.")

subor.close()

Čo bude mať za následok nasledujúcu zmenu v súbore ahoj.txt:

ahoj

ako

sa mas?Dakujem dobre.

PRÍKLADY

1. Vypíšte slovo Python odzadu (nohtyp).

2. Spočítajte koľkokrát sa vyskytuje písmeno „e“ v súbore python.txt.

3. Nájdite a vypíšte všetky prvočísla od 2 do 30 v tvare "cislo" je prvocislo ak je a ak nie je tak napiste sucin 2 cisel ktore davaju za vysledok dane cislo

LINKY

http://sally.webzdarma.cz/python

http://www.toma.ahoj.sk/

http://www.python.org/

DOWNLOAD

python.txt

python tutorial

install for Win