python { kratak uvod - · pdf filejezi cne zna cajke python python je interpreterski,...

74
Python – kratak uvod Uvod u raˇ cunalne mreˇ ze i usluge Odjel za matematiku, 2014.

Upload: lethuy

Post on 15-Feb-2018

237 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Python – kratak uvodUvod u racunalne mreze i usluge

Odjel za matematiku, 2014.

Page 2: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Jezicne znacajke

Python

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

Tvorac: Guido von RossumPrimjena: 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.

Page 3: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Jezicne znacajke

Python

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

Tvorac: Guido von RossumPrimjena: 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.

Page 4: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Izvodenje python programa

2 nacina rada:

Interaktivni rad – u konzolu se upisuju naredbe programskog jezika koje se odmahinterpretiraju (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 iliWindows skripte pozivaju iz sistemske linije.

python imeskripte.py

Ugradeni kod – izvodenje Python koda u drugim programskim jezicima

Page 5: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Varijable i unos

U Pythonu nema ekplicitine deklaracije tipa varijable, interpreter na temeljuincijalizacije 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

Page 6: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Numericki tipovi

cjelobrojni tip

>>> 1 + 1

2

>>> a = 4

brojevi kliznog zareza

>>> c = 2.1

kompleksni tip brojeva (ugradeni tip!)

>>> a=1.5+0.5j

>>> a.real

1.5

>>> a.imag

0.5

boolean tip

>>> 3 > 4

False

>>> test = (3 > 4)

>>> test

False

>>> type(test)

<type ’bool’>

Konverzija tipa

Neki tipovi se moraju eksplicitno konvertirati!

>>> 3/2.

1.5

>>> a = 3

>>> b = 2

>>> a/b

1

>>> a/float(b)

1.5

Page 7: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Ugradeni spremnici podataka

Python nudi mogucnost koristenja ugradenih spremnika podataka u koje se moguspremati razliciti objekti.

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

N-terci (tuples): (1,10,3)

Rjecnici (dictionaries): {’a’:1,’b’:2,’c’:3}

Skupovi (sets)

U Pythonu je definiran poveci broj operacija za rad sa spomenutim tipovima podataka.

Page 8: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Liste

Uredena lista podataka, koje moze biti sastavljena od objekata razlicitog tipa.Operacije:

indeksiranje: pristup pojedinim objektima sadrzanim u listi

izrezivanje (slicing)

dodavanje i brisanje elemenata

pretvaranje u druge tipove podataka

Operacije preko operatora:

>>> 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]

Liste su promijenjive strukture podataka

>>> l[0] = 28

>>> l

[28, 2, 3, 4, 5]

>>> l[2:4] = [3, 8]

>>> l

[28, 2, 3, 8, 5]

Liste mogu sadrzavati razlicite tipovepodataka

>>> l = [3, 2, ’hello ’]

>>> l

[3, 2, ’hello ’]

>>> l[1], l[2]

(2, ’hello ’)

Page 9: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

ListeOperacije 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__ ’, ’

__getattribute__ ’, ’__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’]

>>>

Page 10: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

StringoviString je spremnik podataka koji zadrzi znakovni tip podatka.Stringovi podrzavaju operacije kao i u liste.

>>> a = "hello , world!"

>>> a[3:6] # 3rd to 6th (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’

>>>

Page 11: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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’])

Page 12: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Rjecnici

Rjecnik kao spremnik podataka poopcuje listu - indeksiranje elemenata moze se ucinitibilo 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 kljucevima mogu biti razlicitog tipa:

>>> d = {’a’:1, ’b’:2, 3:’hello’}

>>> d

{’a’: 1, 3: ’hello’, ’b’: 2}

Page 13: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Operacije i operatori

Python podrzava vecinu operatora i operacija koji su podrzani u ostalim programskimjezicima:

1 aritmeticke operacije (+,−, ∗∗, /, . . .)2 operatori pridruzivanja (=,+ =, ∗ =, ∗∗ =, . . .)

