Download as pdf or txt
Download as pdf or txt
You are on page 1of 74

Python kratak uvod

Uvod u ra
cunalne mreze i usluge

Odjel za matematiku, 2014.


Jezicne znacajke

Python
Python je interpreterski, interaktivni programski jezik koji podrzava nekoliko
programerskih paradigmi s naglaskom na citljiv kod.
Jezicne znacajke

Python
Python je interpreterski, interaktivni programski jezik koji podrzava nekoliko
programerskih paradigmi s naglaskom na citljiv kod.

Tvorac: Guido von Rossum


Primjena: MIT, NASA, IBM, Google, . . .
Licenca: open-source
Interpretacija medukoda - izvrsavanje naredbe po naredbu
Jezik visoke razine - pretpostavljeno podrzava ADT

cista sintaksa relativno lagani prijelaz s pseudokoda na implementaciju
podrzava nekoliko programerskih paradigmi (proceduralno programiranje, OOP,
funkcionalno programiranje, ...)
prosirivost (CPython, Jython, IronPython (.NET))
prilagodene distribucije: Enthought Python, Python(x,y), ActivePython,. . .
bogata biblioteka programa - Python Cheese Shop - PyPI.
Izvodenje python programa

2 na
cina rada:
Interaktivni rad u konzolu se upisuju naredbe programskog jezika koje se odmah
interpretiraju (izvrsavaju).
Python 2.7 ( r32 :88445 , Feb 20 2011 , 21:29:02) [ MSC v .1500 32 bit ( Intel ) ]
on win32
Type " copyright " , " credits " or " license () " for more information .
>>> print " Hello World "

Skriptni rad Programi se spremaju u skripte a onda se kao Unix/Linux ili


Windows skripte pozivaju iz sistemske linije.
python imeskripte . py

Ugradeni kod izvodenje Python koda u drugim programskim jezicima


Varijable i unos

U Pythonu nema ekplicitine deklaracije tipa varijable, interpreter na temelju


incijalizacije prepoznaje tip.
Ispis na konzolu: print naredba

Primjer (Hello, World!)

>>> print " Hello , World ! "

Izraz za unos podataka s konzole: input naredba.

Primjer (Unos)
Napisite program koji
ce za uneseno ime napisati Dobrodosli, ime, u svijet Pythona.

# ime . py
ime = raw_input ( " Unesite ime : " ) # ime
print " Dobrodosli " + ime + " u svijet Pythona "

python ime . py
Numericki tipovi

cjelobrojni tip
Konverzija tipa
>>> 1 + 1
2 Neki tipovi se moraju eksplicitno konvertirati!
>>> a = 4

>>> 3/2.
brojevi kliznog zareza 1.5
>>> a = 3
>>> c = 2.1 >>> b = 2
>>> a/b
kompleksni tip brojeva (ugradeni tip!) 1
>>> a / float ( b )
>>> a =1.5+0.5 j 1.5
>>> a . real
1.5
>>> a . imag
0.5

boolean tip
>>> 3 > 4
False
>>> test = (3 > 4)
>>> test
False
>>> type ( test )
< type bool >
Ugradeni spremnici podataka

Python nudi mogu cnost koristenja ugradenih spremnika podataka u koje se mogu
spremati razli
citi objekti.

Liste (lists): [a,1,b,16]


N-terci (tuples): (1,10,3)
Rje
cnici (dictionaries): {a:1,b:2,c:3}
Skupovi (sets)
U Pythonu je definiran pove
ci broj operacija za rad sa spomenutim tipovima podataka.
Liste
Uredena lista podataka, koje moze biti sastavljena od objekata razli
citog tipa.
Operacije:
indeksiranje: pristup pojedinim objektima sadrzanim u listi
izrezivanje (slicing)
dodavanje i brisanje elemenata
pretvaranje u druge tipove podataka
Operacije preko operatora: Liste su promijenjive strukture podataka
>>> l = [1 , 2 , 3 , 4 , 5] >>> l [0] = 28
>>> type ( l ) >>> l
< type list > [28 , 2 , 3 , 4 , 5]
>>> l [2] >>> l [2:4] = [3 , 8]
3 >>> l
>>> l [ -1] [28 , 2 , 3 , 8 , 5]
5
>>> l [ -2]
4
Liste mogu sadrzavati razli
cite tipove
>>> l [3:] podataka
[4 , 5]
>>> l [:3] >>> l = [3 , 2 , hello ]
[1 , 2 , 3] >>> l
>>> l [::2] [3 , 2 , hello ]
[1 , 3 , 5] >>> l [1] , l [2]
(2 , hello )
Liste
Operacije preko OO metoda.
>>> l = [1 , 2 , 3 , 4 , 5]
>>> l . append (6)
>>> l
[1 , 2 , 3 , 4 , 5 , 6]
>>> l . pop ()
6
>>> l
[1 , 2 , 3 , 4 , 5]
>>> l . extend ([6 , 7])
>>> l
[1 , 2 , 3 , 4 , 5 , 6 , 7]
>>> l . reverse ()
>>> l
[7 , 6 , 5 , 4 , 3 , 2 , 1]
>>>

