Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% 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.

Uploaded by

vladan.cvejic
Copyright
© © All Rights Reserved
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% 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.

Uploaded by

vladan.cvejic
Copyright
© © All Rights Reserved
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
You are on page 1/ 9

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-

You might also like