3 logicki operatori (x < y , x <= y , x > y , x >= y , x <> y , x! = y , x == y)

4 specijalizirane operacije na pojedinim tipovima podataka (ugradene metode uobjekte)

Page 14: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Operatori nad tipovima podataka:’izraz,...’ String pretvorba

key:izraz,... Stvaranje rjecnika

[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

x¡¡y, x¿¿y Lijevi pomak, desni pomak

x&y Bitwise I (AND)

x ∧ y Bitwise eksluzivni ILI (XOR)

x—y 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

Page 15: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjeri

Primjer

Napisite Python program koji ce za unesene stranice trokuta a, b, c izracunati povrsinutog 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 pomocu ugradenefunkcije sort().

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

lista.sort()

print lista

Page 16: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjeri

Primjer

Napisite Python program koji ce za unesene stranice trokuta a, b, c izracunati povrsinutog 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 pomocu ugradenefunkcije sort().

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

lista.sort()

print lista

Page 17: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjeri

Primjer

Napisite Python program koji ce za unesene stranice trokuta a, b, c izracunati povrsinutog 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 pomocu ugradenefunkcije sort().

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

lista.sort()

print lista

Page 18: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjeri

Primjer

Napisite Python program koji ce za unesene stranice trokuta a, b, c izracunati povrsinutog 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 pomocu ugradenefunkcije sort().

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

lista.sort()

print lista

Page 19: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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

Page 20: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Naredbe iteracijePonavljaj uz uvjet . . .

While . . .

>>> z = 1 + 1j

>>> while abs(z) < 100:

...: z = z**2 + 1

...:

>>> z

>>> ( -134+352j)

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

Page 21: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjeri

Primjer (Aritmeticka sredina)

Za dani niz podataka treba odrediti njegovu aritmeticku 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

Page 22: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjeri

Primjer (Aritmeticka sredina)

Za dani niz podataka treba odrediti njegovu aritmeticku 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

Page 23: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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 , " "

Page 24: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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 , " "

Page 25: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Funkcije

Funkcije su blokovi naredbi koji primaju vrijednosti ’izvana’ i vracaju vrijednostinjihova racunanja.Procedure su funkcije koje ne vracaju podatke.

>>> def test():

....: print(’in test function ’)

....:

....:

>>> test()

in test function

Primjer

Definirajte funkciju koja vraca aposolutnu vrijednost broja.

def abs(x):

if x<0:

return -x

else:

return x

print abs(-5) # ispisuje 5

Page 26: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Funkcijski argumenti

Parametri su varijable cije vrijednosti uzima funkcija. Parametri se prosljeduju kaoreference 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]

Page 27: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Globalne i lokalne varijable

Varijable deklarirane izvan funkcija mogu biti referencirane u funkcijama, ali ne mogubiti mijenjane.Ukoliko se koristi global kljucna rijec onda je unutar funkcija moguce mijenjativrijednost 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

Page 28: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Svojstva funkcija

Poseban tip argumenata:

*args – bilo koji broj pozicioniranih argumenata spremljenih u nterac.

*kwargs – bilo koji broj kljuceva spremljenih u rjecnik

>>> 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

>>> va = variable_args

>>> va(’three’, x=1, y=2)

args is (’three ’,)

kwargs is {’y’: 2, ’x’: 1}

Funkcije kao metode – funkcije unutar klasa.

Page 29: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjeri

Primjer (Aritmeticka sredina)

Funkcija aritmeticke 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 zaproslijedene brojeve racunati 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

Page 30: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjeri

Primjer (Aritmeticka sredina)

Funkcija aritmeticke 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 zaproslijedene brojeve racunati 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

Page 31: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Zadaci

Zadatak

Napisite Python program koji ce aproksimirati broj π tako da izracunate konacnusumu niza 4/1 − 4/3 + 4/5 − 4/7 + 4/9 − 4/11 + . . .. Korisnik treba unjeti broj n kojipredstavlja broj clanova ovog niza.

Zadatak