OO metode liste:
>>> print dir ( l )
[ __add__ , __class__ , __contains__ , __delattr__ , __delitem__ ,
__delslice__ , __doc__ , __eq__ , __format__ , __ge__ ,
_ _ g e tattribute__ , __getitem__ , __getslice__ , __gt__ , __hash__ ,
__iadd__ , __imul__ , __init__ , __iter__ , __le__ , __len__ , __lt__
, __mul__ , __ne__ , __new__ , __reduce__ , __reduce_ex__ , __repr__
, __reversed__ , __rmul__ , __setattr__ , __setitem__ , __setslice__
, __sizeof__ , __str__ , __subclasshook__ , append , count , extend ,
index , insert , pop , remove , reverse , sort ]
>>>
Stringovi
String je spremnik podataka koji zadrzi znakovni tip podatka.
Stringovi podrzavaju operacije kao i u liste.
>>> a = " hello , world ! "
>>> a [3:6] # 3 rd to 6 th ( excluded ) elements : elements 3 , 4 , 5
lo ,
>>> a [2:10:2] # Syntax : a [ start : stop : step ]
lo o
>>> a [::3] # every three characters , from beginning to end
hl r !

String je nepromijenjiv (immutable) spremnik podataka.


>>> a = " hello , world "
>>> a [2]= c

Traceback ( most recent call last ) :


File " < pyshell #1 > " , line 1 , in < module >
a [2]= c
TypeError : str object does not support item assignment
>>>

ali postoje motode koje dopustaje odredene izmjene:


>>> a . replace ( l , z , 1)
hezlo , world
>>>
n-terci i skupovi

n-terac predstavlja nepromijenjivu listu.


>>> t = 12345 , 54321 , hello !
>>> t [0]
12345
>>> t
(12345 , 54321 , hello ! )
>>> u = (0 , 2)

Skupovi sadrze neuredene, jedinstvene elemente.


>>> s = set (( a , b , c , a ) )
>>> s
set ([ a , c , b ])
>>> s . difference (( a , b ) )
set ([ c ])
Rjecnici

Rjecnik kao spremnik podataka poop


cuje listu - indeksiranje elemenata moze se u
ciniti
bilo kojim tipom podatka.
>>> tel = { emmanuelle : 5752 , sebastian : 5578}
>>> tel [ francis ] = 5915
>>> tel
{ sebastian : 5578 , francis : 5915 , emmanuelle : 5752}
>>> tel [ sebastian ]
5578
>>> tel . keys ()
[ sebastian , francis , emmanuelle ]
>>> tel . values ()
[5578 , 5915 , 5752]
>>> francis in tel
True

Vrijednosti pridruzeni klju


cevima mogu biti razli
citog tipa:
>>> d = { a :1 , b :2 , 3: hello }
>>> d
{ a : 1 , 3: hello , b : 2}
Operacije i operatori

Python podrzava ve
cinu operatora i operacija koji su podrzani u ostalim programskim
jezicima:

1 cke operacije (+, , , /, . . .)


aritmeti
2 operatori pridruzivanja (=, + =, =, =, . . .)
3 logi
cki operatori (x < y , x <= y , x > y , x >= y , x <> y , x! = y , x == y )
4 specijalizirane operacije na pojedinim tipovima podataka (ugradene metode u
objekte)
Operatori nad tipovima podataka:
izraz,... String pretvorba
key:izraz,... Stvaranje rje cnika
[izraz,...] Stvaranje liste
(izrazr,...) Stvaranje n-terca ili jednostavne zagrade
f(izraz,...) Poziv funkcije
x[index1:index2] Kriska (slicing)
x[index] Indeksiranje (indexing)
x.attr Referenca atributa
x**y Eksponent (x na y potenciju)
x Bitwise NE (NOT)
+x, -x Unarni plus ili minus
x*y, x/y, x//y, x%y Mnozenje, dijeljenje, dijeljenje na cijeli broj, ostatak
x+y, x-y Zbajanje, oduzimanje
xy, xy Lijevi pomak, desni pomak
x&y Bitwise I (AND)
x y Bitwise eksluzivni ILI (XOR)
xy Bitwise ILI (OR)
x < y , x <= y , x > y , x >= y , x <> y , x! = y , x == y Usporedbe
x is y, x is not y Provjera identiteta
x in y, x not in y Provjera clanstva
not x Bool-ov NE (NOT)
x and y Bool-ov I (AND)
x or y Bool-ov ILI (OR)
lambda arg,...: izraz Anonimna jednostavna funkcija
Primjeri

Primjer
Napisite Python program koji
ce za unesene stranice trokuta a, b, c izra
cunati povrsinu
tog trokuta.
Primjeri

Primjer
Napisite Python program koji
ce za unesene stranice trokuta a, b, c izra
cunati povrsinu
tog trokuta.

import math
print ( " Racun za povrsinu trokuta " )
a = input ( " a : " ) # pretpostavka : nejednakost trokuta
b = input ( " b : " )
c = input ( " c : " )

s =( a + b + c ) /2
print " povrsina trokuta je " , math . sqrt ( s *( s - a ) *( s - b ) *( s - c ) )
print " Opseg trokuta je " ,a + b + c
Primjeri

Primjer
Napisite Python program koji
ce za unesene stranice trokuta a, b, c izra
cunati povrsinu
tog trokuta.

import math
print ( " Racun za povrsinu trokuta " )
a = input ( " a : " ) # pretpostavka : nejednakost trokuta
b = input ( " b : " )
c = input ( " c : " )

s =( a + b + c ) /2
print " povrsina trokuta je " , math . sqrt ( s *( s - a ) *( s - b ) *( s - c ) )
print " Opseg trokuta je " ,a + b + c

Primjer
Napisite Python program koji
ce sortirati unesenu listu brojeva pomo
cu ugradene
funkcije sort().
Primjeri

