Python – kratak uvod Uvod u raˇ cunalne mreˇze i usluge
Odjel za matematiku, 2014.
Jeziˇcne znaˇcajke
Python Python je interpreterski, interaktivni programski jezik koji podrˇzava nekoliko programerskih paradigmi s naglaskom na ˇ citljiv kod.
Jeziˇcne znaˇcajke
Python Python je interpreterski, interaktivni programski jezik koji podrˇzava nekoliko programerskih paradigmi s naglaskom na ˇ citljiv kod. Tvorac: Guido von Rossum Primjena: MIT, NASA, IBM, Google, . . . Licenca: open-source Interpretacija medukoda - izvrˇsavanje ’naredbe po naredbu’ Jezik visoke razine - pretpostavljeno podrˇzava ADT ˇ cista sintaksa – relativno lagani prijelaz s pseudokoda na implementaciju podrˇzava nekoliko programerskih paradigmi (proceduralno programiranje, OOP, funkcionalno programiranje, ...) proˇsirivost (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 (izvrˇsavaju). 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) Napiˇsite program koji ´ ce za uneseno ime napisati ”Dobrodoˇsli, ime, u svijet Pythona”. # ime . py ime = raw_input ( " Unesite ime : " ) # ’ ime ’ print " Dobrodosli " + ime + " u svijet Pythona " python ime . py
Numeriˇcki tipovi cjelobrojni tip
Konverzija tipa
>>> 1 + 1 2 >>> a = 4
Neki tipovi se moraju eksplicitno konvertirati!
brojevi kliznog zareza
>>> 1.5 >>> >>> >>> 1 >>> 1.5
>>> c = 2.1
kompleksni tip brojeva (ugradeni tip!) >>> a =1.5+0.5 j >>> a . real 1.5 >>> a . imag 0.5
boolean tip >>> 3 > 4 False >>> test = (3 > 4) >>> test False >>> type ( test ) < type ’ bool ’ >
3/2. a = 3 b = 2 a/b a / float ( b )
Ugradeni spremnici podataka
Python nudi mogu´ cnost koriˇstenja 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 moˇze biti sastavljena od objekata razliˇ citog tipa. Operacije: indeksiranje: pristup pojedinim objektima sadrˇzanim 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] >>> type ( l ) < type ’ list ’ > >>> l [2] 3 >>> l [ -1] 5 >>> l [ -2] 4 >>> l [3:] [4 , 5] >>> l [:3] [1 , 2 , 3] >>> l [::2] [1 , 3 , 5]
>>> l [0] = >>> l [28 , 2 , 3 , >>> l [2:4] >>> l [28 , 2 , 3 ,
28 4 , 5] = [3 , 8] 8 , 5]
Liste mogu sadrˇzavati razliˇ cite tipove podataka >>> >>> [3 , >>> (2 ,
l = [3 , 2 , ’ hello ’] l 2 , ’ hello ’] l [1] , l [2] ’ hello ’)
Liste Operacije preko OO metoda. >>> >>> >>> [1 , >>> 6 >>> [1 , >>> >>> [1 , >>> >>> [7 , >>>
l = [1 , 2 , 3 , 4 , 5] l . append (6) l 2 , 3 , 4 , 5 , 6] l . pop () l 2 , 3 , 4 , 5] l . extend ([6 , 7]) l 2 , 3 , 4 , 5 , 6 , 7] l . reverse () l 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 zadrˇzi znakovni tip podatka. Stringovi podrˇzavaju 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 dopuˇstaje 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 sadrˇze neuredene, jedinstvene elemente. >>> s = set (( ’a ’ , ’b ’ , ’c ’ , ’a ’) ) >>> s set ([ ’a ’ , ’c ’ , ’b ’ ]) >>> s . difference (( ’a ’ , ’b ’) ) set ([ ’c ’ ])
Rjeˇcnici
Rjeˇ cnik kao spremnik podataka poop´ cuje listu - indeksiranje elemenata moˇze 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 pridruˇzeni 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 podrˇzava ve´ cinu operatora i operacija koji su podrˇzani u ostalim programskim jezicima: 1
aritmetiˇ cke operacije (+, −, ∗∗, /, . . .)
2
operatori pridruˇzivanja (=, + =, ∗ =, ∗∗ =, . . .)
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,...’ key:izraz,... [izraz,...] (izrazr,...) f(izraz,...) x[index1:index2] x[index] x.attr x**y x +x, -x x*y, x/y, x//y, x%y x+y, x-y x¡¡y, x¿¿y x&y x ∧y x—y x < y , x <= y , x > y , x >= y , x <> y , x! = y , x == y x is y, x is not y x in y, x not in y not x x and y x or y lambda arg,...: izraz
String pretvorba Stvaranje rjeˇ cnika Stvaranje liste Stvaranje n-terca ili jednostavne zagrade Poziv funkcije Kriˇska (slicing) Indeksiranje (indexing) Referenca atributa Eksponent (x na y potenciju) Bitwise NE (NOT) Unarni plus ili minus Mnoˇzenje, dijeljenje, dijeljenje na cijeli broj, ostatak Zbajanje, oduzimanje Lijevi pomak, desni pomak Bitwise I (AND) Bitwise eksluzivni ILI (XOR) Bitwise ILI (OR) Usporedbe Provjera identiteta Provjera ˇ clanstva Bool-ov NE (NOT) Bool-ov I (AND) Bool-ov ILI (OR) Anonimna jednostavna funkcija
Primjeri Primjer Napiˇsite Python program koji ´ ce za unesene stranice trokuta a, b, c izraˇ cunati povrˇsinu tog trokuta.
Primjeri Primjer Napiˇsite Python program koji ´ ce za unesene stranice trokuta a, b, c izraˇ cunati povrˇsinu 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 Napiˇsite Python program koji ´ ce za unesene stranice trokuta a, b, c izraˇ cunati povrˇsinu 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 Napiˇsite Python program koji ´ ce sortirati unesenu listu brojeva pomo´ cu ugradene funkcije sort().
Primjeri Primjer Napiˇsite Python program koji ´ ce za unesene stranice trokuta a, b, c izraˇ cunati povrˇsinu 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 Napiˇsite 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 podrˇzava 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 (Aritmetiˇcka sredina) Za dani niz podataka treba odrediti njegovu aritmetiˇ cku sredinu.
Primjeri
Primjer (Aritmetiˇcka 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 ispiˇsite n Fibonaccijevih brojeva.
Fibonacci
Primjer Za dani n ispiˇsite 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 vra´ caju 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 sadrˇze vrijednost varijable.
Prosljedivanje po referenci? Ukoliko je vrijednost promijenjiva, onda se moˇze 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 element liste (ili neke druge kolekcije) argument druge funkcije Funkcije kao metode – funkcije unutar klasa.
>>> va = variable_args >>> va ( ’ three ’ , x =1 , y =2) args is ( ’ three ’ ,) kwargs is { ’y ’: 2 , ’x ’: 1}
Primjeri Primjer (Aritmetiˇcka 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 (Aritmetiˇcka 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 def Prime ( broj ) : for p in range (2 , broj ) : if ( broj % p == 0) : return False return True
import math def prime_sum (* brojevi ) : suma =0.0 for x in brojevi : if Prime ( x ) : suma = suma + x return suma
Zadaci
Zadatak Napiˇsite 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 Napiˇsite Python program koji ´ ce za uneseno ime i prezime generirati korisniˇ cko ime tako da ga sloˇzi 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 sadrˇzi atribute i metode s postavljenim vrijednostima kako je propisala klasa koju je instancira. Vaˇzne 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 moˇze biti podklasa neke druge klase)
OOP u Pythonu
Klasa ili razred je Python objekt s nekoliko znaˇ cajki: Objekt klase moˇze 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 moˇze 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 moˇze 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 moˇze 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 moˇze imati posebno ime definirano od Pythona s dvije podcrte (’ ’) ispred i iza imena. Python upotrebljava takve posebne metode za neke operacije koje se izvrˇsavaju na instancama klase. (konstruktor)
OOP u Pythonu
Klasa ili razred je Python objekt s nekoliko znaˇ cajki: Objekt klase moˇze 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 moˇze imati posebno ime definirano od Pythona s dvije podcrte (’ ’) ispred i iza imena. Python upotrebljava takve posebne metode za neke operacije koje se izvrˇsavaju na instancama klase. (konstruktor) Klasa moˇze 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, . . . >>> ... ... >>> >>> >>> 51 >>> >>> 23
class Moja_klasa : x =23 objekt1 = Moja_klasa () objekt1 . x =51 print ( objekt1 . x ) objekt2 = Moja_klasa () print ( objekt2 . x )
Provjera da li neki objekt instanca neke klase:
>>> objekt3 =5 >>> isinstance ( objekt1 , Moja_klasa ) True >>> isinstance ( objekt3 , Moja_klasa ) False
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 koriˇstenjem podcrta (__) u prefiksu imena metoda/atributa: self . __identifika to r self . identifikator
# privatna varijabla klase ( private ) # 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 koriˇstenjem podcrta (__) u prefiksu imena metoda/atributa: self . __identifika to r self . identifikator
# privatna varijabla klase ( private ) # javna varijabla klase ( public )
Primjer (Osoba) Klasa koja sadrˇzi 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 Napiˇsite Python klasu Pravokutnik u kojoj kontruktorom inicijalizirate vrijednosti varijabli visina, sirina i metode koje raˇ cunaju povrˇsinu odnosno opseg.
Inicijalizatori objekata Za inicijalizaciju objekata koristimo posebnu funkciju zvanu konstruktor.
Primjer Napiˇsite Python klasu Pravokutnik u kojoj kontruktorom inicijalizirate vrijednosti varijabli visina, sirina i metode koje raˇ cunaju povrˇsinu 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 ponaˇsanje 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) Napiˇsite 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
Napiˇsite Python program u kojem ´ ce te definirati klasu Trokut koja u sebi sadrˇzi zaˇsti´ cene atribute a, b, c i javne metode povrsina() i opseg() koje ´ ce raˇ cunati povrˇsinu 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.
Rjeˇsenje. # 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. Viˇse modula zajedno ˇ cini paket. Moduli i paketi predstavljaju Python knjiˇznicu (engl. library). Poziv modula postiˇze se naredbom import: 1
Modul stvara novi prostor imena koji sluˇzi 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. Viˇse modula zajedno ˇ cini paket. Moduli i paketi predstavljaju Python knjiˇznicu (engl. library). Poziv modula postiˇze se naredbom import: 1
Modul stvara novi prostor imena koji sluˇzi svim objektima definiranim u pripadnoj izvornoj datoteci.
2
Modul izvrˇsava kˆ od koji je sadrˇzan unutar novonastalog prostora imena.
>>> import this
# Python zen - mudrost
Moduli i paketi
Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Viˇse modula zajedno ˇ cini paket. Moduli i paketi predstavljaju Python knjiˇznicu (engl. library). Poziv modula postiˇze se naredbom import: 1
Modul stvara novi prostor imena koji sluˇzi svim objektima definiranim u pripadnoj izvornoj datoteci.
2
Modul izvrˇsava kˆ od koji je sadrˇzan unutar novonastalog prostora imena.
3
Modul izvrˇsava 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. Viˇse modula zajedno ˇ cini paket. Moduli i paketi predstavljaju Python knjiˇznicu (engl. library). Poziv modula postiˇze se naredbom import: 1
Modul stvara novi prostor imena koji sluˇzi svim objektima definiranim u pripadnoj izvornoj datoteci.
2
Modul izvrˇsava kˆ od koji je sadrˇzan unutar novonastalog prostora imena.
3
Modul izvrˇsava ime unutar pozivatelja, koje se odnosi na prostor imena modula. Ovo ime podudara se s imenom modula.
Drugim rijeˇ cima, unutar jednog programa moˇzemo ukljuˇ civati i druge programe. >>> import this
# Python zen - mudrost
Biblioteke
Primjer upotrebe import: Prva programska skripta: # datoteka : primjer . py a = 37 # def A : # print ( " Ja sam u A " ) class K : # def B ( self ) : print ( " Ja sam u K . B " ) b = K () #
Varijabla Funkcija Klasa
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 Napiˇsite Python program u kojem ´ ce definirati klasu za rad s racionalnim brojevima. Koriste´ ci operatore iz klase definirajte aritmetiˇ cke operacije s razlomcima.
Rjeˇsenje. 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 )
Rjeˇsenje.
# test . py from razlomci import razlomak , gcd a = razlomak (2 ,8) b = razlomak (3 ,4) print a + b print a * b
GUI - rad s grafiˇckim suˇceljem Praktiˇ cna primjena OOP-a je implementacija struktura podataka grafiˇ ckog prikaza. Python u svojoj temeljnoj distribuciji sadrˇzi Tk biblioteku za rad s grafikom (Tk interface=Tkinter).
GUI - rad s grafiˇckim suˇceljem Praktiˇ cna primjena OOP-a je implementacija struktura podataka grafiˇ ckog prikaza. Python u svojoj temeljnoj distribuciji sadrˇzi Tk biblioteku za rad s grafikom (Tk interface=Tkinter).
Koristit ´ cemo graphics.py za rad s grafikom i ona u sebi sadrˇzi klasu koja je izvedena iz klasa implementiranih u Tk biblioteci.
GUI - rad s grafiˇckim suˇceljem Praktiˇ cna primjena OOP-a je implementacija struktura podataka grafiˇ ckog prikaza. Python u svojoj temeljnoj distribuciji sadrˇzi Tk biblioteku za rad s grafikom (Tk interface=Tkinter).
Koristit ´ cemo graphics.py za rad s grafikom i ona u sebi sadrˇzi 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 miˇsem setCoords(x1,y1,x2,y2) – postavlja koordinanti sustav prozora (x1,y1) – (x2,y2) dijagonala prozora Graphics objekti – modul predstavlja geometrijske elemene toˇ cke, pravca, kruˇznice, 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() – briˇse 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 duˇzinu od toˇ caka pt1,pt2 getCenter() – vra´ ca poloviˇste segmenta getP1(), getP2() – vra´ ca toˇ cke koje ˇ cine krajeve duˇzine Circle metode Circle(center,radius) – metoda konstuira kruˇznicu s danim centrom i radijusom getCenter() – vrati toˇ cku centra kruˇznice getRadius() – vra´ ca duljinu radijusa kruˇznice 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() – sjeciˇste 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, ...) pt1,pt2,...
– konstuira poligon ˇ ciji vrhovi su toˇ cke
getPoints() – vra´ ca listu toˇ caka koje tvore poligon Text metode Text(anchor, string) – stvara objekt koji na toˇ cki anchor sadrˇzi 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 moˇzemo 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 moˇze 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) – aˇzurira vrijednost teksta na string Prikaz slike – paket omogu´ cava minimalnu mogu´ cnost 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 koriˇstenje standarne imenovane palete boja kao ˇsto je npr. ’red’, ’purple’, ’green’, ’cyan’,. . . ili ’mjeˇsanje’ 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 ’kruˇzi´ c-kriˇzi´ c’.
Primjer Napravite grafiˇ cki prozor u kojem ´ ce biti prikazan uzorak za igru ’kruˇzi´ c-kriˇzi´ 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 miˇsa 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 miˇsa 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 grafiˇ cki program koji ´ ce unositi temperaturu u Celziusovim stupnjevima, a vra´ cati vrijednost u Fahrenheit skali.
Primjer Napravite grafiˇ cki 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 Napiˇsite 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 moˇzete diskretno aproksimirati s toˇ ckama (xi , f (x)), i = 1, . . . , k gdje je k broj uzoraka i zatim toˇ cke grafa povezati duˇzinama.
Zakljuˇcak
ˇ dalje? Sto Minicourse: kratki uvod u Python, NIJE CIJELI KURS. Zahtjev na samostalni rad uz preporuˇ cenu literaturu.
Zakljuˇcak
ˇ 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.
Zakljuˇcak
ˇ 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 vjeˇzbe.
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.