Napisite Python program koji ce za uneseno ime i prezime generirati korisnicko imetako da ga slozi kao string od prvog znaka imena i od prvih sedam znakova prezimena.Ime i prezime moraju biti prebaceni u mala slova.

Page 32: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

OOP – objektno orijentirano programiranje

Klase – kolekcija podataka (atributa) sa skupom metoda za pristup i manipulaciju timpodacima.

Objekt – instanca klase - varijabla koja sadrzi atribute i metode s postavljenimvrijednostima kako je propisala klasa koju je instancira.

Vazne karakteristike OOP:

1 polimorfizam (engl. polymorphism) – manipulirati objektima bez eksplicitnogznanja o tipu ili klasi kojima pripadaju objekti.

2 enkapsulacija (engl. encapsulation) – atributima i metodama se mogu pridjelitirazine pristupa koje mogu biti privatne ili javne.

3 nasljedivanje (engl. inheritance) – skupovni odnos izmedu klasa (klasa moze bitipodklasa neke druge klase)

Page 33: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko znacajki:

Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznatkao 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 operacijekoje se izvrsavaju na instancama klase. (konstruktor)

Klasa moze podatke i metode naslijediti od drugih klasa

Page 34: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko znacajki:

Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznatkao 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 operacijekoje se izvrsavaju na instancama klase. (konstruktor)

Klasa moze podatke i metode naslijediti od drugih klasa

Page 35: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko znacajki:

Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznatkao 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 operacijekoje se izvrsavaju na instancama klase. (konstruktor)

Klasa moze podatke i metode naslijediti od drugih klasa

Page 36: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko znacajki:

Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznatkao 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 operacijekoje se izvrsavaju na instancama klase. (konstruktor)

Klasa moze podatke i metode naslijediti od drugih klasa

Page 37: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

OOP u Pythonu

Klasa ili razred je Python objekt s nekoliko znacajki:

Objekt klase moze se pozivati kao da je funkcija. Poziv stvara novi objekt, poznatkao 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 operacijekoje se izvrsavaju na instancama klase. (konstruktor)

Klasa moze podatke i metode naslijediti od drugih klasa

Page 38: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

sintaksa

Definiranje klase:

class ime_klase [(klase roditelji)]:

izraz1

izraz2

...

def metoda1 ():

...

def metoda2 ():

...

...

ilustracija: atributi, funkcije, . . .

>>> class Moja_klasa:

... x=23

...

>>> objekt1=Moja_klasa ()

>>> objekt1.x=51

>>> print(objekt1.x)

51

>>> objekt2=Moja_klasa ()

>>> print(objekt2.x)

23

Provjera da li neki objekt instanca neke klase:

>>> objekt3 =5

>>> isinstance(objekt1 ,

Moja_klasa)

True

>>> isinstance(objekt3 ,

Moja_klasa)

False

Page 39: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

sintaksa

Definiranje klase:

class ime_klase [(klase roditelji)]:

izraz1

izraz2

...

def metoda1 ():

...

def metoda2 ():

...

...

ilustracija: atributi, funkcije, . . .

>>> class Moja_klasa:

... x=23

...

>>> objekt1=Moja_klasa ()

>>> objekt1.x=51

>>> print(objekt1.x)

51

>>> objekt2=Moja_klasa ()

>>> print(objekt2.x)

23

Provjera da li neki objekt instanca neke klase:

>>> objekt3 =5

>>> isinstance(objekt1 ,

Moja_klasa)

True

>>> isinstance(objekt3 ,

Moja_klasa)

False

Page 40: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

EnkapsulacijaPython nema mehanizam enkapsuliranja podataka kao drugi programski jezici. Praksaenkapsulacije je sugestivna: varijable koje bi trebale biti privatne sugeriraju se da sutavke koristenjem podcrta (__) u prefiksu imena metoda/atributa:

self.__identifikator # 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 ()))

Page 41: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