Primjer
Napisite Python program koji
ce za unesene stranice trokuta a, b, c izra
cunati povrsinu
tog trokuta.

import math
print ( " Racun za povrsinu trokuta " )
a = input ( " a : " ) # pretpostavka : nejednakost trokuta
b = input ( " b : " )
c = input ( " c : " )

s =( a + b + c ) /2
print " povrsina trokuta je " , math . sqrt ( s *( s - a ) *( s - b ) *( s - c ) )
print " Opseg trokuta je " ,a + b + c

Primjer
Napisite Python program koji
ce sortirati unesenu listu brojeva pomo
cu ugradene
funkcije sort().

lista =[2 ,6 ,1 ,4 ,5 ,7]


lista . sort ()
print lista
Kontrolne strukture

Kontrolne strukture koje podrzava Python:

if . . . then . . . else

if a == 1:
...: print (1)
...: elif a == 2:
...: print (2)
...: else :
...: print ( A lot )
...:
A lot
Naredbe iteracije
Ponavljaj uz uvjet . . .

While . . .

>>> z = 1 + 1 j
>>> while abs ( z ) < 100:
...: z = z **2 + 1
...:
>>> z
>>> ( -134+352 j )

Iterativno izvodenje blok naredbi upravljen od iteracijskog izraza:

For . . .

a = 10
for i in range (4) :
...: print ( i )
...:
0
1
2
3
for word in ( cool , powerful , readable ) :
...: print ( Python is % s % word )
...:
Python is cool
Python is powerful
Python is readable
Primjeri

Primjer (Aritmeticka sredina)


Za dani niz podataka treba odrediti njegovu aritmeti
cku sredinu.
Primjeri

Primjer (Aritmeticka sredina)


Za dani niz podataka treba odrediti njegovu aritmeti
cku sredinu.

print ( " Unesite brojeve za racunanje " )


print ( " Za izlaz upisite 0 " )

suma =0.0
broj = input ( " Upisite broj " )
n =1 # brojimo elemente

while ( broj !=0) :


broj = input ( " Upisite broj : " )
n +=1
suma += broj

print suma / n
Fibonacci

Primjer
Za dani n ispisite n Fibonaccijevih brojeva.
Fibonacci

Primjer
Za dani n ispisite n Fibonaccijevih brojeva.

n = eval ( input ( " Koliko zelite fibonaccijevih brojeva : " ) )


result = []
a, b = 0, 1
while b < n :
result . append ( b )
a, b = b, a+b

print " Fibonaccijevi brojevi : "


for broj in result :
print broj , " "
Funkcije

Funkcije su blokovi naredbi koji primaju vrijednosti izvana i vra


caju vrijednosti
njihova ra
cunanja.
Procedure su funkcije koje ne vracaju podatke.
>>> def test () :
....: print ( in test function )
....:
....:
>>> test ()
in test function

Primjer
Definirajte funkciju koja vra
ca aposolutnu vrijednost broja.

def abs ( x ) :
if x <0:
return -x
else :
return x

print abs ( -5) # ispisuje 5


Funkcijski argumenti
Parametri su varijable
cije vrijednosti uzima funkcija. Parametri se prosljeduju kao
reference na objekte koji sadrze vrijednost varijable.

Prosljedivanje po referenci?
Ukoliko je vrijednost promijenjiva, onda se moze promijeniti unutar funkcije.

>>> def try_to_modify (x , y , z ) :


... x = 23
... y . append (42)
... z = [99] # new reference
... print ( x )
... print ( y )
... print ( z )
...
>>> a = 77 # immutable variable
>>> b = [99] # mutable variable
>>> c = [28]
>>> try_to_modify (a , b , c )
23
[99 , 42]
[99]
>>> print ( a )
77
>>> print ( b )
[99 , 42]
>>> print ( c )
[28]
Globalne i lokalne varijable
Varijable deklarirane izvan funkcija mogu biti referencirane u funkcijama, ali ne mogu
biti mijenjane.
Ukoliko se koristi global klju
cna rije
c onda je unutar funkcija mogu ce mijenjati
vrijednost tih varijabli.
>>> x = 5
>>> def addx ( y ) :
.....: return x + y
.....:
>>> addx (10)
>>> 15
>>> def setx ( y ) :
.....: x = y
.....: print ( x is % d % x )
.....:
.....:
>>> setx (10)
x is 10
>>> x
>>> 5
>>> def setx ( y ) :
.....: global x
.....: x = y
.....: print ( x is % d % x )
.....:
.....:
In [122]: setx (10)
x is 10
>>> x
>>> 10
Svojstva funkcija

Poseban tip argumenata:


*args bilo koji broj pozicioniranih argumenata spremljenih u nterac.
*kwargs bilo koji broj klju
ceva spremljenih u rje
cnik

>>> def variable_args (* args , ** kwargs ) :


....: print args is , args
....: print kwargs is , kwargs
....:
>>> variable_args ( one , two , x =1 , y =2 , z =3)
args is ( one , two )
kwargs is { y : 2 , x : 1 , z : 3}

Funkcije su objekti kao takvi imaju svojstva da mogu biti:

pridjeljeni varijabli >>> va = variable_args


element liste (ili neke druge kolekcije) >>> va ( three , x =1 , y =2)
args is ( three ,)
argument druge funkcije kwargs is { y : 2 , x : 1}

Funkcije kao metode funkcije unutar klasa.


Primjeri
Primjer (Aritmeticka sredina)
Funkcija aritmeti
cke sredine za proizvoljne brojeve.

