Download as odt, pdf, or txt
Download as odt, pdf, or txt
You are on page 1of 114

:

BagZain

:.................................................................................................................................................1
1 ................................................................................................................................7
1.1 ?.....................................................................................................7
1.2 a ..............................................................................................................8
1.3 .....................................................................................................................................9
1.4 ............................................................................................................................9
1.5 ...........................................................................................................................9
1.6 ..............................................................................................................................9
1.7 ............................................................................9
2 .......................................................................................................................................10
2.1 ...................................................................................................10
2.2 ...............................................................................................................10
2.3 ...........................................................................................................................11
2.4 .................................................................................................11
2.5 ..............................................................................................11
3 .................................................................................................................................................12
3.1 Python-.......................................................................................................12
3.1.1 ...............................................................................................................12
3.1.2 ......................................................................................................................12
3.1.3 (Free and Open Source)...............................................12
3.1.4 High-level ...............................................................................................................12
3.1.5 (Portable)........................................................................................................12
3.1.6 ....................................................................................................................13
3.1.7 ....................................................................................................13
3.1.8 ........................................................................................................................13
3.1.9 "" .......................................................................................13
3.1.10 ...............................................................................................13
3.2 Python 2 Python 3........................................................................14
3.3 ?..........................................................................................................14
4 ....................................................................................................................................15
4.1 Windows-....................................................................................................15
4.1.1 DOS ....................................................................................................15
4.1.2 Python Windows-....................................................................16
4.2 Mac OS X-..................................................................................................16
4.3 Linux-.........................................................................................................16
4.4 .....................................................................................................................................16
5 ...................................................................................................................................17
5.1 -...................................................................................17
5.2 ().......................................................................................17
5.3 ...............................................................................................18
5.3.1 Python .......................................................................................20
5.4 ............................................................................................................21
5.5 .....................................................................................................................................21
6 .............................................................................................................................................22
6.1 ...............................................................................................................................22
6.2 e (Literal constants).................................................................................22

:
6.3 ....................................................................................................................................22
6.4 ( - strings)......................................................................................................22
6.4.1 ..........................................................................................................23
6.4.2 ..........................................................................................................23
6.4.3 ............................................................23
6.4.4 .......................................................................................23
6.4.5 .....................................................................................................23
6.5 ...........................................................................................................................25
6.6 ()........................................................................25
6.7 .....................................................................................................................25
6.8 ....................................................................................................................................25
6.9 Python ...............................................................................................26
6.10 : .........................................26
6.10.1 ...........................................................................................26
6.10.2 .......................................................................................................................27
6.11 ....................................................................................................................................28
7 ................................................................................................................29
7.1 ...............................................................................................................................29
7.1.1 ..........................................30
7.2 ?..........................................................................................31
7.3 .......................................................................31
7.4 ( ).....................................................................................32
7.5 ()................................................................................................................32
7.6 .....................................................................................................................................32
8 ...........................................................................................................................33
8.1 If ................................................................................................................................33
8.2 While .........................................................................................................................35
8.3 for .................................................................................................................................36
8.4 break ..........................................................................................................................37
8.4.1 Swaroop- Python-.......................................................................................38
8.5 continue .....................................................................................................................38
8.6 .....................................................................................................................................38
9 .........................................................................................................................................40
9.1 ..............................................................................................................40
9.2 .............................................................................................................41
9.3 ..................................................................................42
9.4 .................................................................................43
9.5 ..................................................................44
9.6 VarArgs .................................................................................................................44
9.7 ...................................................................................45
9.8 return .........................................................................................................................46
9.9 DocStrings ( )..........................47
9.10 ...................................................................................................................................48
10 ..........................................................................................................................................49
10.1 .pyc .................................................................................................50
10.2 from . . . import .......................................................................................................51
10.3 .......................................................................................................................51
10.4 ..................................................................................................51
3

:
10.5 dir..........................................................................................................................53
10.6 ...............................................................................................................................54
10.7 ...................................................................................................................................54
11 ......................................................................................................................55
11.1 .....................................................................................................................................55
11.1.1 aa ..........................................................................55
11.2 .....................................................................................................................................57
11.3 (Dictionary)...............................................................................................................58
11.4 e...............................................................................................................................60
11.5 ()..............................................................................................................................62
11.6 .............................................................................................................................62
11.7 ............................................................................................................63
11.8 ....................................................................................................................................64
12 .....................................................................................................................65
12.1 ................................................................................................................................65
12.2 ..................................................................................................................................65
12.3 ........................................................................................................................67
12.4 ........................................................................................................................68
12.5 .....................................................................................................................70
12.6 ..........................................................................................71
12.7 .....................................................................................................72
12.8 ...................................................................................................................................72
13 ......................................................................................73
13.1 self..........................................................................................................................................73
13.2 .....................................................................................................................................74
13.3 ....................................................................................................................74
13.4 Init ...............................................................................................................................75
13.5 .............................................................................................75
13.6 (Inheritance)......................................................................................................78
13.7 ...................................................................................................................................81
14 / (Input/Output)............................................................................................................82
14.1 ................................................................................................................82
14.2 .................................................................................................................................83
14.3 Pickle.....................................................................................................................................84
14.4 ...................................................................................................................................85
15 Exception (" ")..................................................................................................86
15.1 ...................................................................................................................................86
15.2 (exceptions).............................................................................................................86
15.3 ca exceptions-.................................................................................................86
15.4 Exception-a..........................................................................................................87
15.5 Try .. Finally...........................................................................................................................88
15.6 with .........................................................................................................................89
15.7 ...................................................................................................................................90
16 e e...............................................................................................................91
16.1 sys ...............................................................................................................................91
16.2 logging ........................................................................................................................92
16.3 .........................................................................................................93
16.4 ...................................................................................................................................93
4

:
17 ... ................................................................................................................................94
17.1 .............................................................................................................94
17.2 ....................................................................................................................94
17.3 ..........................................................................95
17.4 .......................................................................................................................95
17.5 ............................................................................................................95
17.6 ...................................................................................96
17.7 assert ........................................................................................................................96
17.8 Escape Sequences..................................................................................................................97
17.8.1 Raw String......................................................................................................................97
17.9 ...................................................................................................................................98
18 ?......................................................................................................................99
18.1 ..........................................................................................................................99
18.2 ...............................................................................................................99
18.3 j..........................................................................................................................100
18.4 ...................................................................................................................................100
18.5 ............................................................................................................................100
18.6 ...................................................................................................................................100
18.7 a..................................................................................................100
18.8 ..............................................................................................................100
18.8.1 .......................................................................................................101
18.9 .......................................................................................................101
18.10 o ( )..................................................101
18.11 ................................................................................................................................101
19 FLOSS.........................................................................................................................................103
20 Colophon.....................................................................................................................................105
20.1 ......................................................................................................................105
20.2 e e............................................................................................................105
20.3 .....................................................................................................................................105
20.4 ..............................................................................................................................105
21 ......................................................................................................................106
22 .......................................................................................................................................108
22.1 ...............................................................................................................................108
22.2 .....................................................................................................108
22.3 ..........................................................................................................................108
22.4 ...............................................................................................................................108
22.5 ...................................................................................................109
22.6 ..........................................................................................................................109
22.7 ...............................................................................................................................109
22.8 ...................................................................................................................................110
22.9 ....................................................................................................................110
22.10 ......................................................................................................................110
22.11 .............................................................................................................................111
22.12 .........................................................................................................................111
22.13 (bokml)..........................................................................................................111
22.14 ..............................................................................................................................111
22.15 ......................................................................................................................111
22.16 ...........................................................................................................................111
5

:
22.17 ..........................................................................................................112
22.18 ...........................................................................................................................112
22.19 ............................................................................................................................112
22.20 ............................................................................................................................113
22.21 ...............................................................................................................................113
23 ..........................................................................................................................114

1
" " (Python)
. Python
. ,
.
Python 3, Python 2
Python-a ( Python 2 Python
3).

1.1 ?
:
" " ",
. ,
."
- Syed Talal (19 )
" ! ."
- Walt Michalik (wmich50@theramp.net)
" Python . .
!"
- Joshua Robin (oshrob@poczsta.n.pl)
" # Python "
- Shan Rajasekaran
", . ,
" " ! :). .
... "
- Pavel Simo (pavel.simo@gmail.com)
" " ",
.
O'reilly Python-a. ,
."
- Samuel Young (sy137@gmail.com)
" Swaroop, .
"Learning Python", , 'Reilly-ja.
, .
, Python-y y.
, " "
, ."
- Joseph Duarte (duarte1@cfl.rr.com)
" ! Python ,
. , ! !"
- Chris-Andr Sommerseth
" e-mail " ".
Python ,
pyGame, .
, Python .
:

1
.
...
,
. -,
."
- Matt Gallivan (_gallivan12@hotmail.com)
" " "
Python. 15 . .
Python Visual Basic 6 ,
, Python-a.
. Python
a ( ).
,
. . ."
- Ahmed Mohammed (sedo_91@hotmail.com)
"a Python-y, 110 PDFa! T " " Swaroop C H-a , ,
Python je ."
- Drew Ames Scripting Scribus linux.com
" " " Nokia N800
Python .
Python-a."
- Jason Delport .
" - (A Byte of VIM, A Byte Of Python )
@swaroopch , , . #
FeelGoodFactor"
- Surendran -.
"" " ."
( : "
Python-a?")
- Justin LoveTrue
" " " .. :)"
- Chinmay
" " "
."
- Patrick Harrington, StackOverflow .
NASA! ! Propulsion
Laboratory Deep Space Network Project.

1.2 a
( )
:
Principles of Programming Languages Vrije Universiteit, Amsterdam
Basic Concepts of Computing University of California, Davis
Programming With Python Harvard University
Introduction to Programming University of Leeds
Introduction to Application Programming Boston University
8

Information Technology Skills for Meteorology University of Oklahoma


Geoprocessing Michigan State University
Multi Agent Semantic Web Systems University of Edinburgh

1.3
a Creative Commons Attribution-Share Alike 3.0 Unported
o.
:
, ,
.
.
.
:
,
.

http://www.swaroopch.com/notes/Python
.
/ 3-clause BSD licence
.

1.4
. ( ).

1.5
,
.

1.6
PDF

, .
( ).

1.7

, .

2
Python .
, , ,
.
- -
.

2.1
Python .
.
,
Python .
, Python.
,
Python-a - .
: Python !

2.2
Python-
, Diamond, .
Python- Perl- Qt .
Eric S. Raymond-a,
, Python
. PyQt " "
Perl-Qt. , Python .
Python. !
OReilly- ,
, .
Python. .
Python-, .
, ,
.
Python- () Red
Hat 9.0 Linux KWord-. ,
Python-.
, 30 . ,
. ,
Python .
open source .
Python-,
, :)
, ,

.

10

2.3
2012 Pandoc-,
, ,
.
2008- ( 2005)
Python 3.0 .
,
, .

.

2.4
http://www.swaroopch.com/notes/Python.
, , ,
(, , ...).

2.5
" :
,
."
- C. A. R. Hoare
" ,
."
- C. W. Wendte

11

3
Python
.

.
Python :
"Python , .
high-level . Python- ,
,
."
.

Guido van Rossum, Python , o BBC "
" (Monty Pythons Flying Circus).
( ) .

3.1 Python-
3.1.1
Python . Python
, !
Python- .
.

3.1.2
, Python- . Python
, .

3.1.3 (Free and Open Source)


Python FLOSS (Free/Libr and Open Source Software) .
, , ,
, .
FLOSS .
Python -
Python.

3.1.4 High-level
Python-, low-level
, .

3.1.5 (Portable)
, Python (. )
. Python ,
12

3

.
Python Linux-, Windows-, FreeBSD-, Macintosh-, Solaris-, OS/2,
, AROS-, AS/400, BeOS-, OS/390, z/OS-, Palm OS-, QNX, VMS-, Psion-, Acorn
RISC OS-, VxWorks-, PlayStation-, Sharp Zaurus-, Windows CE, PocketPC-!
Kivy iOS (iPhone, iPad)
.