EnkapsulacijaPython nema mehanizam enkapsuliranja podataka kao drugi programski jezici. Praksaenkapsulacije je sugestivna: varijable koje bi trebale biti privatne sugeriraju se da sutavke koristenjem podcrta (__) u prefiksu imena metoda/atributa:

self.__identifikator # 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 ()))

Page 42: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Inicijalizatori objekataZa inicijalizaciju objekata koristimo posebnu funkciju zvanu konstruktor.

Primjer

Napisite Python klasu Pravokutnik u kojoj kontruktorom inicijalizirate vrijednostivarijabli visina, sirina i metode koje racunaju 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 %.2f, a opseg %.2f " % (pravokutnik.povrsina

(),pravokutnik.opseg())

Page 43: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Inicijalizatori objekataZa inicijalizaciju objekata koristimo posebnu funkciju zvanu konstruktor.

Primjer

Napisite Python klasu Pravokutnik u kojoj kontruktorom inicijalizirate vrijednostivarijabli visina, sirina i metode koje racunaju 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 %.2f, a opseg %.2f " % (pravokutnik.povrsina

(),pravokutnik.opseg())

Page 44: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

NasljedivanjeNasljedivanje je mehanizam stvaranja novih klasa koje specijaliziraju ili mijenjajuponasanje postojece 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

Page 45: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Nasljedivanje

Primjer klase i podklase:

Primjer (’SPAM’ filter)

Napisite Python klasu koja ce dani niz procistiti od odredene rijeci.

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]))

Page 46: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Zadaci

Zadatak 1

1 Napisite Python program u kojem ce te definirati klasu Trokut koja u sebi sadrzizasticene atribute a, b, c i javne metode povrsina() i opseg() koje ce racunatipovrsinu odnosno opseg trokuta. Definirajte konstruktor koji ce inicijaliziratiobjekt klase.

2 Definirajte Python klasu JednakokracniTrokut nasljedenu iz klase Trokut koji ukonstruktor prima samo parametre a, b i prosljeduje konstuktoru bazne klase.

Page 47: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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 JednakokracniTrokut(Trokut):

def __init__(self ,a,b):

Trokut.__init__(self ,a,b,b)

#glavni dio programa

trokut1=Trokut (3,4,5)

trokut2=JednakokracniTrokut (4,3)

print "povrsina trokut1 = ",trokut1.povrsina ()

print "povrsina trokut2 = ",trokut2.povrsina ()

Page 48: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Moduli i paketi

Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Vise modula zajednocini 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 pripadnojizvornoj datoteci.

2 Modul izvrsava kod 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 rijecima, unutar jednog programa mozemo ukljucivati i druge programe.

>>> import this # Python zen -mudrost

Page 49: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Moduli i paketi

Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Vise modula zajednocini 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 pripadnojizvornoj datoteci.

2 Modul izvrsava kod 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 rijecima, unutar jednog programa mozemo ukljucivati i druge programe.

>>> import this # Python zen -mudrost

Page 50: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Moduli i paketi

Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Vise modula zajednocini 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 pripadnojizvornoj datoteci.

2 Modul izvrsava kod 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 rijecima, unutar jednog programa mozemo ukljucivati i druge programe.

>>> import this # Python zen -mudrost

Page 51: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Moduli i paketi

Podaci (varijable), funkcije, klase i objekti skupljaju se u module. Vise modula zajednocini 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 pripadnojizvornoj datoteci.

2 Modul izvrsava kod 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 rijecima, unutar jednog programa mozemo ukljucivati i druge programe.

>>> import this # Python zen -mudrost

Page 52: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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

Page 53: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Moduli u Python biblioteci

Moduli se mogu ucitati (importirati) koristeci alternativna imena, i to upotrebompoveznice as.Na primjer:

import os as sustav

import socket as mreza

sustav.chdir("..")

mreza.gethostname ()

...

import math as matematika

x=matematika.sqrt (2)

Page 54: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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.

Page 55: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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 usporedjivanja

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)

Page 56: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Rjesenje.

# test.py

from razlomci import razlomak ,gcd

a = razlomak (2,8)

b = razlomak (3,4)