def Mean (* brojevi ) :


n =0
suma =0.0
for x in brojevi :
suma += x
n +=1
return suma / n
print Mean (2 ,2 ,1 ,6 ,9 ,4 ,7 ,1 ,3)

Primjer
Definirajte funkciju koja
ce provjeravati je li broj prost i dodatnu funkciju koja
ce za
proslijedene brojeve ra
cunati samo sumu prostih brojeva.
Primjeri
Primjer (Aritmeticka sredina)
Funkcija aritmeti
cke sredine za proizvoljne brojeve.

def Mean (* brojevi ) :


n =0
suma =0.0
for x in brojevi :
suma += x
n +=1
return suma / n
print Mean (2 ,2 ,1 ,6 ,9 ,4 ,7 ,1 ,3)

Primjer
Definirajte funkciju koja
ce provjeravati je li broj prost i dodatnu funkciju koja
ce za
proslijedene brojeve ra
cunati samo sumu prostih brojeva.

import math
import math
def prime_sum (* brojevi ) :
def Prime ( broj ) :
suma =0.0
for p in range (2 , broj ) :
for x in brojevi :
if ( broj % p == 0) :
if Prime ( x ) :
return False
suma = suma + x
return True
return suma
Zadaci

Zadatak
Napisite Python program koji
ce aproksimirati broj tako da izra
cunate kona
cnu
sumu niza 4/1 4/3 + 4/5 4/7 + 4/9 4/11 + . . .. Korisnik treba unjeti broj n koji
predstavlja broj
clanova ovog niza.

Zadatak
Napisite Python program koji ce za uneseno ime i prezime generirati korisni
cko ime
tako da ga slozi kao string od prvog znaka imena i od prvih sedam znakova prezimena.
Ime i prezime moraju biti preba ceni u mala slova.
OOP objektno orijentirano programiranje

Klase kolekcija podataka (atributa) sa skupom metoda za pristup i manipulaciju tim


podacima.

Objekt instanca klase - varijabla koja sadrzi atribute i metode s postavljenim


vrijednostima kako je propisala klasa koju je instancira.

Vazne karakteristike OOP:


1 polimorfizam (engl. polymorphism) manipulirati objektima bez eksplicitnog
znanja o tipu ili klasi kojima pripadaju objekti.
2 enkapsulacija (engl. encapsulation) atributima i metodama se mogu pridjeliti
razine pristupa koje mogu biti privatne ili javne.
3 nasljedivanje (engl. inheritance) skupovni odnos izmedu klasa (klasa moze biti
podklasa neke druge klase)
OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko zna


cajki:
Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznat
kao instanca klase
OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko zna


cajki:
Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznat
kao instanca klase
Klasa ima po volji imenovane atribute koji se mogu povezivati i referirati.
OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko zna


cajki:
Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznat
kao instanca klase
Klasa ima po volji imenovane atribute koji se mogu povezivati i referirati.
Atributi klase koji su povezani na funkcije poznati su kao metode klase.
OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko zna


cajki:
Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznat
kao instanca klase
Klasa ima po volji imenovane atribute koji se mogu povezivati i referirati.
Atributi klase koji su povezani na funkcije poznati su kao metode klase.
Metoda moze imati posebno ime definirano od Pythona s dvije podcrte ( )
ispred i iza imena. Python upotrebljava takve posebne metode za neke operacije
koje se izvrsavaju na instancama klase. (konstruktor)
OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko zna


cajki:
Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznat
kao instanca klase
Klasa ima po volji imenovane atribute koji se mogu povezivati i referirati.
Atributi klase koji su povezani na funkcije poznati su kao metode klase.
Metoda moze imati posebno ime definirano od Pythona s dvije podcrte ( )
ispred i iza imena. Python upotrebljava takve posebne metode za neke operacije
koje se izvrsavaju na instancama klase. (konstruktor)
Klasa moze podatke i metode naslijediti od drugih klasa
sintaksa

Definiranje klase:
class ime_klase [( klase roditelji ) ]:
izraz1
izraz2
...
def metoda1 () :
...
def metoda2 () :
...
...
sintaksa

Definiranje klase:
class ime_klase [( klase roditelji ) ]:
izraz1
izraz2
...
def metoda1 () :
...
def metoda2 () :
...
...

ilustracija: atributi, funkcije, . . .


Provjera da li neki objekt instanca neke klase:
>>> class Moja_klasa :
... x =23
... >>> objekt3 =5
>>> objekt1 = Moja_klasa () >>> isinstance ( objekt1 ,
>>> objekt1 . x =51 Moja_klasa )
>>> print ( objekt1 . x ) True
51 >>> isinstance ( objekt3 ,
>>> objekt2 = Moja_klasa () Moja_klasa )
>>> print ( objekt2 . x ) False
23
Enkapsulacija
Python nema mehanizam enkapsuliranja podataka kao drugi programski jezici. Praksa
enkapsulacije je sugestivna: varijable koje bi trebale biti privatne sugeriraju se da su
tavke koristenjem podcrta (__) u prefiksu imena metoda/atributa:
self . __identifika to r # privatna varijabla klase ( private )
self . identifikator # javna varijabla klase ( public )
Enkapsulacija
Python nema mehanizam enkapsuliranja podataka kao drugi programski jezici. Praksa
enkapsulacije je sugestivna: varijable koje bi trebale biti privatne sugeriraju se da su
tavke koristenjem podcrta (__) u prefiksu imena metoda/atributa:
self . __identifika to r # privatna varijabla klase ( private )
self . identifikator # javna varijabla klase ( public )