3.1.6
.
C C++
( C- C++-)
( . ) .
, linker/loader
.
Python-, , .
. , Python ,
bytecode () . ,
, Python- ,
,
. Python
, Python
!

3.1.7
Python - , . - ,

. - ,
. Python ,
-, C++ .

3.1.8
,
( ),
C- C++-, Python .

3.1.9 ""
"" Python C/C++
"" .

3.1.10
Python- .
regular expressions, , ,
threading-, , WEB , CGI-, FTP-a, e-mail-, XML-, XML-RPC-,

13

3
HTML-, WAV , , GUI ( ),
. , Python
. j akoa "Batteries Included" ( - )
Python-a.
,
Python Package Index .

Python .
Python- .

3.2 Python 2 Python 3


, Python 2 3.
, , .
2008. Python 3
Python 3. , , Python 2
Python 3 . Python 3.
, Python 3 , Python
2. ,
.
Python
, , 2
3 .
Python 2 Python 3 ,
Ubuntu wiki-.

3.3 ?
ESR
Python-:
1. Eric S. Raymond "The Cathedral and the Bazaar",
Open Source ( ). Python
.
Python-.
2. Bruce Eckel Thinking in Java Thinking in C++.
Python-. Python
.
.
3. Peter Norvig LISP-, Google- Search Quality
( Guido van Rossum- ). Python
Google-. Google Jobs
Python-
.

14

4
Python ,
.
.

4.1 Windows-
http://www.python.org/download/ .
Windows .
!
"" ""
, - .

4.1.1 DOS
Python Windows ,
DOS prompt-, PATH.
Windows 2000, XP, 2003: Control Panel - System - Advanced Environment Variables. PATH "System
Variables", Edit ;C:\Python33 (
, Python-)
. ,
Python.
Windows, C:\AUTOEXEC.BAT
"PATH=%PATH%;C:\Python33" ( ) .
Windows NT, AUTOEXEC.NT .
Windows Vista-:
1. Start Control Panel
2. System, "View basic information about your
computer"
3. , "Advanced system
settings". .
4. Advanced System Properties.
Environment Variables .
5. "System Variables" Path
Edit.
6. path Python.
7. . Vista .
Windows 7:
1.
properties Control Panel System
and Security System. Advanced system settings ,
Advanced. Environment Variables System
variables, PATH, Edit.
2. Variable value ;C:\Python33 .
3. %SystemRoot%\system32;
%SystemRoot%\system32;C:\Python33
4. . .
15

4.1.2 Python Windows-


Windows-, Python ,
PATH .
Windows, Start
"Run". cmd Enter.
, o python3 -V (
, , python -V,
" ", ,
PATH ) .

4.2 Mac OS X-
Mac OS X : Command+Space
a ( Spotlight ), Terminal Enter.
Homebrew :
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
Python 3 :
brew install python3
, python3 -V .

4.3 Linux-
Linux : Terminal
Alt + F2 gnome-terminal ( GNOME , ,
). ,
Linux .
, python3 . Ubuntu, sudo
apt-get install python3 . Linux

.
, python3 -V
Python- :
$ python3 -V
Python 3.3.0
:
$ .
, $ .
?
, Ubuntu 12.10, Python 3,
Python-, .

4.4
, Python 3 .
Python 3 .

16

5
"Hello World"
(" ") Python-. , Python
.
"" Python -
- . .

5.1 -
(
), Python python3 (
python, "" . !
3! .
python 2, python3 3, 3.3.0
WindowsXP python) nter.
python3 , : >>> .
. Python interpreter prompt ( ).
Python , print('Pozdrav Svima!')
nter. Pozdrav Svima! .
, Mac OS X-.
Python ,
(. >>> ) .
$ python3
Python 3.3.0 (default, Oct 22 2012, 12:20:36)
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang421.0.60))] on darwin
Type "help", "copyright", "credits" or "license" for more
information.
>>> print('Pozdrav Svima!')
Pozdrav Svima!
>>>
Python !
Python- (Python statement). print (
?), .
Pozdrav Svima! .

Linux Unix shell,
ctrl+d exit() (: , '()'),
enter. Windows , ctrl+z, enter
.

5.2 ()

,
.
Python , a (
17

5
) .
. , ,
.
. Python ,
m ( )
.
, ,
Python ,
.
,
Komodo Edit, Windows, Mac OS X Linux.
Windows, Notepad - ,
, - ()
, .
Komodo Edit- .
, Vim Emacs.

Python . ,
Vim-. Vim Emacs,
,
. , ,
Komodo Edit- Python-
.
, -
Python .
Vim-
Vim Python IDE John M
Anderson-. , jedi-vim plugin a a dotvim ja.
Emacs
Emacs- Python IDE Pedro Kroger-.
, BGs dotemacs .

5.3
.
, 'pozdrav Svima!' (Hello
World) - 'Pozdrav Svima!' .
Simon Cozens ( "Beginning Perl" ) ,
" ."
, pozz.py.
Komodo Edit, File - New - New File, a
:
print('Pozdrav Svima!')
Komodo Edit-, File - Save .
? .
,
Python :
18

5
C:\\py Windows-
/tmp/py Linux-
/tmp/py Mac OS X-
, mkdir , , mkdir
/tmp/py .

.py , , foo.py .
Komodo Edit- Tools - Run Command , python3 pozz.py
Run .

-
, Komodo Edit- , :
1. .
2. , , cd /tmp/py

19

5
3. python3 pozz.py .
.
$ python3 pozz.py
Pozdrav Svima!
, ! - Python
. , ,
!
,
. Python-
, print Print - p
P . ,
- .

Python (statements). ,
. , print ()
'Pozdrav Svima!'.
-
. ,
'Pozdrav Svima!'.

5.3.1 Python
Linux Unix , Windows-
.
, Python ,
python3 foo.py,
? hashbang .
:
#!/usr/bin/env python3
, :
#!/usr/bin/env python3
print ('Pozdrav Svima!')
, chmod ,
.
chmod
.
$ chmod a+x pozz.py
,
/usr/bin/env Python 3
:
$ ./pozz.py
Pozdrav Svima!
./

20

5
.
, pozz
./pozz , ,
.
.
?
PATH .
,
PATH , .

PATH .
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/swaroop/bin
$ cp pozz.py /home/swaroop/bin/pozz
$ pozz
Pozdrav Svima!
PATH echo $
" ".
/home/swaroop/bin PATH, swaroop
koje .
, .
PATH -
export
PATH=$PATH:/home/swaroop/mydir
'/home/swaroop/mydir' PATH .

, . cd ,
.

5.4
Python-,
help . ,
. , help(print) -
print .

q .
, Python-. help()
help-!
return ,
help('return'), Python
.

5.5
, Python .
Python-, Python-.

21

6
'Pozdrav Svima!' , ?
- ,
. Python- , ,
, .

6.1
#
.
:
print('Pozdrav Svima!')
:

# Primetite da je print funkcija

# Primetite da je print funkcija


print('Pozdrav Svima!')
, , :




,
, .
,
. , ( )
!

6.2 e (Literal constants)


5, 1.23 , (, )
'Ovo je string' "To string!" .
(), - ( ).
2 -
. , .

6.3
- .
: ( ) 2 .
( , floats) 3.23 , 52.3E-4 . E
10. , 52.3E-4 52.3 * 10-4 .

long . int
.

6.4 ( - strings)
. .
22

6
Python ,
.

6.4.1
, 'Apostrofi su
oko mene'. , ()
.

6.4.2
.
"Kako se zoves?"