print a+b

print a*b

Page 57: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

GUI - rad s grafickim suceljem

Prakticna primjena OOP-a je implementacija struktura podataka grafickog prikaza.Python u svojoj temeljnoj distribuciji sadrzi Tk biblioteku za rad s grafikom (Tkinterface=Tkinter).

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

Za neke druge graficke biblioteke pogledati: wxPython, PyQt, ...

Page 58: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

GUI - rad s grafickim suceljem

Prakticna primjena OOP-a je implementacija struktura podataka grafickog prikaza.Python u svojoj temeljnoj distribuciji sadrzi Tk biblioteku za rad s grafikom (Tkinterface=Tkinter).

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

Za neke druge graficke biblioteke pogledati: wxPython, PyQt, ...

Page 59: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

GUI - rad s grafickim suceljem

Prakticna primjena OOP-a je implementacija struktura podataka grafickog prikaza.Python u svojoj temeljnoj distribuciji sadrzi Tk biblioteku za rad s grafikom (Tkinterface=Tkinter).

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

Za neke druge graficke biblioteke pogledati: wxPython, PyQt, ...

Page 60: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Moduli u graphics.py paketu I

GraphWin objekt – predstavlja graficki prozor i prostor u kojem se mogu prikazatigraficki elementi

GraphWin(title,width,height) – instancira objekt klase GraphWin koji imanaziv 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 vraca Point objekt na poziciji na kojoj korisnik kliknemisem

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 grafickog objekta

setOutline(color) – postavlja boju oruba geometrijskog objekta

setWidth(pixels) – metoda postavlja sirinu oruba objekta na velicinu pixels

draw(GraphWinObj) – metoda crta objekt unutar GraphWinObj objekta

undraw() – brise objekt iz grafickog prozora

Page 61: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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 vraca duplikat objekta koji je u neiscrtanom stanju

Point metode

Point(x,y) – stvara tocku s danim koordinatama

getX(),getY() – vraca x , odnosno y koordinatu

Line metode

Line(pt1,pt2) – metoda konstruira duzinu od tocaka pt1,pt2

getCenter() – vraca poloviste segmenta

getP1(),

getP2() – vraca tocke koje cine krajeve duzine

Circle metode

Circle(center,radius) – metoda konstuira kruznicu s danim centrom iradijusom

getCenter() – vrati tocku centra kruznice

getRadius() – vraca duljinu radijusa kruznice

getP1(), getP2() – vraca 2 krajnje tocke horizontalog promjera

Rectangular metode

Rectangle(pt1, pt2) – konsturira pravokutnik ciju dijagonalu tvore tockept1,pt2

Page 62: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Moduli u graphics.py paketu III

getCenter() – sjeciste dijagonala pravokutnika

getP1(), getP2() – vraca kranje tocke s kojima je instanciran objekt

Oval metode

Oval(pt1, pt2) – konsturira elipsu u okviru odredenim dijagonalom cije sukrajnje tocke pt1,pt2.

getCenter() – vraca tocku centra elipse

getP1(), getP2() – vraca kranje tocke s kojima je instanciran objekt

Poylgon metode

Polygon(pt1, pt2, pt3, ...) – konstuira poligon ciji vrhovi su tockept1,pt2,...

getPoints() – vraca listu tocaka koje tvore poligon

Text metode

Text(anchor, string) – stvara objekt koji na tocki anchor sadrzi string string.

setText(string) – postavlja tekst objekta na string string

getText() – vrati trenutni string

getAnchor() – vrati tocku na kojoj je postavljen tekst

setFace(family) – promjena fonta u familiju family. Familiju fonta mozemobirati izmedu ’helvetica’, ’courier’, ’times roman’, i ’arial’

setSize(point) – promjena velicine slova na velicinu point

Page 63: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

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 – omogucuju korisniku unos ili promjenu vrijednosti u graficki element.

Entry(center, width) – pozicionira tekstualni okvir na tocki center koja imasirinu width