Primjer (Osoba)
Klasa koja sadrzi javne i privatne varijable.

# 7. OOP u Pythonu

# jednostavni primjer klase i instanciranja

class Osoba () : # definiranje klase


" klasa s kojom instanciramo osobe "
def postaviIme ( self , ime ) : # metode
self . __ime = ime # privatni atributi
def dajIme ( self ) :
return self . __ime
def pozdrav ( self ) :
print ( " Dobrodosli , gdine % s u svijet Pythona ! " % self . name )

osoba1 = Osoba () # instanciranje objekta klase Osoba


osoba1 . postaviIme ( Pero )
osoba1 . pozdrav ()

osoba2 = Osoba ()
osoba2 . postaviIme ( Ivo )
osoba2 . pozdrav ()

print ( " Imena novih pythonista su % s i % s ! " %( osoba1 . getName () , osoba2 . getName () ) )
Inicijalizatori objekata
Za inicijalizaciju objekata koristimo posebnu funkciju zvanu konstruktor.

Primjer
Napisite Python klasu Pravokutnik u kojoj kontruktorom inicijalizirate vrijednosti
varijabli visina, sirina i metode koje ra
cunaju povrsinu odnosno opseg.
Inicijalizatori objekata
Za inicijalizaciju objekata koristimo posebnu funkciju zvanu konstruktor.

Primjer
Napisite Python klasu Pravokutnik u kojoj kontruktorom inicijalizirate vrijednosti
varijabli visina, sirina i metode koje ra
cunaju povrsinu odnosno opseg.

# Pravokutnik sa slucajnim duljinama stranicama


from random import *
import time

seed ()

class Pravokutnik () :
def __init__ ( self , sirina , duljina ) :
self . sirina = sirina
self . duljina = duljina

def povrsina ( self ) :


return self . duljina * self . sirina

def opseg ( self ) :


return 2*( self . duljina + self . sirina )

# glavni program

pravokutnici = []

for i in range (1 ,3) :


pravokutnik = Pravokutnik ( random () *10 , random () *10)
pravokutnici . append ( pravokutnik )

for pravokutnik in pravokutnici :


print " Povrsina pravokutnika je %.2 f , a opseg %.2 f " % ( pravokutnik . povrsina
() , pravokutnik . opseg () )
Nasljedivanje
Nasljedivanje je mehanizam stvaranja novih klasa koje specijaliziraju ili mijenjaju
ponasanje postoje
ce klase.
class A :
varA = 42
def method1 ( self ) :
print ( " Class A : method1 " )
class B :
varB = 37
def method1 ( self ) :
print ( " Class B : method1 " )
def method2 ( self ) :
print ( " Class B : method2 " )

class C (A , B ) : # Nasljedjuje od A i B
varC = 3.3
def method2 ( self ) :
print ( " Klasa B : override : -) " )
def method3 ( self ) :
print ( " Class C : method3 " )

class D ( A ) :
varD =100
def method4 ( self ) :
print ( " Subclass of A " )

objekt2 = B ()
objekt3 = C ()
objekt5 = D ()

# print ( objekt2 . varA ) # greska : objekt2 nema atribut varA


objekt3 . varA # valjan ispis : 42
Nasljedivanje

Primjer klase i podklase:

Primjer (SPAM filter)


Napisite Python klasu koja
ce dani niz pro
cistiti od odredene rije
ci.

class Filter :
def __init__ ( self ) :
self . blokirano =[]
def filter ( self , niz ) :
return [ x for x in niz if x not in self . blokirano ]

class SPAMFilter ( Filter ) :


def __init__ ( self ) :
self . blokirano =[ SPAM ]

uzorak = Filter ()
print ( uzorak . filter ([1 ,2 ,3]) )

filteruzorak = SPAMFilter ()
print ( filteruzorak . filter ([ SPAM , SPAM ,1 ,4 ,2 , SPAM ,6 ,5]) )
Zadaci

Zadatak 1
1 Napisite Python program u kojem ce te definirati klasu Trokut koja u sebi sadrzi
zasti
cene atribute a, b, c i javne metode povrsina() i opseg() koje ce ra cunati
povrsinu odnosno opseg trokuta. Definirajte konstruktor koji ce inicijalizirati
objekt klase.
2 Definirajte Python klasu JednakokracniTrokut nasljedenu iz klase Trokut koji u
konstruktor prima samo parametre a, b i prosljeduje konstuktoru bazne klase.
Rjesenje.

# Trokut

import math

class Trokut :
" klasa koja definira trokut "
def __init__ ( self ,x ,y , z ) :
self . _a = x
self . _b = y
self . _c = z

def opseg ( self ) :


return self . _a + self . _b + self . _c

def povrsina ( self ) :


s =( self . _a + self . _b + self . _c ) /2.0
return math . sqrt ( s *( s - self . _a ) *( s - self . _b ) *( s - self . _c ) )

class J e d n ak o k r a c n i T ro k u t ( Trokut ) :
def __init__ ( self ,a , b ) :
Trokut . __init__ ( self ,a ,b , b )

# glavni dio programa


trokut1 = Trokut (3 ,4 ,5)
trokut2 = J e dn a k o k r a c n iT r o k u t (4 ,3)
print " povrsina trokut1 = " , trokut1 . povrsina ()
print " povrsina trokut2 = " , trokut2 . povrsina ()
Moduli i paketi

Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Vise modula zajedno