6.4.3
( """ ''' ).
. :
'''Ovo je string iz vise linija. Ovo je prva linija.
Ovo je druga linija.
"Kako se zoves?" Pitao sam ga.
On rece "Bond 100's, Jovan Bond 100's."
'''

6.4.4
, . ,
, .
.
C/C++
char Python-.
.
Perl/PHP
-
, .

6.4.5
.
format() .
formatiranje_stringa.py (:
Linux / .
( )
UTF-8, Windows .
, , ,
"" , .
Windows-, ,
):
23

6
godine = 20
ime = 'Swaroop'
print('{0} je imao {1} godina, kada je napisao ovu
knjigu.'.format(ime, godine))
print('Zasto se {0} igra sa tim Python-om?'.format(ime))
:
$ python3 formatiranje_stringa.py
Swaroop je imao 20 godina, kada je napisao ovu knjigu.
Zasto se Swaroop igra sa tim Python-om?
:
, format
format .
{0}, ime
format . , {1}
godine format . Python
0, u 0, a
1, .
: ime + ' '
+ str(godine) + ' godina star' ,
. , format ,
, . ,
format , ,
.
,
:
godine = 20
ime = 'Swaroop'
print('{} je imao {} godina, kada je napisao ovu
knjigu.'.format(ime, godine))
print('Zasto se {} igra sa tim Python-om?'.format(ime))
.
Python format
. :
(.) 3 (
- float) float '0.333'
>>> '{0:.3}'. format(1/3)
(_) (^) 11
'___Pozdrav___'

24

6
>>> '{0:_^11}'.format('Pozdrav')
'Swaroop je napisao Zagrljaj Pitona'
>>> '{ime} je napisao {knjiga}'.format(ime = 'Swaroop', knjiga =
'Zagrljaj Pitona')
( -).

6.5
-
.
.
- , ,
.
. ,
.

6.6 ()
. , ,
.
:
(
ASCII Unicode ) a ('_').
(
ASCII Unicode ), ('_') (0-9).
. , mojeime
mojeIme . i
I .
i, __moje_ime, ime_23.
"" 2stvari,ovo je napisano sa
razmacima, moje-ime,>a1b2_c3 "ovo_je_pod_navodnicima".

6.7
(data
types). , .
, (class).

6.8
, Python .
. "", "".

Python , ,
.

25

6
.
.

6.9 Python
, Python :
1. , Komodo Edit.
2. .
3. .
4. python3 ime_programa.py
.

6.10 :
: var.py
i = 5
print(i)
i = i + 1
print (i)
s = '''Ovo je string u vise linija.
Ovo je druga linija.'''
print(s)
:
$ python3 var.py
5
6
Ovo je string u vise linija.
Ovo je druga linija.
:
. 5
i ( = ). (statement),
, , , i,
5. , i print
, , .
1 i i.
, 6 .
, , ,
s , .

.
, .

6.10.1
. Python
. Python
j .
26

6
print('Pozdrav Svima!').
( ), .
, Python ,
.
,
"" Python-, - (;)
/. :
i = 5
print(i)

i = 5;
print(i);

i = 5; print(i);

i = 5; print(i)
,
. -.
, , - Python .
:
, (\).
:
s = 'Ovo je string. \
Ovo je nastavak string-a.'
print(s)
:
Ovo je string. Ovo je nastavak string-a.
,
print\
(i)

print(i)
, .
,
, . .
.

6.10.2
Python-. , .
(). ( )
27

6
, ,
, () .
, .
. .
. :
i = 5
print('Vrednost je ' , i) # Greska! Primetite jedan razmak na
pocetku
# linije
print('Ponavljam, vrednost je ' , i)
, :
File "whitespace.py", line 4
print('Value is ', i) # Greska! Primetite jedan razmak na
pocetku
^
IndentationError: unexpected indent
.
Python ,
. ?
( , ).

, .

, ,
4 . Komodo Edit
, .
(4 , 8 ...), , .

Python .
from __future__ import braces .

6.11
,
(control flow statements).
.

28

7
( ) (
). 2 + 3 .
.
, ,
+ ().
. , 2 3
.

7.1
:

. , 2 + 3 , Python :
>>> 2 + 3
5
>>> 3 * 5
15
>>>
+ ()
3 + 5 8 . 'a' + 'b' 'ab'.
- () ,
.
-5.2 50 - 24 26 .
* () .
2 * 3 6 . 'la' * 3 'lalala' .
** ()
3 ** 4 81 (. 3 * 3 * 3 * 3 )
/ ()
4 / 3 1.3333333333333333 .
// ( )
4 // 3 1 .
% (o)
8 % 3 2 . -25.5 % 2.25 1.5 .
<< ( ) .
( ,
0 1)
2 << 2 8 . 2 10 ( ).
2 1000 8 .
>> ( )
.
11 >> 1 5 .
11 1011 1 101
5.
& ( )
( ,
29

7
)
5 & 3 1 .
| ( )
5 | 3 7
^ ( )
5 ^ 3 6
~ ( ) x - (x +1)
~5 -6 .
< ( ) .
True False . .
5 < 3 False 3 < 5 True.
: 3 < 5 < 7 True .
> ( )
5 > 3 True . , .
, False.
<= ( )
x = 3; y = 6; x <= y True.
>= ( )
x = 4; y = 3; x >= y True .
== ( )
x = 2; y = 2; x == y True .
x = 'str'; y = 'stR'; x == y False .
x = 'str'; y = 'str'; x == y True .
!= ( )
x = 2; y = 3; x != y True .
not ( ) True , False . False , True .
x = True; not x False .
and ( ) x and y False False ,
x = False; y = True; x and y False False. ,
Python , 'and'
False False .
.
or ( ) True , True,
x = True; y = False; x or y True .
or.

7.1.1
,
"" ,
:
:
a = 2
a = a * 3
:
a = 2
30

7
a *= 3
"var = var " "var = ".

7.2 ?
2 + 3 * 4 , ?
,
. .
Python-,
( ) ( ).
, Python ,
.
Python reference manual, ,

.
. .
lambda
or
and
not x
in, not in
is, is not
<, <=, >, >=, !=, ==
| ( )
^ ( )
&
<<, >>
+, -
*, /, //, % , ,
+x, -x ,
~x
**
x.atribut
x[index]
x[index1:index2]
f(argument ...)
(ekspresija, ...) - ( ,
)
[ekspresija, ...]
{kljuc:datum, ...}
.
. ,
+ - .

7.3
, . , 2 + (3 *
4) 2 + 3 * 4 ,
31

7
. , (
) , (2 + (3 * 4)) .
-
. ,
, (2 + 3) * 4 .

7.4 ( )
( ) .
( )
. , 2 + 3 + 4 (2 + 3) + 4 .
(=), a = b = c a
= (b = c) .

7.5 ()
( ekspresije.py):
duzina = 5
sirina = 2
povrsina = duzina * sirina
print('Povrsina je', povrsina)
print('Obim je', 2 * (duzina + sirina))
:
$ python3 ekspresije.py
Povrsina je 10
Obim je 14
:
.
.
duzina * sirina povrsina , print
. , 2 * (duzina +
sirina) (print).
, Python ' ' .
'Povrsina je' povrsina , Python ,
, (
, ). Python
.

7.6
, -
.
(statements).

32

8
, ,
Python- .
? ,
, '
' ' ", ?
, .
Python- - if , for while .

8.1 If
if : ,
( if-), ( else-).
( else- ).
( if.py ):
broj = 23
pogadjanje = int(input('Pogodi broj: '))
if pogadjanje == broj:
print('Cestitamo, pogodio si ga.') # Novi blok pocinje ovde
print('(Ali nisi osvojio nikakvu nagradu!)') # Novi blok se
# zavrsava ovde
elif pogadjanje < broj:
print('Ne, on je malko veci nego taj.') # Jos jedan blok
# Mozete raditi sta vam je volja u ovom bloku
else:
print('Ne, on je malko manji nego taj')
# Da bi se izvrsio ovaj blok moralo je biti pogadjanje >
broj.
print('''Gotovo :)''') # Ovaj red ce se uvek izvrsavati posle if
# provere, jer je u "glavnom" bloku
:
$ python3 if.py
Pogodi broj: 50
Ne, on je malko manji nego taj
Gotovo :)
$ python3 if.py
Pogodi broj: 22
Ne, on je malko veci nego taj.
Gotovo :)
$ python3 if.py
Pogodi broj: 23
Cestitamo, pogodio si ga.

33

8
(Ali nisi osvojio nikakvu nagradu!)
Gotovo :)
:
,
. broj
, 23. input()
. (.
).
.
() input ,
. enter , input() ,
, . int
pogadjanje . , int ,
(
, '6', '15' ...).
, . ,
.
Python- .
() Python-. " ".
?
if - Python-
.
, ,
.
elif if else-if else
if-elif-else .
.
elif else
( , ).
if if-, if , -
if .
elif else . if :
if True :
print ( 'Da, tacno je.' )
Python if elif else
, if .
, ( ),
print('''Gotovo :)''') . , Python
.
,
. (
C/C++ ). ,
,
'' .
C/C++

34

8
switch Python-. if..elif..else
(, , (dictionary) ).

8.2 While
while ,
( while ) True (). while
(looping statement). while else
.
( while.py ):
broj = 23
radim = True
while radim:
pogodi = int(input('Pogodi broj: '))
if pogodi == broj:
print('Cestitam, pogodio si.')
radim = False # Ovo ce prekinuti while petlju i preci na
neki
# red posle nje
elif pogodi < broj:
print('Ne, broj je malo veci od tvog.')
else:
print('Ne, broj je malo manji od tvog.')
else:
print('While petlja je gotova.')
# Ovde mozete da radite sta Vam je volja
print('Kraj.')
:
$ python3 while.py
Pogodi broj: 50
Ne, broj je malo manji od tvog.
Pogodi broj: 22
Ne, broj je malo veci od tvog.
Pogodi broj: 23
Cestitam, pogodio si.
While petlja je gotova.
Kraj.
:
, ,
-
, .
while .
input if while radim
35

8
True while . , radim True ,
while-.
, , radim .
, while-,
else-, .
else- while False -
. else while-,
while "" break .
True False ( )
1 0 (1-True, 0-False).
C/C++
else while .

8.3 for
for..in ,
. (
) .
() () .
( for.py ):
for i in range(1, 5):
print(i)
else:
print('Petlja for je gotova.')
:
$ python3 for.py
1
2
3
4
Petlja for je gotova.
:
, () .
range .
range ,
, (
). , range(1,5) [1, 2, 3, 4] . , range
( ) 1. range
, . , range(1,5,2) [1,3] (. 1,
1+2). , ,
.
range() ,
, for-
. , list(range()).
[ ].
for - for i in range(1,5)
36

8
for i in [1, 2, 3, 4] , ( )
, i, ,
i . ,
.
else . ,
for- , break .
for..in .
range ,
! .
C/C++/Java/C#
Python for C/C++ for . C#
for- Python- foreach C#. Java
for (int i : IntArray) 1.5.
C/C++, for (int i = 0; i < 5; i++) , Python-
for i in range(0,5) . , for-
, Python-.

8.4 break
break ,
, False
.
for while break, ,
, else, else- .
( break.py ):
while True:
s = input('Ukucaj bilo sta: ')
if s == 'izlaz':
break
print('Duzina stringa je', len(s))
print('Kraj')
:
$ python3 break.py
Ukucaj bilo sta: Programiranje je zabavno
Duzina stringa je 24
Ukucaj bilo sta: Kada se zavrsi posao
Duzina stringa je 20
Ukucaj bilo sta: ako zelite da vas posao bude zabavan
Duzina stringa je 36
Ukucaj bilo sta:
koristi Python!
Duzina stringa je 24
Ukucaj bilo sta: izlaz
Kraj
:
, ,
.
37

8
'izlaz' . break
"" , .
len .
break for-.

8.4.1 Swaroop- Python-


Swaroops
Poetic Python ( ):
"Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!"

8.5 continue
continue Python-
.
( continue.py ):
while True:
s = input('Ukucaj nesto: ')
if s == 'izlaz':
break
if len(s) < 3:
print('Previse je kratko.')
continue
print('Input je zadovoljavajuce duzine.')
# Mozete zadavati druge komande za neki rad ovde
:
$ python3 continue.py
Ukucaj nesto: a
Previse je kratko.
Ukucaj nesto: 12
Previse je kratko.
Ukucaj nesto: abc
Input je zadovoljavajuce duzine.
Ukucaj nesto: izlaz
:
, , ,
3 . , len
3,
continue . , ,
.
continue for-.

38

8.6
- if , while for
break continue .
Python- , ,
.
.

39

9

. , ,
,
. .
len range .
(
), .
def.
, ,
, . .
, , :
( funkcija1.py ):
def kaziZdravo():
print('Pozdrav Svima!')
# Kraj funkcije
kaziZdravo()
kaziZdravo()
:

# blok koji pripada funkciji

# poziva funkciju
# opet poziva funkciju

$ python3 funkcija1.py
Pozdrav Svima!
Pozdrav Svima!
:
kaziZdravo
.
. ,
"" ,
.

.

9.1
"" ,
, (
) . ,

.
,
. ,
. -
,
40

9
.
( funk_param.py ):
def prikaziMaks(a, b):
if a > b:
print(a, 'je maksimalno')
elif a == b:
print(a,'je jednako sa', b)
else:
print(b, 'je maksimalno')
prikaziMaks(3, 4)
vrednosti

# direktno saljemo funkciji konstantne

x = 5
y = 7
prikaziMaks(x, y)
:

# saljemo varijable funkciji

$ python3 funk_param.py
4 je maksimalno
7 je maksimalno
:
prikaziMaks ,
a b . if..else ,
.
prikaziMaks ,
. , .
prikaziMaks(x, y) x
a, y b .
prikaziMaks .

9.2
,
- . .
scope () .
().
( funk_lokal.py ):
x = 50
def funk(x):
print('x je', x)
x = 2
print('Promenili smo lokalnu vrednost x na', x)
41

funk(x)
print('x je jos uvek', x)
:
$ python3 funk_lockal.py
x je 50
Promenili smo lokalnu vrednost x na 2
x je jos uvek 50
:
.
Python ,
.
2 x . x . ,
x- , x-
.
print, x-,
,
, .

9.3
,
(. ),
Python- , .
global.
global .
(
). ,
, ,
.
global .
( funk_global.py ):
x = 50
def funk():
global x
print('x je', x)
x = 2
print('Promenjena globalna vrednost promenljive x na', x)
funk()
print('Vrednost promenljive x sada je', x)
:

42

9
$ python3 funk_global.py
x je 50
Promenjena globalna vrednost promenljive x na 2
Vrednost promenljive x sada je 2
:
global x - ,
x ,
x .
global
global x, y, z .

9.4

.
.

( = ), .
. ,
-
. , .
( funk_podraz.py ):
def kazi(poruka, puta = 1):
print(poruka * puta)
kazi('Pozdrav')
kazi('Svima', 5)
:
$ python3 funk_podraz.py
Pozdrav
SvimaSvimaSvimaSvimaSvima
:
kazi .
, , .
1 puta .
kazi ,
. kazi , ,
5, 5
.


, ,

.
. ,
43

9
def funk(a, b=5) , def funk(a=5, b) .

9.5
,
(
)- .
( ) ( )
.
- ,
.
,
.
( funk_kljuc.py ):
def funk(a, b = 5, c = 10):
print('a je', a, ',a b je', b, 'i c je', c)
funk(3,7)
funk(25, c = 24)
funk(c=50, a = 100)
:
$ python3 funk_kljuc.py
a je 3 ,a b je 7 i c je 10
a je 25 ,a b je 5 i c je 24
a je 100 ,a b je 5 i c je 50
:
funk ,
.
, funk(3, 7) , a 3 , b
7 c 10 .
funk(25, c=24) , a 25
. c 24 ,
. b 5 .
funk(c=50, a=100) ,
. c ,
a a c .

9.6 VarArgs

, () ( total.py ):
def total(inicijal=5, *brojevi, **kljucnereci):
brojanje = inicijal
for broj in brojevi:
brojanje += broj
for rec in kljucnereci:
44

9
brojanje +=kljucnereci[rec]
return brojanje
print(total(10, 1, 2, 3, povrce = 50, voce = 100))
:
$ python3 total.py
166
:
, *param ,
'param'.
, **param ,
(dictionary)
'param'.
.

9.7

, ,
( samo_kljucne_reci.py ):
def total(inicijal=5, *brojevi, ekstra_broj):
brojanje = inicijal
for broj in brojevi:
brojanje += broj
brojanje += ekstra_broj
print(brojanje)
total(10, 1, 2, 3, ekstra_broj=50)
total(10, 1, 2, 3)
# Izbacuje gresku jer nismo naveli vrednost za argument
'ekstra_broj'
:
$ python3 samo_kljucne_reci.py
66
Traceback (most recent call last):
File "samo_kljucne_reci.py", line 9, in <module>
total(10, 1, 2, 3)
TypeError: total() missing 1 required keyword-only argument:
'ekstra_broj'
:
,
.
,
, .
45

9
+= ,
x = x + y , x += y .
,
, ,
def total(inicijal=5, *, ekstra_broj) .

9.8 return
return ,
. , , .
( funk_return.py ):
def maksimum(x, y):
if x > y:
return x
elif x == y:
return 'Brojevi su jednaki'
else:
return y
print(maksimum(2, 3))
:
$ python3 funk_return.py
3
:
maksimum ,
. if..else ,
.
return (
) return None . None
Python- ( - , , ).
, (
None) .
(,
) return None , return
. print(nekaFunkcija())
nekaFunkcija return :
def nekaFunkcija():
pass
pass Python- ( :
, ).

max " "


,
.

46

9.9 DocStrings (
)
Python ,
DocStrings. DocStrings
, .
, DocStrings , ,
!
( funk_dok.py ):
def prikazMaksimuma(x, y):
'''Prikazuje vecu vrednost dva broja.
Ta dva broja moraju biti integeri (celi brojevi)'''
x = int(x) # konvertuje u integer, ukoliko je to moguce
y = int(y)
if x > y:
print(x, 'je maksimum')
else:
print(y, 'je maksimum')
prikazMaksimuma(3, 5)
print(prikazMaksimuma.__doc__)
:
$ python3 funk_dok.py
5 je maksimum
Prikazuje vecu vrednost dva broja.
Ta dva broja moraju biti integeri (celi brojevi)
:
DocString .
DocStrings ,
.
DocString ,
. ,
.
DocStrings .
DocString- prikazMaksimuma __doc__
( ) () .
Python .
.
help() Python-, DocStrings-!
__doc__ ,
. -
help(prikazMaksimuma) . q
help- .
47

9
.
DocStrings - .
pydoc Python- help()
DocStings.

9.10
,
. ,
Python .
, Python-.

48

10

10

.
? , .
,
.py
.
Python
. ,
, Python , Python
.
,
. , Python-
.
.
( koristiti_sys.py ):
import sys
print('Argumenti komandne linije su: ')
for i in sys.argv:
print(i)
print('\n\nPYTHONPATH je', sys.path, '\n')
:
$ python3 koristiti_sys.py mi smo argumenti
Argumenti komandne linije su:
koristiti_sys.py
mi
smo
argumenti
PYTHONPATH je ['C:\\py', 'C:\\WINDOWS\\system32\\python33.zip',
'C:\\Python33\\DLLs', 'C:\\Python33\\lib', 'C:\\Python33',
'C:\\Python33\\lib\\site-packages']
:
, sys import . ,
Python- . sys
Python- , .
Python import sys , sys . ,
, Python .
. Python-, Python-
sys.path .
,
49

10
.
.
argv sys
sys.argv . sys .
argv
.
sys.argv (
). , sys.argv ,
(
, ).
Python ,
(
-).
, python3 koristiti_sys.py mi smo argumenti ,
koristiti_sys.py python3 ,
. Python
sys.argv .
, sys.argv .
, 'koristiti_sys.py' sys.argv[0] , 'mi'
sys.argv[1] , 'smo' sys.argv[2] 'argumenti' sys.argv[3] .
Python 0, 1.
sys.path .
sys.path -
sys.path PYTHONPATH .
.
, sys.path .
.
import os; print(os.getcwd())
.

10.1 .pyc
, Python
. -
.pyc, Python (
Python ?). .pyc
- ,
. , -
.

.pyc .py
. Python , .pyc
.

50

10

10.2 from . . . import


argv
( sys. ),
from sys import argv .
, import
, (
- . ), .
:
from math import sqrt
print("Kvadratni koren iz 16 je" , sqrt( 16 ))

10.3
.

. , ,
.
.
__name__ .
( koristiti_ime.py ):
if __name__ == '__main__':
print('Program se pokrece sam')
else:
print('Program se pokrece iz drugog programa')
:
$ python3 koristiti_ime.py
Program se pokrece sam
$ python3
>>> import koristiti_ime
Program se pokrece iz drugog programa
>>>
( !)
:
Python- __name__. '__main__' ,

.

10.4
, , !
Python . .py .
.
( mojmodul.py ):
def kaziZdravo():

51

10
print('Zdravo! Ovo govori mojmodul.')
__version__ = '0.1'
. ,
Python .
Python .

, sys.path .
( mojmodul_demo.py ):
import mojmodul
mojmodul.kaziZdravo()
print('Verzija', mojmodul.__version__)
:
$ python3 mojmodul_demo.py
Zdravo! Ovo govori mojmodul.
Verzija 0.1
:

. Python ,
"Pythonic" ,
.

from..import

mojmodul_demo2.py ):
from mojmodul import kaziZdravo, __version__
kaziZdravo()
print('Verzija', __version__)
mojmodul_demo2.py mojmodul_demo.py .
, __version__ mojmodul,
. ,
,
. , import
.
:
from mojmodul import *
kaziZdravo __version__
.
Python-
Python- " ".
import this
StackOverflow .

52

10

10.5 dir
dir
. , ,
.
dir() ,
() . ,
.
:
$ python3
>>> import sys # daje listu atributa, u ovom slucaju, za sys
modul
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__',
'__loader__','__name__', '__package__', '__stderr__',
'__stdin__', '__stdout__', '_clear_type_cache',
'_current_frames', '_getframe', 'api_version', 'argv',
'builtin_module_names', ' byteorder', 'call_tracing',
'callstats', 'copyright', 'displayhook', 'dllhandle' ,
'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',
'executable', 'exit', 'flags', 'float_info', 'getcheckinterval',
'getdefaultencoding', 'getfil esystemencoding', 'getprofile',
'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace',
'getwindowsversion', 'hexversion', 'intern', 'maxsize',
'maxunicode ', 'meta_path', 'modules', 'path', 'path_hooks',
'path_importer_cache', 'platfor m', 'prefix', 'ps1', 'ps2',
'setcheckinterval', 'setprofile', 'setrecursionlimit ',
'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version',
'version_in fo', 'warnoptions', 'winver']
>>> dir() # daje listu atributa za tekuci modul
['__builtins__', '__doc__', '__name__', '__package__', 'sys']
>>> a = 5 # kreira novu variablu 'a'
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'a',
'sys']
>>> del a # uklanja/brise ime
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'sys']
>>>
:
, dir sys .
.
, dir . ,
. ( sys ),
.
dir ,
, dir
53

10
. /
del dir .
del - / ,
, del a ,
- .
dir() . ,
dir('print') , dir(str)
.

10.6
,
. .
. ?
(packages) .
__init__.py
Python- , Python .
'' -
'', '' , '',
'', .
:
- < sys.path>/
- /
- __init__.py
- a/
- __init__.py
- /
- __init__.py
- .py
- a/
- __init__.py
- /
- __init__.py
- .py
.
.

10.7

,
. .
Python .
, .

.

54

10

11
-
. , .
Python- - , , (dictionary)
().
.

11.1

, .
, ,
,
Python- .
, Python
. , ,
. ,
(mutable) , .

11.1.1 aa
, , ,
, .
.
. i
, 5,
(. ) i (. ) int ( ). ,
help(int) .
,
. .
, Python append list,
. , mojalista.append('neka stvar')
'neka stvar' mojalista .
.
(field),
. /
. , ,
mojalista.polje .
( koristiti_liste.py ):
# Ovo je moj spisak za kupovinu
spisakkupovine = ['jabuka', 'mango', 'sargarepa', 'banana']
print('Ja imam', len(spisakkupovine), 'stvari da kupim.')

55

11
print('Te stvari su:', end = ' ')
for stvar in spisakkupovine:
print(stvar, end = ', ')
print('\nJa takodje treba da kupim i pirinac.')
spisakkupovine.append('pirinac')
print('Moj spisak za kupovinu je sad', spisakkupovine)
print('Sada cu da sortiram moj spisak.')
spisakkupovine.sort()
print('Sortirana lista je', spisakkupovine)
print('Prva stvar koju cu kupiti je', spisakkupovine[0])
starastvar = spisakkupovine[0]
del spisakkupovine[0]
print('Kupio sam', starastvar)
print('Moj spisak za kupovinu je sada', spisakkupovine)
:
$ python3 koristiti_liste.py
Ja imam 4 stvari da kupim.
Te stvari su: jabuka, mango, sargarepa, banana,
Ja takodje treba da kupim i pirinac.
Moj spisak za kupovinu je sad ['jabuka', 'mango', 'sargarepa',
'banana', 'pirinac']
Sada cu da sortiram moj spisak.
Sortirana lista je ['banana', 'jabuka', 'mango', 'pirinac',
'sargarepa']
Prva stvar koju cu kupiti je banana
Kupio sam banana
Moj spisak za kupovinu je sada ['jabuka', 'mango', 'pirinac',
'sargarepa']
:
spisakkupovine .
spisakkupovine, ,
, , .
for..in . ,
().
.
end print ,

.
, append ,
. ,
print
56

11
.
sort .
(return) - ! . ,
.
, , .
del .
del .
del spisakkupovine[0] ( Python
0).
, help(list)
.

11.2
, .
, .
,
.

().
-
, ,
.
( koristiti_tuple.py ):
zoo = ('piton', 'slon', 'pingvin') # zapamtite da su zagrade
opcionalne
print('Broj zivotinja u zooloskom vrtu je', len(zoo))
novi_zoo = 'majmin', 'kamila', zoo
print('Broj kaveza u novom zooloskom vrtu je', len(novi_zoo))
print('Sve zivotinje u novom zooloskom vrtu su', novi_zoo)
print('Zivotinje koje su donete iz starog zooloskog vrta su',
novi_zoo[2])
print('Poslednja zivotinja doneta iz starog zooloskog vrta je',
novi_zoo[2][2])
print('Broj zivotinja u novom zooloskom vrtu je', len(novi_zoo)1+len(novi_zoo[2]))
:
$ python3 koristiti_tuple.py
Broj zivotinja u zooloskom vrtu je 3
Broj kaveza u novom zooloskom vrtu je 3
Sve zivotinje u novom zooloskom vrtu su ('majmin', 'kamila',
('piton', 'slon', 'pingvin'))
Zivotinje koje su donete iz starog zooloskog vrta su ('piton',
'slon', 'pingvin')
57

11
Poslednja zivotinja doneta iz starog zooloskog vrta je pingvin
Broj zivotinja u novom zooloskom vrtu je 5
:
zoo . len
.
.
, . ,
novi_zoo ,
. ,
( - ,
).

. .
novi_zoo novi_zoo[2], a
novi_zoo novi_zoo[2][2] .
.
'()'
,
, . ,
print(1,2,3) print( (1,2,3) ) - ,
( ).
0 1
, . mojaprazna = () .
, .
( ) , Python
, singlica =
(2 , ) , 2 .

, , "" .
, , , .
Python- , , .

11.3 (Dictionary)
,
/ , () ().

.
( )
,
.
.
d = {kljuc1 :
vrednost1, kljuc2 : vrednost2 } . -
, ,
.
- .
58

11
,
.
/ dict .
( koristiti_recnik.py ):
# 'ab' je skracenica za 'a'-address 'b'-book
ab = {'Pandimenzionalni' : 'pd@ma.cme',
'mega'
: 'mno@hoo.moo',
'giga'
: 'kokos@kokoda.lom',
'troler'
: 'gong@pong.pet'}
print("Trolova adresa je", ab['troler'])
# brisanje para kljuc-vrednost
del ab['troler']
print('\nImamo {0} kontakata u adresaru\n'.format(len(ab)))
for ime, adresa in ab.items():
print('Kontaktiraj {0} na {1}'.format(ime, adresa))
# Dodavanje para kljuc-vrednost
ab['Genije'] = 'popara@lebac.voda'
if 'Genije' in ab:
print('\nAdresa genija je', ab['Genije'])
:
$ python3 koristiti_recnik.py
Trolova adresa je gong@pong.pet
Imamo 3 kontakata u adresaru
Kontaktiraj Pandimenzionalni na pd@ma.cme
Kontaktiraj mega na mno@hoo.moo
Kontaktiraj giga na kokos@kokoda.lom
Adresa genija je popara@lebac.voda
:
ab .
-
. .
- - del .

del .
.
, - items
-
59

11
. ime adresa
. for..in
for-.
-
,
.
- in
.
dict , help(dict) .

, ,
! - -

, ( ).

11.4 e
, , ()
?
, (. in not in )
,
.
- , ,
(slicing) () ,
.
( sekvenca.py ):
listakupovine = ['jabuka', 'mango', 'sargarepa', 'banana']
ime = 'swaroop'
# Operacija indeksiranja ili Subscription
print('Stvar 0 je', listakupovine[0])
print('Stvar 1 je', listakupovine[1])
print('Stvar 2 je', listakupovine[2])
print('Stvar 3 je', listakupovine[3])
print('Stvar -1 je', listakupovine[-1])
print('Stvar -2 je', listakupovine[-2])
print('Znak 0 je', ime[0])
# secenje liste
print('Stvari od
print('Stvari od
print('Stvari od
print('Stvari od

1 do 3 su', listakupovine[1:3])
2 do kraja su', listakupovine[2:])
1 do -1 su', listakupovine[1:-1])
pocetka do kraja su', listakupovine[:])

# secenje stringa
60

11
print('Znakovi
print('Znakovi
print('Znakovi
print('Znakovi
:

od
od
od
od

1 do 3 su', ime[1:3])
2 do kraja su', ime[2:])
1 do -1 su', ime[1:-1])
pocetka do kraja su', ime[:])

$ python3 sekvenca.py
Stvar 0 je jabuka
Stvar 1 je mango
Stvar 2 je sargarepa
Stvar 3 je banana
Stvar -1 je banana
Stvar -2 je sargarepa
Znak 0 je s
Stvari od 1 do 3 su ['mango', 'sargarepa']
Stvari od 2 do kraja su ['sargarepa', 'banana']
Stvari od 1 do -1 su ['mango', 'sargarepa']
Stvari od pocetka do kraja su ['jabuka', 'mango', 'sargarepa',
'banana']
Znakovi od 1 do 3 su wa
Znakovi od 2 do kraja su aroop
Znakovi od 1 do -1 su waroo
Znakovi od pocetka do kraja su swaroop
:
, .
.
, , Python
(). Python 0. ,
listakupovine[0] , listakupovine[3]
listakupovine .
, ,
. , listakupovine[-1] ,
listakupovine[-2] .

.
. :
.
( ) , ,
( ) .
, Python . , Python
.
,
, .
listakupovine[1:3] aje a 1, 2,
3 . ,
listakupovine[:] .

61

11
.
. , listakupovine[:-1]
, .
,
( , 1):
>>> listakupovine = ['jabuka', 'mango', 'sargarepa', 'banana']
>>> listakupovine[::1]
['jabuka', 'mango', 'sargarepa', 'banana']
>>> listakupovine[::2]
['jabuka', 'sargarepa']
>>> listakupovine[::3]
['jabuka', 'banana']
>>> listakupovine[::-1]
['banana', 'sargarepa', 'mango', 'jabuka']
2, 0, 2, ...
3, 0, 3, .
. Python
, .
, ,
!

11.5 ()
() .

.
, , ,
, .
>>> bri = set(['brazil', 'rusija', 'indija'])
>>> 'indija' in bri
True
>>> 'usa' in bri
False
>>> brik = bri.copy()
>>> brik.add('kina')
>>> brik.issuperset(bri)
True
>>> bri.remove('rusija')
>>> bri & brik # ili bri.intersection(brik)
{'brazil', 'indija'}
:

.

11.6
,
62

11
() ! ,
.
(-binding) .
- , , ,
. !
, ,
:
( reference.py ):
print('Jednostavno dodavanje vrednosti')
listakupovine = ['jabuka', 'mango', 'sargarepa', 'banana']
mojalista = listakupovine # mojalista je samo drugo ime koje se
odnosi
# na isti objekat (listakupovine)!
del listakupovine[0] # Kupili smo prvu stvar, pa je brisemo iz
liste
print('listakupovine je', listakupovine)
print('mojalista je', mojalista)
# obratite paznju da obe (i listakupovine i mojalista) prikazuju
isti
# rezultat
# bez objekta 'jabuka', cime potvrdjujemo da one referisu na isti
# objekat
print('Kopiranje pomocu punog isecanja')
mojalista = listakupovine[:] # pravimo kopiju tako sto isecamo
sve
# objekte iz jedne liste
del mojalista[0] # uklanjamo prvi objekat
print('listakupovine je', listakupovine)
print('mojalista je', mojalista)
# sada primetite da su liste razlicite!
:
$ python3 reference.py
Jednostavno dodavanje vrednosti
listakupovine je ['mango', 'sargarepa', 'banana']
mojalista je ['mango', 'sargarepa', 'banana']
Kopiranje pomocu punog isecanja
listakupovine je ['mango', 'sargarepa', 'banana']
mojalista je ['sargarepa', 'banana']
:
.

( ),

63

11
.
, ""
.

.
.

11.7
. ?
, ,
?
str .
. ,
help(str) .
( str_metode.py ):
ime = 'Swaroop'

# ovo je prvi string objekt

if ime.startswith('Swa'):
print('Da, string pocinje sa "Swa"')
if 'a' in ime:
print('Da, string u sebi ima slovo "a"')
if ime.find('war') != -1:
print('Da, string sadrzi slova "war"')
razmak = '_*_'
mojalista = ['brazil', 'Rusija', 'Indija', 'Kina']
print(razmak.join(mojalista))
:
$ python3 str_metode.py
Da, string pocinje sa "Swa"
Da, string u sebi ima slovo "a"
Da, string sadrzi slova "war"
brazil_*_Rusija_*_Indija_*_Kina
:
O . startswith
. in
.
find , find
-1 . str join
() ,
.

64

11

11.8
, e Python.
.
Python-,
Python .

12
Python , a e e
e o .
Python-.

12.1
koji "
".
,
. . ,
? ?
?
, .
. ,
, . ,
,
, .
.
.
zip .
zip .
zip
Linux/Unix . Windows-a

GnuWin32

C:\Program
Files\GnuWin32\bin PATH,
Python- .
, ,
.

12.2
je ,
.
backup_ver1.py :
import os
import time

65

12
# 1. Fajlovi i folderi koje zelimo da back-up-ujemo se
specifirani u
# listi
izvor = ['C:\\py', '"C:\Documents and
Settings\Pure\Desktop\V0.0\"']
# Primetite da smo koristili duple navodnike unutar stringa, zbog
imena
# koja sadrze razmake
# 2. Back-up ce biti sacuvan u glavnom back-up direktorijumu
ciljni_dir = 'D:\\Resto' # Zapamtite da promenite ovo, unesite
lokaciju
# koja vama odgovara na vasem racunaru
# 3. Fajlovi se back-up-uju u zip fajl
# 4. Ime zip arhive je trenutni datum i vreme
cilj = ciljni_dir + os.sep + time.strftime('%Y%m%d%H%M%S') +
'.zip'
# 5. Koristimo zip komandu da posaljemo fajlove u zip arhivu
zip_komanda = "zip -qr {0} {1}".format(cilj, ' '.join(izvor))
# Pokrece back-up
if os.system(zip_komanda) == 0:
print('Uspesno smo izvrsili back-up u', cilj)
else:
print('BACK-UP NIJE USPEO!')
:
$ python backup_ver1.py
Uspesno smo izvrsili back-up u D:\Resto\20130407215156.zip
, .
, ,
() .
, print(zip_komanda)
os.system . copy/paste
zip_komanda
. , zip
. " ", Python ,
. (
- ).
:
- --.
os time .
izvor.
ciljni_dir

66

12
.
time.strftime() . .zip
ciljni_dir .
os.sep -
, '/' Linux- Unix-, '\\' Windows-
':' MacOS-. os.sep
() .
time.strftime() ,
. %Y . %m
01 12 .
Python-.

.
zip_komanda .
(Linux ).
zip . -q
zip ( ). -r
.
-qr .
. izvor
join i.
os.system
, - 0
, .
,
.
, !
Windows
(\\), raw . ,
'C:\\Documents' r'C:\Documents' . ,
'C:\Documents' \D .
,
. Linux/Unix
,
. (deployment)
.
, ( )
. , , ,
, . , ,
.

12.3
. , ,
. .
-
,
.
67

12

. .
,
, ( )
.
backup_ver2.py :
import os
import time
# 1. Fajlovi i folderi koje zelimo da back-up-ujemo se
specifirani u
# listi
izvor = ['C:\\py', '"C:\Documents and
Settings\inure\Desktop\V0.0\"']
# Primetite da smo koristili duple navodnike unutar stringa, zbog
imena
# koje sadrze razmake
# 2. Back-up ce biti sacuvan u glavnom back-up direktorijumu
ciljni_dir = 'D:\\Resto' # Zapamtite da promenite ovo, unesite
lokaciju
# koja vama odgovara na vasem racunaru
# 3. Fajlovi se back-up-uju u zip fajl
# 4. Trenutni datum je ime poddirektorijuma u glavnom
direktorijumu
danas = ciljni_dir + os.sep + time.strftime('%Y%m%d')
# Trenutno vreme je ime zip arhive
sada = time.strftime('%H%M%S')
# Kreiranje poddirektorijuma ukoliko on ne postoji
if not os.path.exists(danas):
os.mkdir(danas) # Kreira direktorijum
print('Uspesno smo kreirali direktorijum', danas)
# Ime zip arhive
cilj = danas + os.sep + sada + '.zip'
# 5. Koristimo zip komandu da posaljemo fajlove u zip arhivu
zip_komanda = "zip -qr {0} {1}".format(cilj, ' '.join(izvor))
# Pokrece back-up
if os.system(zip_komanda) == 0:
print('Uspesno smo izvrsili back-up u', cilj)
else:
print('BACK-UP NIJE USPEO!')

68

12
:
$ python3 backup_ver2.py
Uspesno smo kreirali direktorijum D:\Resto\20130408
Uspesno smo izvrsili back-up u D:\Resto\20130408\131658.zip
:
. ,

os.path.exists. , os.mkdir .

12.4
,
, / -! ,
,
/ .
.
!
, , ,
.
backup_ver3.py :
import os
import time
# 1. Fajlovi i folderi koje zelimo da back-up-ujemo se
specifirani u
# listi
izvor = ['C:\\py', '"C:\Documents and
Settings\xinjure\Desktop\V0.0\"']
# Primetite da smo koristili duple navodnike unutar stringa, zbog
imena
# koje sadrze razmake
# 2. Back-up ce biti sacuvan u glavnom back-up direktorijumu
ciljni_dir = 'D:\\Resto' # Zapamtite da promenite ovo, unesite
lokaciju
# koja vama odgovara na vasem racunaru
# 3. Fajlovi se back-up-uju u zip fajl
# 4. Trenutni datum je ime poddirektorijuma u glavnom
direktorijumu
danas = ciljni_dir + os.sep + time.strftime('%Y%m%d')
# Trenutno vreme je ime zip arhive
sada = time.strftime('%H%M%S')
# Trazi od korisnika da unese komentar, koji bi se primenio u
imenu zip
69

12
# arhive
komentar = input('Prilozite komentar back-up-a --> ')
if len(komentar) == 0: # proverava da li je komentar unet
cilj = danas + os.sep + sada + '.zip'
else:
cilj = danas + os.sep + sada + '_' +
komentar.replace(' ', '_') + '.zip'
# Kreiranje poddirektorijuma ukoliko on ne postoji
if not os.path.exists(danas):
os.mkdir(danas) # Kreira direktorijum
print('Uspesno smo kreirali direktorijum', danas)
# 5. Koristimo zip komandu da posaljemo fajlove u zip arhivu
zip_komanda = "zip -qr {0} {1}".format(cilj, ' '.join(izvor))
# Pokrece back-up
if os.system(zip_komanda) == 0:
print('Uspesno smo izvrsili back-up u', cilj)
else:
print('BACK-UP NIJE USPEO!')
:
$ python3 backup_ver3.py
File "backup_ver3.py", line 22
cilj = danas + os.sep + sada + '_' +
^
SyntaxError: invalid syntax
():
! Python ,
Python .
Python, .
,
( ).
,
, . ,
Python ( + ) ,
.
. ,
. ,
.

12.5
backup_ver4.py :
import os

70

12
import time
# 1. Fajlovi i folderi koje zelimo da back-up-ujemo se
specifirani u
# listi
izvor = ['C:\\py', '"C:\Documents and
Settings\xinjure\Desktop\V0.0\"']
# Primetite da smo koristili duple navodnike unutar stringa, zbog
imena
# koje sadrze razmake
# 2. Back-up ce biti sacuvan u glavnom back-up direktorijumu
ciljni_dir = 'D:\\Resto' # Zapamtite da promenite ovo, unesite
lokaciju
# koja vama odgovara na vasem racunaru
# 3. Fajlovi se back-up-uju u zip fajl
# 4. Trenutni datum je ime poddirektorijuma u glavnom
direktorijumu
danas = ciljni_dir + os.sep + time.strftime('%Y%m%d')
# Trenutno vreme je ime zip arhive
sada = time.strftime('%H%M%S')
# Trazi od korisnika da unese komentar, koji bi se primenio u
imenu zip
# arhive
komentar = input('Prilozite komentar back-up-a --> ')
if len(komentar) == 0: # proverava da li je komentar unet
cilj = danas + os.sep + sada + '.zip'
else:
cilj = danas + os.sep + sada + '_' + \
komentar.replace(' ', '_') + '.zip'
# Kreiranje poddirektorijuma ukoliko on ne postoji
if not os.path.exists(danas):
os.mkdir(danas) # Kreira direktorijum
print('Uspesno smo kreirali direktorijum', danas)
# 5. Koristimo zip komandu da posaljemo fajlove u zip arhivu
zip_komanda = "zip -qr {0} {1}".format(cilj, ' '.join(izvor))
# Pokrece back-up
if os.system(zip_komanda) == 0:
print('Uspesno smo izvrsili back-up u', cilj)
else:
print('BACK-UP NIJE USPEO!')

71

12
:
$ python3 backup_ver4.py
Prilozite komentar back-up-a --> dodat novi primer
Uspesno smo izvrsili back-up u
D:\Resto\20130408\150329_dodat_novi_primer.zip
$ python3 backup_ver4.py
Prilozite komentar back-up-a -->
Uspesno smo izvrsili back-up u D:\Resto\20130408\150605.zip
:
! 3.
input ,
,
len . enter
( ),
.
, ,
.zip .
- .

12.6
,
. ,
-v (verbosity).

, .
sys.argv , izvor
extend , list .
os.system ,
zipfile tarfile .

.
, os.system
, , ""
.
zipfile
os.system -?

12.7
.
:
1. ()
2. ()
3. (-)
4. ( )
5. ( Deployment)
6. ()
72

12

: . .
.
. - - (
). , , .

12.8
/Python
.
, ,
Python-, .
.

13
, ,
.
.
.
.
,
.
.
(), a .
int , , ,
() int .

() ( int ).
++ ( 1.5),
. help(int) .
# 1.5 boxing unboxing.

. (fields).
, .
73

13
.

. ,
.
- /
. ,
.
class.
.

13.1 self
M -
,
( ) ,
Python.
, , self .
, self .
- ,
(Integrated Development Environments)
self .
++//#
self Python- this ++ this #.
Python self
. . MojaKlasa
mojobjekt .
mojobjekt.metod(arg1, arg2) , e c Python-
MojaKlasa.metod(mojobjekt, arg1, arg2), self
-.
,
- self .

13.2
(
najjednostavnijaklasa.py ).
class Licnost:
pass # prazan blok
L = Licnost()
print(L)
:
$ python3 najjednostavnijaklasa.py
<__main__.Licnost object at 0x00CA21D0>
:
class .
74

13
. ,
pass .
/
( ).
, , .
Licnost __main__ .
, , .
, Python
.

13.3
/ , ,
self . ( metod.py ).
class Licnost:
def kaziZdravo(self):
print('Zdravo, kako si?')
L = Licnost()
L.kaziZdravo()
# Ovaj kratak primer moze biti napisan i kao
Licnost().kaziZdravo()
:
$ python3 metod.py
Zdravo, kako si?
:
self . kaziZdravo "" ,
self .

13.4 Init
Python- .
__init__ .
__init__ .
.
.
( klasa_init.py ):
class Licnost:
def __init__(self, ime):
self.ime = ime
def kaziZdravo(self):
print('Zdravo, ja se zovem', self.ime)
L = Licnost('Swaroop')
L.kaziZdravo()
75

13

# Ovaj kratki primer se takodje moze napisati kao


Licnost('Swaroop').kaziZdravo()
:
$ python3 klasa_init.py
Zdravo, ja se zovem Swaroop
:
__init__ ime (
self ). ime.
'ime'.
, self.ime "ime"
"self" a o ime .
a , .
__init__ ,
,
. .
self.ime ,
kaziZdravo .

13.5
(. ),
. , ,
(namespaces) .
. name spaces.
-
,
.
- .

, .
/ .
, ,
.
( objvar.py ):
class Robot:
'''Predstavlja robota sa imenom.'''
# varijabla klase, broji kolicinu robota
populacija = 0
def __init__(self, ime):
'''Inicijalizacija podataka'''
self.ime = ime
print('(Inicijalizujem {0})'.format(self.ime))

76

13

# kada je kreirana licnost robota


# povecava se populacija
Robot.populacija += 1
def __del__(self):
'''Umirem.'''
print('{0} je unisten!'.format(self.ime))
Robot.populacija -= 1
if Robot.populacija == 0:
print('{0} je bio poslednji.'.format(self.ime))
else:
print('Funkcionalno je jos {0:d}
robota'.format(Robot.populacija))
def kaziZdravo(self):
'''Robot vas pozdravlja.
Da, oni mogu i to!'''
print('Pozdravljam Vas, moj Gospodaru, mozete me zvati
{0} .'.format(self.ime))
def koliko():
'''Prikazuje trenutnu populaciju.'''
print('Imamo {0:d} robota'.format(Robot.populacija))
koliko = staticmethod(koliko)
droid1 = Robot('R2-D2')
droid1.kaziZdravo()
Robot.koliko()
droid2 = Robot('C-3P0')
droid2.kaziZdravo()
Robot.koliko()
print("\nRoboti mogu da rade nesto ovde.\n")
print("Roboti su zavrsili svoj rad. Hajde da ih unistimo.")
del droid1
del droid2
Robot.koliko()
:

77

13
$ python3 objvar.py
(Inicijalizujem R2-D2)
Pozdravljam Vas, moj Gospodaru, mozete me zvati R2-D2 .
Imamo 1 robota
(Inicijalizujem C-3P0)
Pozdravljam Vas, moj Gospodaru, mozete me zvati C-3P0 .
Imamo 2 robota
Roboti mogu da rade nesto ovde.
Roboti su zavrsili svoj rad. Hajde da ih unistimo.
R2-D2 je unisten!
Funkcionalno je jos 1 robota
C-3P0 je unisten!
C-3P0 je bio poslednji.
Imamo 0 robota
:
. ,
populacija Robot . ime
( self) .
, populacija Robot.populacija
self.populacija. ime self.ime
.
. ,
, !
koliko , .
classmethod staticmethod,
. ,
staticmethod .
:
@staticmethod
def koliko():
'''Prikazuje trenutnu populaciju.'''
print('Imamo {0:d} robota'.format(Robot.populacija))
,
.
__init__ Robot .
, populacija 1,
. , self.ime ,
.

self. .
, docstrings .
docstrings- Robot.__doc__ , docstrings-
Robot.kaziZdravo.__doc__ .

78

13
__init__ , __del__ ,
,
. ,
Robot.populacija 1.
__del__ /
. , del ,
.
. :
, __privatnavar
, Python
.
,
,
/. Python- (
).
++//#
( )
Python-.

13.6 (Inheritance)

( ) .
.

. , .
,
, .
,
.
.
ClanoviSkole,
ClanoviSkole, (e), .
. /
ClanoviSkole, ,
. , ,
ClanoviSkole. ,
.
ClanoviSkole,
, .
,
, .


.
ClanoviSkole .
79

13
.
"" - (
inherit.py ):
class ClanoviSkole:
'''Predstavlja bilo kog clana skole'''
def __init__(self, ime, godine):
self.ime = ime
self.godine = godine
print('(Inicijalizujem ClanoviSkole:
{0})'.format(self.ime))
def kazi(self):
'''Kaze moje detalje'''
print('Ime:"{0}" Godina:"{1}"'.format(self.ime,
self.godine), end = " ")
class Ucitelj(ClanoviSkole):
'''Predstavlja ucitelja'''
def __init__(self, ime, godine, zarada):
ClanoviSkole.__init__(self, ime, godine)
self.zarada = zarada
print('(Inicijalizujem Ucitelj: {0})'.format(self.ime))
def kazi(self):
ClanoviSkole.kazi(self)
print('Zarada: "{0:d}"'.format(self.zarada))
class Student(ClanoviSkole):
'''Predstavlja ucenike'''
def __init__(self, ime, godine, oznaka):
ClanoviSkole.__init__(self, ime, godine)
self.oznaka = oznaka
print('(Inicijalizujem Student: {0})'.format(self.ime))
def kazi(self):
ClanoviSkole.kazi(self)
print('Oznaka: "{0:d}"'.format(self.oznaka))
u = Ucitelj('Gdja. Blebetala', 40, 30000)
s = Student('Swaroop', 25, 75)
print()

# prikazuje praznu liniju

clanovi = [u, s]
for clan in clanovi:
clan.kazi() # radi kako za Ucitelje, tako i za Studente

80

13
:
$ python3 inherit.py
(Inicijalizujem ClanoviSkole: Gdja. Blebetala)
(Inicijalizujem Ucitelj: Gdja. Blebetala)
(Inicijalizujem ClanoviSkole: Swaroop)
(Inicijalizujem Student: Swaroop)
Ime:"Gdja. Blebetala" Godina:"40" Zarada: "30000"
Ime:"Swaroop" Godina:"25" Oznaka: "75"
:
,
. , __init__
self ,
. - Python
, .

, , self
.
Ucitelj Student
ClanoviSkole kazi ClanoviSkole .
, kazi , kazi
ClanoviSkole. , Python
, , , .
, , ,
.
- ,
(multiple inheritance).
end kazi() -
, print() .

13.7
,
.
. Python -
.
, /
Python-.

81

13

14 / (Input/Output)
.
, ,
. input() print()
.
, str () . ,
rjust
. help(str) .
/ . ,

.

14.1
korisnik_input.py :
def obrnut(tekst):
return tekst[::-1]
def da_li_je_palindrom(tekst):

82

14 / (Input/Output)
return tekst == obrnut(tekst)
nesto = input('Ukucaj tekst: ')
if (da_li_je_palindrom(nesto)):
print('Da, to je palindrom')
else:
print('Ne, to nije palindrom')
:
$ python3 korisnik_input.py
Ukucaj tekst: sir
Ne, to nije palindrom
$ python3 korisnik_input.py
Ukucaj tekst: madam
Da, to je palindrom
$ python3 korisnik_input.py
Ukucaj tekst: abrakadabra
Ne, to nije palindrom
:
.
sekvenca[a:b]
a b .
() . 1 ,
( ). ,
, -1 "" ().
input() .
Enter.
Enter, input() .
.
, (
).

,
. , " , ." ,
.
?
( )
( : )
,
, = ('!','?', '.', ....).

14.2
file
read , readline write
.
. , , ,
83

14 / (Input/Output)
close Python- .
( koristiti_fajlove.py ):
pesma = '''\
Programiranje je zabava
Kada je posao gotov
ako zelis da ti poso bude razbribriga
koristi Python!
'''
f = open('pesma.txt', 'w') # Otvara fajl za 'w' - pisanje
f.write(pesma) # upisuje tekst u fajl
f.close() # zatvara fajl
f = open('pesma.txt') # Ako nismo naveli, podrazumevano je 'r' # citanje fajla
while True:
linija = f.readline()
if len(linija) == 0: # Duzina od 0 znaci da smo dostigli EOF
# kraj fajla
break
print(linija, end = ' ')
f.close() # zatvara fajl
:
$ python3 koristiti_fajlove.py
Programiranje je zabava
Kada je posao gotov
ako zelis da ti poso bude razbribriga
koristi Python!
:
, a open
. : ('r'), ('w')
('a'). , ,
('t') ('b').
help(open) . , open()
't' 'r' - .
, write
, close.
.
" " .
readline .
. ,
"" .
, print() , .
end = ' ' , ,
84

14 / (Input/Output)
, .
close.
, pesma.txt
.

14.3 Pickle
Python pickle,
Python- .
.
( picklovanje.py ):
import pickle
# ime fajla u kom zelimo da cuvamo objekat
fajllistekupovine = 'listakupovine.data'
# lista stvari za kupovinu
listakupovine = ['jabuka', 'mango', 'sargarepa']
# Sacuvaj u fajl
f = open(fajllistekupovine, 'wb')
pickle.dump(listakupovine, f) # stavlja objekat u fajl
f.close()
del listakupovine

# unistava listakupovine promenljivu

# Ucitava nazad iz fajla


f = open(fajllistekupovine, 'rb')
sacuvanalista = pickle.load(f) # ucitava objekat iz fajla
print(sacuvanalista)
:
$ python3 picklovanje.py
['jabuka', 'mango', 'sargarepa']
:
, "" open 'b' 'w' - , dump
pickle . pickling.
, load e pickle , a .
unpickling.

14.4
/,
pickle.
(exceptions).

85

14 / (Input/Output)

15 Exception (" ")


.
, ?
?
exceptions.
, ?
Python, , " " (raises)
.

15.1
print . print Print
? . , Python raises ()
.
>>> Print('Pozdrav Svima!')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Print' is not defined
>>> print('Pozdrav Svima!')
86

15 Exception (" ")


Pozdrav Svima!
NameError (raised)
. "" (error handler) .

15.2 (exceptions)
.
ctrl-d ( Windows - ctrl - z), .
>>> s = input('Ukucaj nesto--> ')
Ukucaj nesto-->
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
EOFError
Python EOFError
( ctrl-d ) .

15.3 ca exceptions-
exceptions try..except.
try
except.
( try_except.py ):
try:
tekst = input('Ukucaj nesto --> ')
except EOFError:
print('Zasto si mi uradio EOF?')
except KeyboardInterrupt:
print('Ti si ponistio operaciju.')
else:
print('Ti si uneo {0}'.format(tekst))
:
$ python3 try_except.py
Ukucaj nesto -->
# pritisnite ctrl -d
Zasto si mi uradio EOF?
$ python3 try_except.py
Ukucaj nesto -->
# pritisnite ctrl -c
Ti si ponistio operaciju.
$ python3 try_except.py
Ukucaj nesto --> nema exceptiona
Ti si uneo nema exceptiona
:
/ try ,
/ except /. except
,
/.
87

15 Exception (" ")


.
except try .
, try a?
, Python handler
, .
.
else try..except . else
/.
"" ,
.

15.4 Exception-a
raise /
exception .
,
Exception .
( raising.py ):
class IzuzetakZaKratkiUnos(Exception):
'''Klasa definisana od strane korisnika.'''
def __init__(self, duzina, najmanje):
Exception.__init__(self)
self.duzina = duzina
self.najmanje = najmanje
try:
tekst = input('Ukucaj nesto --> ')
if len(tekst) < 3:
raise IzuzetakZaKratkiUnos(len(tekst), 3)
# Neki drugi rad moze biti definisan na ovom mestu,
# Na uobicajen nacin
except EOFError:
print('Zasto si mi uradio EOF?')
except IzuzetakZaKratkiUnos as ex:
print('IzuzetakZaKratkiUnos: Unos je {0} karaktera dug,
ocekivano je najmanje {1}'\
.format(ex.duzina, ex.najmanje))
else:
print('Nijedan exception nije podignut.')
:
$ python3 raising.py
Ukucaj nesto --> a
IzuzetakZaKratkiUnos: Unos je 1 karaktera dug, ocekivano je
najmanje 3
$ python3 raising.py
Ukucaj nesto --> asd
88

15 Exception (" ")


Nijedan exception nije podignut.
:
.
IzuzetakZaKratkiUnos. - duzina najmanje
.
except ,
, /.
.
except , duzina najmanje exception
.

15.5 Try .. Finally


.
?
finally . except
finally try . ,
.
finally.py :
import time
try:
f = open('pesma.txt')
while True: # Nas uobicajeni nacin citanja fajlova
linija = f.readline()
if len(linija) == 0:
break
print(linija, end = ' ')
time.sleep(2) # Da budemo sigurni da ce da radi neko
vreme
except KeyboardInterrupt:
print('!! Vi ste prekinuli citanje fajla.')
finally:
f.close()
print('(Cistimo: Zatvaramo fajl)')
:
$ python3 finally.py
Programiranje je zabava
Kada je posao gotov
ako zelis da ti poso bude razbribriga
!! Vi ste prekinuli citanje fajla.
(Cistimo: Zatvaramo fajl)
:
, 2
, time.sleep ,
89

15 Exception (" ")


(Python , , ). ,
ctrl-c / .
KeyboardInterrupt . ,
, finally-
.

15.6 with
try , finally
. , with
:
koristiti_with.py :
with open("pesma.txt") as f:
for linija in f:
print(linija, end = ' ')
:
.
open with -
with open .
- with .
open , "file" .
file.__enter__
, file.__exit__ .
, finally ,
__exit__ .
try..finally .
, 343
.

15.7
try..except try..finally . ,
exception raise exception.
, Python- .

90

15 Exception (" ")

16 e e
Python-
Python . Python-
, ,
.
.
"Library
Reference" Python-.
.

, .
, ,
Python-.

16.1 sys
sys .
sys.argv .
Python- , , ,
3 . sys
.

91

16 e e
$ python3
>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=3, micro=0, releaselevel='final',
serial=0)
>>> sys.version_info.major >= 3
True
:
sys version_info, .
. , ,
Python 3.0:
proveraverzije.py :
import sys, warnings
if sys.version_info.major < 3:
warnings.warn("Potreban Vam je Python 3.0 da bi pokrenuli
ovaj program",
RuntimeWarning)
else:
print('Nastaviti normalno')
:
$ python2.7 proveraverzije.py
proveraverzije.py:6: RuntimeWarning: Potreban Vam je Python 3.0
da bi pokrenuli ovaj program
RuntimeWarning)
$ python3 proveraverzije.py
Nastaviti normalno
:
warnings
. Python-
3, .

16.2 logging

,
/ ? " " ?
logging .
koristiti_logovanje.py :
import os, platform, logging
if platform.platform().startswith('Windows'):
log_fajl = os.path.join(os.getenv('HOMEDRIVE'),
os.getenv('HOMEPATH'), 'test.log')
else:

92

16 e e
log_fajl = os.path.join(os.getenv('HOME'), 'test.log')
print("Logujem u", log_fajl)
logging.basicConfig(
level = logging.DEBUG,
format = '%(asctime)s : %(levelname)s : %(message)s',
filename = log_fajl,
filemode = 'w',
)
logging.debug("Pocetak programa")
logging.info("Radim nesto")
logging.warning("A sad umirem")
:
$ python3 koristiti_logovanje.py
Logujem u C:\Documents and Settings\xlure\test.log
test.log , :
2013-04-10 22:20:43,406 : DEBUG : Pocetak programa
2013-04-10 22:20:43,421 : INFO : Radim nesto
2013-04-10 22:20:43,421 : WARNING : A sad umirem
:
- os
, platform ,
logging .
,
platform.platform() ( import platform;
help(platform) ). Windows, ,
. ,
. , Home
.
os.path.join() .
,
,
.
logging
.
, , ,
. ,
,
.

16.3
, ,
93

16 e e
, regular expressions .
Doug Hellmann Python Python .

16.4
Python
. Python e
e .
Python-,
Python .

17 ...
Python- .
, Python-.

17.1
?
. .
>>> def daje_detalje_greske():
return(2, 'drugi detalj greske')
>>> brojgreske, stringgreske = daje_detalje_greske()
>>> brojgreske
2
>>> stringgreske
'drugi detalj greske'
a, b = <neka ekspresija>
.
(a, <sve ostalo>) ,
, :
>>> a, *b = [1, 2, 3, 4]

94

17 ...
>>> a
1
>>> b
[2, 3, 4]
Python- :
>>>
>>>
>>>
(8,

a = 5; b = 8
a, b = b, a
a, b
5)

17.2
, __init__ __del__
.
. ,
x[kljuc] (
), , ,
__getitem__() . , Python
list !
.
, .
__init__(self, ...) -
.
__del__(self) - .
__str__(self) - print str() .
__lt__(self, drugi) - " " (<).
, (+, >, ).
__getitem__(self, kljuc) - x[kljuc]
.
__len__(self) - len()
.

17.3
. ,
. ,
, , e .
:
>>> zastava = True
>>> if zastava: print('Da')
Da
-, .
,
, ,
.
95

17 ...

17.4
lambda . , lambda

.
( lambda.py ):
tacke = [{'x' : 2, 'y' : 3}, {'x' : 4, 'y' : 1}]
tacke.sort(key = lambda i : i['y'])
print(tacke)
:
[{'y': 1, 'x': 4}, {'y': 3, 'x': 2}]
:
sort list-, key
( ).
, ,
, def
, lambda
.

17.5
.

2, 2.
.
( kompresovanje_lista.py ):
prvalista = [2, 3, 4]
drugalista = [2 * i for i in prvalista if i > 2]
print(drugalista)
:
$ python3 kompresovanje_lista.py
[6, 8]
:
( 2*i ),
( if i > 2 ).
.


.

17.6

* ** .
.
96

17 ...
>>> def sumastepena(stepen, *argumenti):
'''Vraca sumu svih argumenata stepenovanih
na specijalni broj'''
totalno = 0
for i in argumenti:
totalno += pow(i, stepen)
return totalno
>>> sumastepena(2, 3, 4)
25
>>> sumastepena(2, 10)
100
* argumenti ,
argumenti . , *, ** ,
/ .

17.7 assert
assert . ,
, ,
, assert .
assert , AssertionError .
>>> mojalista = ['stvar']
>>> assert len(mojalista) >= 1
>>> mojalista.pop()
'stvar'
>>> mojalista
[]
>>> assert len(mojalista) >= 1
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
assert len(mojalista) >= 1
AssertionError
assert . , ,
,
.

17.8 Escape Sequences


, ( ' ).
? , What's your name? .
'What's your name?' , Python - ,
. , , ,
. escape sequence.
\' - .

97

17 ...
'What\'s your name?'.
"What's your name?" ,
. , escape sequence
. ,
escape sequence \\ .
?
, , escape sequence
- \n . Ovo je prva
linija\nOvo je druga linija . escape sequence
- \t . escape sequence,
.
,
, .
:
"Ovo je prva recenica. \
Ovo je druga recenica."
:
"Ovo je prva recenica. Ovo je druga recenica"

17.8.1 Raw String


,
escape sequence, Raw
String . r R . r"Znak za novi red se
oznacava \n" .
Regular Expression-a
Raw String Regular Expression.
. , '\\1' r'\1' .

17.9
Python-a,
. , ,
.
.
Python.

98

17 ...

18 ?
, ,
Python-.

. , : . : "
?".
:
. ,
, , , ,
, , /
. , (
).
,
. ,
.
( , )
.
. Pickle
.
, .
, Python .
, , , ;-) (
, : ). , .
,
99

18 ?
.
, :
.
.
, ,
, (regular expressions).
, Python:

18.1
:
Python Cookbook
Python. " "
Python .
Python Module of the Week o o " "
Python- .

18.2

Python
Python
Norvig-
Python Interview Q & A
StackOverflow python-

18.3 j

Awareteks Python

18.4

PyVideo

18.5
Python , , pythontutor list .

.

18.6
Python-a, Official Python
Planet.

18.7 a
Python Python Package Index
.
, pip.

100

18 ?

18.8
Python-.
( )
Python-. (Bindings) Python-
++ .
Python:
Kivy - http://kivy.org
PyGTK - Python-a GTK+ toolkit GNOME. GTK+
, ,
. Glade .
. GTK+ Linux-y Windows
. ,
GTK+. , PyGTK tutorial.
PyQt - Python-a Qt toolkit- KDE. Qt
, Qt Designer-
Qt . PyQt , (GPL
), .
Qt 4.5 -GPL . ,
PyQt tutorial PyQt book.
wxPython - Python- wxWidgets toolkit-. wxPython
. , Linux-y,
Windows-y, Mac-y embedded . -
wxPython SPE (Stanis
Python Editor) wxGlade . ,
wxPython-. , wxPython tutorial.

18.8.1
, GuiProgramming wiki page at the official python website.
, Python.
.
.
Windows- Mac- Linux-
. , Linux, KDE
GNOME .
, 26 The Python Papers, Volume 3, Issue 1.

18.9
- .
. .
CPython. CPython
Classical Python interpreter.
Python :
Jython - Python- .
Python .
IronPython - Python- .NET .
.NET Python .
101

18 ?
PyPy - Python-a a Python-!

( , # ).
Stackless Python - Python-a thread-based
.
CLPython - Common Lisp-
IronMonkey IronPython- JavaScript ,
Python ( JavaScript-)
("Ajax").
.

18.10 o ( )
,

- :
Functional Programming Howto by A.M. Kuchling
Functional programming chapter in Dive Into Python book
Functional Programming with Python presentation

18.11
, , , .
Python Python.
a
, . , !

102

18 ?

19 FLOSS
Free/Libre and Open Source Software (/a ),
, FLOSS ,
, . FLOSS ,
.
, FLOSS
Python, a Python !
FLOSS-a,
:
Linux - FLOSS , GNU/Linux . Linux
Linus Torvalds . .
.
Ubuntu - ,
Canonical, .
FLOSS-a
. ,
GNU/Linux CD-a!
. ,
; , .
LibreOffice - , ,
, , e , ,
. MS Word MS PowerPoint
. free, libre and open source software.
Mozilla Firefox - .
.
().
103

19 FLOSS
, Thunderbird ,
.
Mono - open source Microsoft .NET . .NET
GNU/Linux, Windows, FreeBSD, Mac OS
.
Apache web server - open source . ,
! . , - Apache
"" ( Microsoft IIS) .
VLC Player - DivX MP3
Ogg VCD DVD ... open source ? ;-)
-
FLOSS, Perl , PHP , Drupal ,
PostgreSQL , TORCS , KDevelop IDE, Xine -
, VIM , Quanta+ , Banshee , GIMP
... .
FLOSS , :
linux.com
LinuxToday
NewsForge
DistroWatch
:
GitHub Explore
OMG! Ubuntu!
SourceForge
FreshMeat
, , -!

104

19 FLOSS

20 Colophon
FLOSS.

20.1
, Red Hat 9.0 Linux, ,
, Fedora Core 3 Linux .
KWord (
" " ).

20.2 e e
DocBook XML Kate
. , OpenOffice
PDF-a, "" HTML .
XEmacs DocBook XML (),
.
, Quanta+ .
XSL stylesheets Fedora Core 3 Linux-. ,
CSS HTML .
, Python- , ""
.
, MediaWiki .
//
wiki .
Vim ViewSource Firefox
Vim-.

105

20 Colophon

20.3
Vim, Pandoc, Mac OS X.

20.4
http://www.swaroopch.com/about/

21

2.0
20 . 2012
Pandoc format , ,
Mediawiki .
, nonlocal

1.90
04 2008,
3,5 !
Python 3.0
MediaWiki ()
1.20
13 2005
Quanta+ Fedora Core 3
. . DocBook .
1.15
28 2004

1.12
16 2004
, .
1.10
09 2004
,
.
1.00
106

21

08 2004
,
.
0.99
22 2004
.
.
0.98
16 2004
Python CSS stylesheet XHTML ,
--
- .
0.97
13 2004
, DocBook XML ().
- .
0.93
25 2004
IDLE- Windows-
0.92
05 2004
.
0.91
30 2003
. .
0.90
18 2003
2 . OpenOffice .
0.60
21 2003
.
0.20
20 2003
.
0.15
20 2003
DocBook XML XEmacs.
0.10
14 2003
Kword-.

107

22
o a , ,
!
,

.
, .

22.1
. Ashraf Ali Khalaf ,
, sourceforge.net
.

22.2
:
Samuel Dias Neto (samuel.arataca@gmail.com),
Python 2.3.5 .
aprendendopython.
Rodrigo Amaral (rodrigoamaral@gmail.com)
.
http://www.swaroopch.org/notes/Python_ptbr:Indice.

22.3
Moises Gomez (moisesgomezgiron@gmail.com)
. , erstwhile wiki.

108

22
Moiss Gmez - (
).
Python-,
Swaroop- . , .
.
,
, , .
.
, ? .
.
.

22.4
http://www.swaroopch.org/notes/Python_cn:Table_of_Contents.
Juan Shen (orion_val@163.com) .
http://www.pycn.org/python%E5%9C%A8%E7%BA%BF%E6%89%8B%E5%86% .
Wireless Telecommunication Graduate School,
Beijing University of Technology, China PR.
, channel estimation multiuser detection of multicarrier CDMA . Python
,
Python Numeric-. Python , ,
, .
Swaroop- : " ". "
" Python-.
Python- . ,
Python-. " "
, Python .
Python .

22.5
Fred Lin (gasolin@gmail.com) .
http://code.google.com/p/zhpy/wiki/ByteOfZhpy.
Python
, Python .
Fred Lin - network firmware- Delta Network-,
TurboGears web framework-.
Python- (:-), Python .
" " ,
. " " Python- .
,
-- wiki ,
.

Python- , 'zhpy' (Python
) ( 2007-).
zhpy ( (Z.H.?, zippy) Python (layer)
Python- ( ).
109

22
.

22.6
Gregory (coulix@ozforces.com.au) .
Grard Labadie (Palmipede) ,
http://www.swaroopch.org/notes/Python_fr:Table_des_Mati%C3%A8res.

22.7
Lutz Horn (lutz.horn@gmx.de), Bernd Hengelein (bernd.hengeleinat@gmail.com) Christoph
Zwerschke (cito@online.de) .
http://abop-german.berlios.de.
Lutz Horn :
32 University of Heidelberg, Germany.
-
.
, , , Python-.
Python-.
ma , ,
.
Python- . -,
.
,
, .
, .
" : Python-", "Dive into
Python". , .
. ' ' , ,
je , .
, DocBook ,
.
Bernd Hengelein :
Lutz .
, . ,
. 34 1980-, "Commodore
C64" .
.
. ++ () ,
. Python,
, .
Python, . ,
. Python,
, .
, . , Lutz
. !

110

22

22.8
, on-line
Python .
@savvasradevic .

22.9
Daniel
(daniel.mirror@gmail.com)

http://python.or.id/moin.cgi/ByteofPython.
W. Priyambodo . ,
http://www.swaroopch.org/notes/Python_id:Daftar_Isi.

22.10
Enrico Morelli (mr.mlucci@gmail.com) Massimo Lucci (morelli@cerm.unifi.it)
.
www.gentoo.it/Programmazione/byteofpython.
http://www.swaroopch.org/notes/Python_it:Prefazione.
Massimo Lucci Enrico Morelli - University of Florence (Italy) - .
(Massimo)
,
/ . Python- ,
Linux .
www.gentoo.it, Gentoo/Linux www.nmr.it (
)
. !
Python-
(
).

22.11
http://www.swaroopch.org/notes/Python_ja:Table_of_Contents.
Shunro Dozono (dozono@gmail.com) .

22.12
Ariunsanaa Tunjin (luftballons2010@gmail.com) .
22, 2009: Ariunsanaa .

22.13 (bokml)
Eirik Vgeskar (http://www.swaroopch.org/notes/User:Vages) Sandvika
videregende skole , (bokml).

http://www.swaroopch.org/notes/Python_nbno:Innholdsfortegnelse .
Eirik Vgeskar: , ,
.
,
. , . "
111

22
"
, Python- .
, .
( ),
.

22.14
Dominik Kozaczko (dkozaczko@gmail.com) .
: Ukas Pythona.
: 2 2009.
, !
Dominik Kozaczko - .

22.15
Fidel Viegas (fidel.viegas@gmail.com) .

22.16
Paul-Sebastian Manole (brokenthorn@gmail.com)
.
Paul-Sebastian Manole - Spiru Haret University
. - Python. Web-
" ".
( ).
Python
Swaroop- . , ,
, .
http://www.swaroopch.org/notes/Python_ro.

22.17
Averkiev Andrey (averkiyev@ukr.net) ,
( ).
Vladimir Smolyar (v_2e@ukr.net) .
http://www.swaroopch.org/notes/Python_ru:Table_of_Contents .

22.18
Albertio Ward (albertioward@gmail.com) fatcow.com/edu/pythonswaroopch-sl/ :
" ".
, , Slavonic University.
: , , , .

. ;
. ,

.

112

22
.
?
( : ???) .
,
. ,
. ,
.

22.19
Alfonso
de
la
Guarda
Reyes
(alfonsodg@ictechperu.net),
Gustavo
Echeverria
(gustavo.echeverria@gmail.com), David Crespo Arroyo (davidcrespoarroyo@hotmail.com)
Cristian Bermudez Serna (crisbermud@hotmail.com)
. , ()
http://www.swaroopch.org/notes/Python_es-ar:Tabla_de_Contenidos .
Gustavo Echeverria :
. # .NET
. ,
, Python .
Python-, , .
. , ,
" " Maximiliano Soler.
Cristian Bermudez Serna :
University of Antioquia (Colombia).
, ,
.

22.20
Mikael Jacobsson (leochingkwake@gmail.com) .

22.21
Trker SEZER (tsezer@btturk.net) Bugra Cakir (bugracakir@gmail.com)
. ? Bitse de okusak.

113

22

23
- https://github.com/swaroopch/byte_of_python .
.
, .
.
.pd . Pandoc
README .
README
, .

114

You might also like