The document discusses the Python programming language including its features like dynamic typing, variables, arithmetic operations, control flow statements, lists, file input/output, and more. It provides examples of common Python constructs and how to work with lists, files, and other data structures.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
28 views
Python Quick
The document discusses the Python programming language including its features like dynamic typing, variables, arithmetic operations, control flow statements, lists, file input/output, and more. It provides examples of common Python constructs and how to work with lists, files, and other data structures.
# -*- 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-