cini paket. Moduli i paketi predstavljaju Python knjiznicu (engl. library).

Poziv modula postize se naredbom import:


1 Modul stvara novi prostor imena koji sluzi svim objektima definiranim u pripadnoj
izvornoj datoteci.

>>> import this # Python zen - mudrost


Moduli i paketi

Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Vise modula zajedno

cini paket. Moduli i paketi predstavljaju Python knjiznicu (engl. library).

Poziv modula postize se naredbom import:


1 Modul stvara novi prostor imena koji sluzi svim objektima definiranim u pripadnoj
izvornoj datoteci.
2 Modul izvrsava k
od koji je sadrzan unutar novonastalog prostora imena.

>>> import this # Python zen - mudrost


Moduli i paketi

Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Vise modula zajedno

cini paket. Moduli i paketi predstavljaju Python knjiznicu (engl. library).

Poziv modula postize se naredbom import:


1 Modul stvara novi prostor imena koji sluzi svim objektima definiranim u pripadnoj
izvornoj datoteci.
2 Modul izvrsava k
od koji je sadrzan unutar novonastalog prostora imena.
3 Modul izvrsava ime unutar pozivatelja, koje se odnosi na prostor imena modula.
Ovo ime podudara se s imenom modula.

>>> import this # Python zen - mudrost


Moduli i paketi

Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Vise modula zajedno

cini paket. Moduli i paketi predstavljaju Python knjiznicu (engl. library).

Poziv modula postize se naredbom import:


1 Modul stvara novi prostor imena koji sluzi svim objektima definiranim u pripadnoj
izvornoj datoteci.
2 Modul izvrsava k
od koji je sadrzan unutar novonastalog prostora imena.
3 Modul izvrsava ime unutar pozivatelja, koje se odnosi na prostor imena modula.
Ovo ime podudara se s imenom modula.
Drugim rije
cima, unutar jednog programa mozemo uklju
civati i druge programe.
>>> import this # Python zen - mudrost
Biblioteke

Primjer upotrebe import:


Prva programska skripta:
# datoteka : primjer . py
a = 37 # Varijabla
def A : # Funkcija
print ( " Ja sam u A " )
class K : # Klasa
def B ( self ) :
print ( " Ja sam u K . B " )
b = K () # Tvorba instance

uvoz u drugu programsku skriptu:


import sys
# sys . path . append () # radni folder
import primjer # Ucitava u memoriju i izvodi modul primjer
print ( primjer . a ) # Dohvaca izvodi neki clan ( varijablu ) modula primjer
primjer . A () # Dohvaca i izvodi funkciju iz modula
c = primjer . K () # Dohvaca i izvodi klasu iz modula , tvorba objekta
Moduli u Python biblioteci

Moduli se mogu u
citati (importirati) koriste
ci alternativna imena, i to upotrebom
poveznice as.
Na primjer:
import os as sustav
import socket as mreza
sustav . chdir ( " .. " )
mreza . gethostname ()
...
import math as matematika
x = matematika . sqrt (2)
Zadaci

Zadatak 2
Napisite Python program u kojem ce definirati klasu za rad s racionalnim brojevima.
Koristeci operatore iz klase definirajte aritmeticke operacije s razlomcima.
Rjesenje.
class razlomak :
def __init__ ( self , num , denom = 1) :
self . numerator = int ( num )
self . denominator = int ( denom )

# formalni string reprezetant


def __repr__ ( self ) :
return " racionalni broj : % s /% s " % ( self . numerator , self . denominator )
# strin treprezetant
def __str__ ( self ) :
return " % g /% g " % ( self . numerator , self . denominator )

# aritmeticki operatori
def __add__ ( self , drugi ) : # operator s lijeva
num , denom = self . numerator * drugi . denominator + self . denominator * drugi .
numerator , self . denominator * drugi . denominator
d = gcd ( num , denom )
return razlomak ( num /d , denom / d )

def __mul__ ( self , drugi ) :


return razlomak ( self . numerator * drugi . numerator , self . denominator * drugi .
denominator )

# operatori us poredjiv anja


def __eq__ ( self , drugi ) :
return ( self . numerator * drugi . denominator == self . denominator * drugi .
numerator )

def __ne__ ( self , drugi ) :


return not self == drugi

def __le__ ( self , drugi ) :


return ( self . numerator * drugi . denominator <= self . denominator * drugi .
numerator )

def __lt__ ( self , drugi ) :


return ( self <= drugi and self != drugi )

def __pow__ ( self , k ) :


return razlomak ( self . numerator ** k , self . denominator ** k )

def __ge__ ( self , drugi ) :


pass

def __gt__ ( self , drugi ) :


pass

def gcd (a , b ) :
if b ==0:
return a
return gcd (b , a % b )
Rjesenje.

# test . py
from razlomci import razlomak , gcd

a = razlomak (2 ,8)
b = razlomak (3 ,4)

print a + b
print a * b
GUI - rad s grafickim suceljem
Prakticna primjena OOP-a je implementacija struktura podataka grafi ckog prikaza.
Python u svojoj temeljnoj distribuciji sadrzi Tk biblioteku za rad s grafikom (Tk
interface=Tkinter).
GUI - rad s grafickim suceljem
Prakticna primjena OOP-a je implementacija struktura podataka grafi ckog prikaza.
Python u svojoj temeljnoj distribuciji sadrzi Tk biblioteku za rad s grafikom (Tk
interface=Tkinter).

