D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13.
avgust 2014 21:52
# -*- coding: utf-8 -*-
#PYTHON jezik#
#interpretatorski jezik - nema kompajliranja
#pokrece se sa python iz komandnog promta ili preko IDE
#za komentar se koristi #
#varijable ne moraju da se deklarisu (tipovi - int, string, float...)
planeta='Pluton'
p=planeta
#nece doci do greske ako se varijabla redefinise dok ce python osloboditi mem.
#mesto (reciklirati) gde je string 'Pluton' bio smesten (garbage collected)
planeta=10
#varijablama se mora pridruziti vrednost pre koriscenja (nema mogucnost za
#predefinisanu vrednost npr 0) inace ce se javiti greska
planeta='Saturn'
#print platena #ce prijaviti gresku:
# File "D:\INFO\Python\python_quick.py", line 17, in <module>
# print platena
#NameError: name 'platena' is not defined
#Vrednosti IMAJU TIP s tim sto ih python automatski prepoznaje
#stampa stringova
print ('2'+'3') #rezultat = 23
#stampa zbira konverzije stringa i integera
print (int('2')+3) #rezultat = 5
#stampa 2 x stringa 3
print (2*str(3)) #rezultat = 33
#stampa integera, float, complex broja
print (14) #32-bitni integer
print (14.021) #64-bitni float
print (1+4j) #2 x 64-bitna float
#definicija kompleksnog broja i izvlacenje real i img dela
Comp=2+7j
print (Comp.real) #rezultat 2.0
print (Comp.imag) #rezultat 7.0
#Aritmeticke operacije
# Sabiranje +
35+22 # jednako 57
'Py'+'thon' #jednako 'Python'
# Oduzimanje -
35-22 #jednako 13
# Mnozenje *
3*2 #jednako 6
'Py'*2 #jednako 'PyPy'
# Deljenje /
3.0 / 2 #jednako 1.5
3 / 2 # integer deljenje; jednako 1
# Stepenovanje **
2**0.5 # jednako 1.41421356...
-1-
D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13. avgust 2014 21:52
# Ostatak %
13 % 5 # jednako 3
#skracivanje zapisa (inkrementiranje, dekrementiranje itd)
godine=500
godine += 1 # sto je ekvivalentno godine=godine + 1
god=13
god%=5 #sto je ekvivalentno god=god % 5 a nova vrednost god = 3
#Poredjenje
# vece >, manje <, razlicito !=, jednako ==, kombinacije <,>,=
3>5 #vrednost FALSE
3<5 #vrednost TRUE
3!=5 #vrednost TRUE
3==5 #vrednost FALSE
3>=5 #vrednost FALSE
1<2<4 # #vrednost TRUE !!! Ovo je dozvoljeno u Pythonu ali se ne preporucuje
#(3+2j) < 5 #GRESKA, nije dozvoljeno osim == i !=
(3+2j) != 5 #vrednost TRUE
(3+2j) == (3+2j) #vrednost FALSE
#KONTROLA TOKA (While, if/else)
#WHILE petlja (petlja sa izlaskom na vrhu)
num_moons=3
while num_moons >0:
print num_moons
num_moons -=1
#IF, ELIF, ELSE (odlucivanje)
moons=3
if moons <0:
print 'less'
elif moons == 0:
print 'equal'
else:
print 'greater'
# Python koristi indentaciju - uvlacenje blokova
#U prethodnom primeru IZVRSNI BLOK je uvucen ispod while pellje
# i kao takav se smatra segmentom koji ce se ponavljati u ovoj petlji
# preporucuje se 4 space pozicije za uvacenje(prema PEP 8 - Python Style Guide)
# nije bitno koliko space-ova se koristi dok god je konzistentno za blok
# NE KORISTITI TAB!!!!
# Primer blokovskog uvlacenja
num = 0
while num <= 10:
if (num % 2) == 1:
print num
num += 1
# prethodna procedura moze da glasi i (sto je bolji nacin da se uradi)
num = 1
while num <= 10:
print num
num += 2
#PRIMER: nalazenje prostih brojeva do 1000
# varijabla trial sluzi da se proveri da li je num deljivo sa nekim brojem
# ovde se koristi trik da se broj ne moze podeliti bez ostatka sa brojem vecim
-2-
D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13. avgust 2014 21:52
# ili jednakim od njegovog kvadratnog korena
num=2
while num <=1000:
is_prime=True
trial = 2
while trial**2 <= num:
if (num % trial) == 0:
is_prime = False
trial += 1
if is_prime:
print num
num += 1
#LISTE#
# kreiranje liste
gases = ['He','Ne','Ar','Kr']
empty_list=[] # definisanje prazne liste
print gases # stampanje cele liste
print gases[1] # stampanje clana sa indexom 1 tj 'Ne'
# Indeksi pocinju od 0, ne od 1
# pristupanje nepostojecem clanu izaziva GRESKU (list index out of range)
# ako se ne zna velicina liste - koristiti funkciju len(lista)
print (len(gases)) #ispisuje 4
# mogu se koristiti negativni indeksi po principu
# -1 - poslednji element
# -2 - predposlednji element...
print gases[-1], gases[-4]
# programeri koriste cesce ovu notaciju:value [-1] nego
# value[len(value)-1] - zato sto umanjuje verovatnocu greske
# PRAVILA I METODE NAD LISTAMA
# 1. Liste se mogu menjati nakon kreiranja
# 2. ne moze se pridruzivati vrednost nepostojecem clanu liste npr gases[4]='Xe'
# prijavice se GRESKA
# 3. Liste su heterogene - mogu skladistiti vrednosti razlicitih tipova npr
helium = ['He',2]
neon = ['Ne',8]
gas = [helium,neon] #u liste se mogu smestati liste
# 4. clanovi liste se mogu brisati funkcijom - del npr
gases = ['He','Ne','Ar','Kr']
del gases[0] #umanjuje broj clanova za 1 i brise prvi clan
# ako se obrise nepostojeci clan liste - nece se prijaviti greska
# 5. novi clanovi se mogu dodati sa metodom - append npr
# METODA SE NA LISTAMA PRIMENJUJE DODAVANJEM tacke iza liste i specificiranjem
# metode - podatak.metod (argument)
gases = []
gases.append('He')
gases.append('Ne')
gases.append('Ar')
print gases #ispisace ['He', 'Ne', 'Ar']
# popularne metode nad listama
# - prebrajanje broja istih clanova liste
gases = ['He','He','Ne','Ar','Kr']
print gases.count('He') # ispisuje 2
# - vracanje indeksa prvog pojavljivanja clana liste
print gases.index('Ar') # ispisuje 3
-3-
D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13. avgust 2014 21:52
# - ubacivanje clana na poziciju arg. a ostali se pomeraju za jedno mesto
gases.insert(1,'Ne')
print gases #ispisuje ['He','Ne','He','Ne','Ar','Kr']
# - sortiranje liste ascedentno
gases = ['He','Ne','Ar','Kr']
gases.sort()
print gases # vraca ['Ar', 'He', 'Kr', 'Ne']
# - obrtanje liste naopako
gases.reverse() #na prethodnu sortiranu listu
print gases # vraca ['Ne', 'Kr', 'He', 'Ar']
# - provera clanstva unutar liste
gases = ['He','Ne','Ar','Kr']
print 'He' in gases # vraca True
#ili
if 'Pu' in gases:
print 'ali Plutonijum nije gas!'
else:
print 'Ok. Nema ga u plemenitim gasovima'
# - kreiranje liste brojeva
print range(5) # vraca [0, 1, 2, 3, 4]
print range(2,6) #pocinje od 2 i ide do drugog argumenta-1 tj [2, 3, 4, 5]
print range(0,10,3) # pocinje od 0 ide do 10-1 sa korakom 3 tj [0, 3, 6, 9]
#stampanje clanova liste nacin 1 - WHILE petlja
gases = ['He','Ne','Ar','Kr']
i=0
while i < len (gases):
print gases[i]
i+=1
#stampanje clanova liste nacin 2 - FOR petlja
gases = ['He','Ne','Ar','Kr']
for gas in gases: #varijabli gas se ne pridruzuje indeks vec vrednost liste
print gas
# stampanje indeksa i clanova liste koriscenjem FOR petlje i range metode
gases = ['He','Ne','Ar','Kr']
for i in range(len(gases)):
print i, gases[i]
#ULAZI/IZLAZI#
#otvaranje fajlova i pristup podacima u njima
#otvara se fajl za citanje i povezuje na varijablu reader
reader = open('haiku.txt','r')
#metodom read se cita fajl i smesta u varijablu tipa string - data
data = reader.read()
reader.close() #zatvara se fajl
print 'duzina u bajtovima je '+str(len(data)) #prikaz duzine varijable
#u slucajevima da je fajl vece duzine (MB) tada ga treba citati u blokovima
reader = open ('haiku.txt','r')
#argument u read metodi kaze maksimalni broj bajtova koji se treba procitati
-4-
D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13. avgust 2014 21:52
data = reader.read(32)
while data !='':
print 'duzina segmenta je '+str(len(data))
data = reader.read(32)
print 'duzina poslednjeg segmenta je '+str(len(data)) #kao provera zavrsetka
reader.close()
#citanje linija iz fajla i npr racunanje prosecne duzine linije
reader = open('haiku.txt','r')
line = reader.readline() #metoda citanja linije iz fajla - readline
total = 0
count = 0
while line !='':
count+=1
total+=len(line)
line = reader.readline()
reader.close()
print 'srednja duzina linije je '+str(float(total)/float(count))
#takodje se mogu procitati sve linije od jednom
reader = open('haiku.txt','r')
contents = reader.readlines() #metoda citanja svih linije iz fajla - readlines
#varijabla contents je lista stringova
reader.close()
total = 0
count = 0
for line in contents:
print str(count+1), '.linija glasi: ', contents[count]
count+=1
total+=len(line)
print 'srednja duzina linije je '+str(float(total)/float(count))
#Python prethodnu proceduru moze da uprosti na sledeci nacin
#moguce je da fajl vec inicijalno bude prihvacen kao lista linija tako da:
reader = open('haiku.txt','r')
total = 0
count = 0
for line in reader:
count+=1
total+=len(line)
reader.close()
print 'srednja duzina linije je '+str(float(total)/float(count))
#smestanje podataka u fajl sa metodama write i writelines
writer = open('temp.txt','w') #argument w za pisanje
writer.write('elements')
writer.writelines(['He','Ne','Ar','Kr'])
writer.close()
#rezultat je fajl sa sadrzajem : elementsHeNeArKr
#nema novog reda
#ovo se moze eliminisati sa dodavanjem EOL karaktera \n:
writer = open('temp.txt','w')
writer.write('elements\n')
writer.writelines(['He\n','Ne\n','Ar\n','Kr\n'])
-5-
D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13. avgust 2014 21:52
writer.close()
#sto je neprakticno tako da se moze koristiti print sa redirektom >>
writer = open('temp.txt','w')
print>>writer, 'elements'
for gas in ['He','Ne','Ar','Kr']:
print>>writer, gas
writer.close()
#kopiranje jednog fajla u drugi - verzija 1
reader = open('haiku.txt','r')
data = reader.read()
reader.close()
writer = open ('haiku_copy.txt','w')
writer.write(data)
writer.close()
#verzija 2 za ogromne text fajlove
reader = open('haiku.txt','r')
writer = open ('haiku_copy.txt','w')
for line in reader:
writer.write(line)
reader.close()
writer.close()
#ili (uz problem 2 x EOL-a sto uzrokuje novi prazan red posle svake linije)
reader = open('haiku.txt','r')
writer = open ('haiku_copy.txt','w')
for line in reader:
print>>writer, line
reader.close()
writer.close()
#ili sa koriscenjem konstante (u Pythonu je praksa da se varijable koje se
#koriste kao konstante pisu velikim slovima)
BLOCKSIZE = 1024 #konstanta 1024 bajta
reader = open('haiku.txt','r')
writer = open ('haiku_copy.txt','w')
data = reader.read(BLOCKSIZE)
while len(data) > 0:
writer.write(data)
data = reader.read(BLOCKSIZE)
reader.close()
writer.close()
#RAD SA STRINGOVIMA
#stringovi se mogu navoditi i pod apostrofima i pod navodnicima - nije bitno
#sta je dok je konzistentno
print 'Alan',"Turing"
#karakter je string duzine 1
#prvi karakter stringa je text[0] a poslednji je text[-1]
#stringovi se porede karakter po karakter sa leva u desno
#npr.
print 'a' < 'b' # sto je True
print 'ab' < 'abc' # sto je True zato sto ab string ima manje karaktera
print '1' < '9' # sto je True
-6-
D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13. avgust 2014 21:52
print '100' < '9' # sto je True zato sto je na prvom karakteru 9 > 1
print 'A' < 'a' # sto je True
#stringovi su nepromenljivi tako da bi sledeci kod javio gresku:
name = 'Darwin'
#name[0]='C' # greska TypeError: 'str' obj doesnt support item assignment
# za formatiranje izlaza koristi se kao u C jeziku %
output = 'reagens: %d' %123 #d za integer
print output # sto daje kao rezultat - reagens: 123
#ili za float
procenat_doprinos=12.3
print 'doprinos %6.2f' %procenat_doprinos # rezultat je - doprinos 12.30
#ako se formatira vise velicina od jedne tada se smestaju u zagradu
reagens = 123
procenat_doprinos=12.3
#\ se koristi za nastavau 2.red (ne sme biti nista iza \ inace javlja GRESKU)
print 'reagens: %d daje %6.2f%% doprinos' % \
(reagens, procenat_doprinos)
# gde je %% znak za procenat
# \n je znak za novu liniju
# \\ je znak za \ (backslash)
# \' je znak za apostrof
# \" je znak za navodnike npr
print "Ali rekli ste,\n\"Ima vremena da se ponovi.\""
#za definisanje multi linijskog stringa se koristi 3 x apostrof npr.
quote = '''We can only see
a short distance ahead,
but we can see plenty there
that needs to be done'''
print quote
#sto je ekvivalentno sa:
quote = 'We can only see\na short distance ahead,\n'+\
'but we can see plenty there\nthat needs to be done'
print quote
#standardne metode:
name = 'newTON'
print name.capitalize(), name.upper(),name.lower(),name
#rezultat je: Newton NEWTON newton newTON (sto ne menja originalni string)
dna = 'acggtggtcac'
print dna.count('g'), dna.count('x')
#rezultat je : 4 0
#metoda za pretragu karaktera sa vracanjem pozicije u stringu
#ako postoje argumenti onda su oni pozicije od koje treba poceti pretragu
print dna.find('t'), dna.find('t',5), dna.find('x')
#rezultat je: 4 7 -1 (-1 je da nije pronadjen rezultat)
#metoda za zamenu karaktera ili stringa
print dna.replace('t','x'), dna
#rezultat je: acggxggxcac acggtggtcac
print dna.replace('gt','')
#rezultat je: acggcac
#metode se mogu medjusobno uvezati npr.
element = 'cesium'
-7-
D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13. avgust 2014 21:52
print element.upper().center(10,'.')
#sto string karaktere uvecava i centrira na duzini 10 pri cemu dodaje ... sa
# leva i desna
#rezultat je: ..CESIUM..
#ALIASING
#kada se vrednosti jedne varijable dodeli druga varijabla (dve varijable
#pokazuju na istu mem. lokaciju)
first = 'isaac'
second = first # znaci second = 'isaac'
#ali ako se first promeni tada second ima gore pomenutu vrednost a first novu
first = first + ' newton'
print 'first = %s, second = %s' %(first, second)
#drugi slucaj je sa listama kada promena prvobitne varijalbe utice i na njenu
#alias varijablu
first = ['isaac']
second = first # znaci second = ['isaac']
first = first.append('newton')
print first #daje rezultat ['isaac','newton']
print second #daje isti rezultat ['isaac','newton']
#definisanje 2D matrice
N = 3 #dimenzija matrice
grid = [] #definisanje spoljne liste
for x in range(N): #N x N clanova
temp = [] #definisanje prazne unutrasnje liste
for y in range(x,N+x):
temp.append(y) #unosi se broj y u svaku clan unutrasnje liste temp
grid.append(temp) #unos unutrasnje liste u konacnu spoljnu listu
print grid #rezultat je [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
# sto predstavlja:
# |2 3 4|
# |1 2 3|
# |0 1 2|
#tj. grid[0][0]=0, grid[0][1]=1, grid[2][0]=2...
#kod se moze napisati i na sledeci nacin:
N = 3
grid = []
for x in range(N):
grid.append([])
for y in range(x,N+x):
grid[-1].append(y) #popunjava se uvek posledni element spoljne liste
print grid
#FUNKCIJE
#definisanje funkcije - koristi se kljucna rec def npr.:
def great():
return 'Good evening, Master'
#poziv funkcije
temp = great()
print temp
#ako se definisu parametri tada
-8-
D:\INFO\Prosvetljenje\dokumentacija\python_quick.py 13. avgust 2014 21:52
def greet(name):
answer = 'Hello' + name
return answer
#poziv funkcije
temp = ' doctor'
result = greet(temp)
print result
-9-