getAnchor() – vraca tocku na kojoj se objekt nalazi

getText() – vraca tekst koji se nalazi u objektu

setText(string) – azurira vrijednost teksta na string

Prikaz slike – paket omogucava minimalnu mogucnost unosa slike (JPEG,GIF,PPM )unutar GraphWin objekta. Neke od specificnih metoda:

Image(center, filename) – konstruira sliku na tocki center iz datotekefilename

getAnchor() – vraca tocku na kojoj se nalazi slika

Stvaranje boja – paket omogucuje koristenje standarne imenovane palete boja kao stoje npr. ’red’, ’purple’, ’green’, ’cyan’,. . .ili ’mjesanje’ RGB boja s metodom rgb color(r,g,b) gdje su r,g,b cjelobrojnevrijednosti od 0 . . . 255 i odgovaraju redom crvenoj, zelenoj i plavoj boji.

Page 64: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjer

Napravite graficki prozor u kojem ce biti prikazan uzorak za igru ’kruzic-krizic’.

# 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)

Page 65: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjer

Napravite graficki prozor u kojem ce biti prikazan uzorak za igru ’kruzic-krizic’.

# 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)

Page 66: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjer

Napravite graficki prozor u kojem cete s 3 klika misa definirati tocke. Napravite objekttrokut uz pomoc tih 3 tocke 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 ()

Page 67: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjer

Napravite graficki prozor u kojem cete s 3 klika misa definirati tocke. Napravite objekttrokut uz pomoc tih 3 tocke 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 ()

Page 68: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjer

Napravite graficki program koji ce unositi temperaturu u Celziusovim stupnjevima, avracati 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.1f" % fahrenheit)

button.setText("Quit")

# cekaj za klik i izlaz

win.getMouse ()

win.close()

main()

Page 69: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Primjer

Napravite graficki program koji ce unositi temperaturu u Celziusovim stupnjevima, avracati 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.1f" % fahrenheit)

button.setText("Quit")

# cekaj za klik i izlaz

win.getMouse ()

win.close()

main()

Page 70: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Zadaci

Zadatak

Napisite graficki programu u Pythonu koristeci graphics.py biblioteku kako biimplementirali program crtanja grafa neke funkcije. Program uzima nekolikoparametara iz ulaza: Python regularni izraz koji zadaje realnu funkciju jedne realnevarijable te granice domene l < r . Kad korisnik unese vrijednosti parametara programcrta graf funkcije f (x) na domeni [l , r ].Napomena: Graf mozete diskretno aproksimirati s tockama (xi , f (x)), i = 1, . . . , kgdje je k broj uzoraka i zatim tocke grafa povezati duzinama.

Page 71: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Zakljucak

Sto dalje?

Minicourse: kratki uvod u Python, NIJE CIJELI KURS. Zahtjev na samostalni raduz preporucenu literaturu.

Pitanja iz Pythona ? Konzultacije u dogovoru sa asistentima.

Python u primjeni – ostale vjezbe.

Page 72: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Zakljucak

Sto dalje?

Minicourse: kratki uvod u Python, NIJE CIJELI KURS. Zahtjev na samostalni raduz preporucenu literaturu.

Pitanja iz Pythona ? Konzultacije u dogovoru sa asistentima.

Python u primjeni – ostale vjezbe.

Page 73: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Zakljucak

Sto dalje?

Minicourse: kratki uvod u Python, NIJE CIJELI KURS. Zahtjev na samostalni raduz preporucenu literaturu.

Pitanja iz Pythona ? Konzultacije u dogovoru sa asistentima.

Python u primjeni – ostale vjezbe.

Page 74: Python { kratak uvod - · PDF fileJezi cne zna cajke Python Python je interpreterski, interaktivni programski jezik koji podr zava nekoliko programerskih paradigmi s naglaskom na citljiv

Literatura

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

James Payne, Beginning Python: Using Python 2.6 and Python 3.1, WileyPublishing, Inc., 2011.

J. M. Zelle, Python: Introduction to Computer Science, 2003.