Koristit
cemo graphics.py za rad s grafikom i ona u sebi sadrzi klasu koja je izvedena
iz klasa implementiranih u Tk biblioteci.
GUI - rad s grafickim suceljem
Prakticna primjena OOP-a je implementacija struktura podataka grafi ckog prikaza.
Python u svojoj temeljnoj distribuciji sadrzi Tk biblioteku za rad s grafikom (Tk
interface=Tkinter).

Koristit
cemo graphics.py za rad s grafikom i ona u sebi sadrzi klasu koja je izvedena
iz klasa implementiranih u Tk biblioteci.

Za neke druge grafi


cke biblioteke pogledati: wxPython, PyQt, ...
Moduli u graphics.py paketu I

GraphWin objekt predstavlja grafi


cki prozor i prostor u kojem se mogu prikazati
grafi
cki elementi
GraphWin(title,width,height) instancira objekt klase GraphWin koji ima
naziv title, i dimenzije width height.
plot(x,y,color) metoda crta piksel na poziciji (x, y ) boje color.
setBackground(color) postavlja boju pozadine prozora
close() metoda zatvara aktivni prozor
getMouse() metoda vra
ca Point objekt na poziciji na kojoj korisnik klikne
misem
setCoords(x1,y1,x2,y2) postavlja koordinanti sustav prozora (x1,y1)
(x2,y2) dijagonala prozora

Graphics objekti modul predstavlja geometrijske elemene tocke, pravca, kruznice,


elipse, pravokutnika, poligona i teksta redom kao klase imenom Point, Line,
Circle, Oval, Rectangle, Polygon,Text
setFill(color) postavlja boju interijera grafi
ckog objekta
setOutline(color) postavlja boju oruba geometrijskog objekta
setWidth(pixels) metoda postavlja sirinu oruba objekta na veli
cinu pixels
draw(GraphWinObj) metoda crta objekt unutar GraphWinObj objekta
undraw() brise objekt iz grafi
ckog prozora
Moduli u graphics.py paketu II
move(dx,dy) pomjeri objekt za dx jedinica po osi x, i dy jedinica po osi y
clone() metoda vra
ca duplikat objekta koji je u neiscrtanom stanju
Point metode
Point(x,y) stvara to
cku s danim koordinatama
getX(),getY() vra
ca x, odnosno y koordinatu
Line metode
Line(pt1,pt2) metoda konstruira duzinu od to
caka pt1,pt2
getCenter() vra
ca poloviste segmenta
getP1(),
getP2() vra
ca to
cke koje
cine krajeve duzine
Circle metode
Circle(center,radius) metoda konstuira kruznicu s danim centrom i
radijusom
getCenter() vrati to
cku centra kruznice
getRadius() vra
ca duljinu radijusa kruznice
getP1(), getP2() vra
ca 2 krajnje to
cke horizontalog promjera
Rectangular metode
Rectangle(pt1, pt2) konsturira pravokutnik
ciju dijagonalu tvore to
cke
pt1,pt2
Moduli u graphics.py paketu III
getCenter() sjeciste dijagonala pravokutnika
getP1(), getP2() vra
ca kranje to
cke s kojima je instanciran objekt
Oval metode
Oval(pt1, pt2) konsturira elipsu u okviru odredenim dijagonalom
cije su
krajnje to
cke pt1,pt2.
getCenter() vra
ca to
cku centra elipse
getP1(), getP2() vra
ca kranje to
cke s kojima je instanciran objekt
Poylgon metode
Polygon(pt1, pt2, pt3, ...) konstuira poligon
ciji vrhovi su to
cke
pt1,pt2,...
getPoints() vra
ca listu to
caka koje tvore poligon
Text metode
Text(anchor, string) stvara objekt koji na to
cki anchor sadrzi string string.
setText(string) postavlja tekst objekta na string string
getText() vrati trenutni string
getAnchor() vrati to
cku na kojoj je postavljen tekst
setFace(family) promjena fonta u familiju family. Familiju fonta mozemo
birati izmedu helvetica, courier, times roman, i arial
setSize(point) promjena veli
cine slova na veli
cinu point
Moduli u graphics.py paketu IV

setStyle(style) promjena stila fonta na stil style koji moze biti normal,
bold, italic, i bold italic
Objekti unosa omogu
cuju korisniku unos ili promjenu vrijednosti u grafi
cki element.
Entry(center, width) pozicionira tekstualni okvir na to
cki center koja ima
sirinu width
getAnchor() vra
ca to
cku na kojoj se objekt nalazi
getText() vra
ca tekst koji se nalazi u objektu
setText(string) azurira vrijednost teksta na string
Prikaz slike paket omogu
cava minimalnu mogucnost unosa slike (JPEG,GIF,PPM )
unutar GraphWin objekta. Neke od specifi
cnih metoda:
Image(center, filename) konstruira sliku na to
cki center iz datoteke
filename
getAnchor() vra
ca to
cku na kojoj se nalazi slika
Stvaranje boja paket omogu cuje koristenje standarne imenovane palete boja kao sto
je npr. red, purple, green, cyan,. . .
ili mjesanje RGB boja s metodom rgb color(r,g,b) gdje su r,g,b cjelobrojne
vrijednosti od 0 . . . 255 i odgovaraju redom crvenoj, zelenoj i plavoj boji.
Primjer
Napravite grafi
cki prozor u kojem
ce biti prikazan uzorak za igru kruzi
c-krizi
c.
Primjer
Napravite grafi
cki prozor u kojem
ce biti prikazan uzorak za igru kruzi
c-krizi
c.

# create a default 200 x200 window


from graphics import *
win = GraphWin ( " Tic - Tac - Toe " )
# set coordinates to go from (0 ,0) in the lower left
# to (3 ,3) in the upper right .
win . setCoords (0.0 , 0.0 , 3.0 , 3.0)
# Draw vertical lines
Line ( Point (1 ,0) , Point (1 ,3) ) . draw ( win )
Line ( Point (2 ,0) , Point (2 ,3) ) . draw ( win )
# Draw horizontal lines
Line ( Point (0 ,1) , Point (3 ,1) ) . draw ( win )
Line ( Point (0 ,2) , Point (3 ,2) ) . draw ( win )
Primjer
Napravite grafi
cki prozor u kojem cete s 3 klika misa definirati to
cke. Napravite objekt
trokut uz pomo c tih 3 to
cke i definirajte mu boju ispune i boju oruba.
Primjer
Napravite grafi
cki prozor u kojem cete s 3 klika misa definirati to
cke. Napravite objekt
trokut uz pomo c tih 3 to
cke i definirajte mu boju ispune i boju oruba.

# program za crtanje trokuta


from graphics import *

def crtajTrokut () :

win = GraphWin ( " Trokut " )


win . setCoords (0.0 , 0.0 , 10.0 , 10.0) # postovi koordinatni sustav

message = Text ( Point (5 , 0.5) , " Oznacite 3 tocke : " ) # tekst komentara
message . draw ( win )

# ucitaj i nacrtaj 3 tocke


p1 = win . getMouse ()
p1 . draw ( win )
p2 = win . getMouse ()
p2 . draw ( win )
p3 = win . getMouse ()
p3 . draw ( win )

# koristi poligon objekt kako bi nacrtao trokut


triangle = Polygon ( p1 , p2 , p3 )
triangle . setFill ( " red " ) # postavi ispunu
triangle . setOutline ( " cyan " ) # postavi obrub
triangle . draw ( win ) # nacrtal trokut

# novi klik je izlaz


message . setText ( " Klikni jos jednom na izlaz ... " )
win . getMouse ()

crtajTrokut ()
Primjer
Napravite graficki program koji
ce unositi temperaturu u Celziusovim stupnjevima, a
vra
cati vrijednost u Fahrenheit skali.
Primjer
Napravite graficki program koji
ce unositi temperaturu u Celziusovim stupnjevima, a
vra
cati vrijednost u Fahrenheit skali.

# graficko sucelje za pretvaranje temperature iz celziusa u Farenheit temp .

from graphics import * # ukljucivanje grafickog paketa


def main () :
win = GraphWin ( " Celsius Converter " , 300 , 200)
win . setCoords (0.0 , 0.0 , 3.0 , 4.0)
# Draw the interface
Text ( Point (1 ,3) , " Celsius Temperature : " ) . draw ( win )
Text ( Point (1 ,1) , " Fahrenheit Temperature : " ) . draw ( win )
input = Entry ( Point (2 ,3) , 5)
input . setText ( " 0.0 " )
input . draw ( win )
output = Text ( Point (2 ,1) ," " )
output . draw ( win )
button = Text ( Point (1.5 ,2.0) ," Convert It " )
button . draw ( win )
Rectangle ( Point (1 ,1.5) , Point (2 ,2.5) ) . draw ( win )

# pricekaj za klik misa


win . getMouse ()
# pretvori vrijednost
celsius = eval ( input . getText () )
fahrenheit = 9.0/5.0 * celsius + 32
# prikazi rezultati i promijeni tekst dugmeta
output . setText ( " %0.1 f " % fahrenheit )
button . setText ( " Quit " )
# cekaj za klik i izlaz
win . getMouse ()
win . close ()

main ()
Zadaci

Zadatak
Napisite grafi
cki programu u Pythonu koriste
ci graphics.py biblioteku kako bi
implementirali program crtanja grafa neke funkcije. Program uzima nekoliko
parametara iz ulaza: Python regularni izraz koji zadaje realnu funkciju jedne realne
varijable te granice domene l < r . Kad korisnik unese vrijednosti parametara program
crta graf funkcije f (x) na domeni [l, r ].
Napomena: Graf mozete diskretno aproksimirati s to ckama (xi , f (x)), i = 1, . . . , k
gdje je k broj uzoraka i zatim to
cke grafa povezati duzinama.
Zakljucak

dalje?
Sto

Minicourse: kratki uvod u Python, NIJE CIJELI KURS. Zahtjev na samostalni rad
uz preporu
cenu literaturu.
Zakljucak

dalje?
Sto

Minicourse: kratki uvod u Python, NIJE CIJELI KURS. Zahtjev na samostalni rad
uz preporu
cenu literaturu.
Pitanja iz Pythona ? Konzultacije u dogovoru sa asistentima.
Zakljucak

dalje?
Sto

Minicourse: kratki uvod u Python, NIJE CIJELI KURS. Zahtjev na samostalni rad
uz preporu
cenu literaturu.
Pitanja iz Pythona ? Konzultacije u dogovoru sa asistentima.
Python u primjeni ostale vjezbe.
Literatura

Mark Pilgrim, Dive Into Python 3, APress, 2009 [besplatno]

James Payne, Beginning Python: Using Python 2.6 and Python 3.1, Wiley
Publishing, Inc., 2011.
J. M. Zelle, Python: Introduction to Computer Science, 2003.

You might also like