50
   

Uvod_u_Python_programski_jezik.pdf

Embed Size (px)

Citation preview

  • UNIVERZITET U NOVOM SADUTEHNOLOKI FAKULTET

    PROGRAMIRANJE I PRIMENA RA UNARA

    OKTOBAR, 2004

  • 2SADRAJ

    UVODNA RE ....................................................................................................................................................................... 31. UVOD U PYTHON ......................................................................................................................................................... 42. OSNOVNE STVARI....................................................................................................................................................... 5POKRETANJE PYTHON-A ........................................................................................................................................................ 5NAREDBA PRINT I INPUT, VARIJABLE I STRINGOVI ............................................................................................................. 6UPOTREBA PYTHONA KAO KALKULATORA........................................................................................................................... 13

    2. USLOVNO GRANANJE, PETLJE I PORAVNANJE ........................................................................................ 19IF-ELSE ................................................................................................................................................................................. 21USLOVNO GRANANJE S VIE USLOVA: IF-ELIF-ELSE ........................................................................................................ 23PROGRAMSKA PETLJA WHILE ........................................................................................................................................... 25

    3. LISTE, MANIPULACIJA LISTAMA I FOR LOOP .......................................................................................... 28MANIPULISANJE LISTAMA.................................................................................................................................................... 29FOR LOOP ............................................................................................................................................................................. 31TUPLE ................................................................................................................................................................................... 33

    5. VE I PROGRAMI SKRA IVANJE POSLA, FUNKCIJE .......................................................................... 426. OBJEKTI I OBJEKTNO-ORIJENTISANO PROGRAMIRANJE ................................................................ 48

  • 3UVODNA RE

    Ovaj tutorial namenjen je studentima Prehrambenih i Farmaceutskih smerova naTehnolokom fakultetu u Novom Sadu i ima svrhu da im pomogne u sticanju osnovnihznanja iz programiranja u Python programskom jeziku koje bi sami kasnije primenili nastruku. Tutorial je sastavljen na osnovu raznih tutorijala, prevedenih, obra enih ioboga enih novim primerima, objanjenjima i komentarima. Nadamo se da smo uspelikoliko toliko, da sastavimo materijal koji e u znatnoj meri studentima olakati rad iu enje. Vie o prakti noj primeni Pythona studenti e imati prilike da saznaju na vebamai asovima.

    elimo Vam mnogo uspeha u Pythonisanju. Ukoliko imate primedbe ili sugestijemoete ih poslati na e-mail adresu : [email protected]

    Autori : Vesna Vasi i Jelena MarkoviSavetodavac i recezent: Prof. Dr Radovan Omorjan

    Sa predmeta: Programiranje i primena ra unara

  • 41. Uvod u PythonMnogi ljudi bi hteli zapo eti programirati, ali jednostavno ne znaju kako. QBasic je

    bio dobro reenje pre 10 godina. Danas e vam svi verovatno preporu iti C, C++, Javu,Visual Basic... Loa stvar je, da ni jedan od tih jezika nije lako nau iti bez prethodnogznanja programiranja. Pored toga treba napomenuti da se na raznim inenjerskimfakultetima i univerzitetima izu ava iroka paleta programskih jezika od kojih sunajpopularniji C, C++, Fortran, Basic, Visual Basic, Pascal itd. Tako e, ne postojikonsenzus koji je programski jezik najpogodniji, iako postoji opta saglasnost da moderaninenjer mora da poznaje vie programskih jezika. Evo male eme istorijskog razvojaprogramskih jezika:

  • 5Koji programski jezik onda izabrati? Ako ste genijalac/ka i imate smisla za programiranje,C++ je verovatno dobro rjeenje. Ako ne znate programirati, onda je idealno reenjePython. Zato Python? Prvenstveno zato jer je:* besplatan* lagan za nau iti* mo an* dobro dokumentovan - Python je slobodan softver otvorenog koda ( itaj besplatan) iji je razvoj veomaintenzivan i moe se besplatno skinuti (download-ovati) sa Interneta (www.python.org).Pored toga postoji za vie platformi - Windows, Unix, Linux, Mac OS itd. Qbasic je MSDOSprogram koji je tako e besplatan ali se vie ne razvija. Razvijaju se njegovih komercijalninaslednici - VB, VBA, VBS itd.) - Izuzetno je lak za korisnika. Autori Pythona su se vodili idejom da se pri reavanjuproblema koncentracija posveti samom problemu a ne finesama programskog koda.Postoji miljenje da je jedan od najlakih programskih jezika za kori enje (laki i odQbasic-a). Samim tim i vreme potrebno za savladavanje osnova Python-a je dosta kratko. - Pored toga je i izuzetno mo an. Python se koristi u mnogim sferama primenera unara: od zamene za kalkulator pa do kompleksnih korisni kih programa, stvaranjaweb prezentacija itd. Postoji ogromna biblioteka dodataka za Python (besplatni ilikomercijalni). - Iako je sam Python besplatan on se koristi i u komercijalne svrhe za najrazli itijenamene. Koriste ga mnogi pojedinci i firme. Nave emo neke primere: Sim42 je softverza simula iju hemijskih procesnih postrojenja koji je napisan u Python-u, Biopython jebesplatni dodatak za molekularnu biologiju, Bioconductor je besplatan dodatak zabioinformatiku itd. Kao potvrda popularnosti je i to da je on rangiran me u prvih desetnajpopularnijih i najkori enijih programskih jezika u svetu (www.tiobe.com : Python - 8mesto, avgust 2004)Python je izvrstan kao po etni jezik, a ako ga nastavite u iti, shvati ete kako je mo an.Pa, po nimo...Python je objektno-orjentisani jezik. Vama verovatno to sada apsolutno nita ne zna i. Toemo objasniti u nekom drugom delu.

    2. Osnovne stvariPokretanje Python-aPrvo to treba da uradite je da downloadujete Python sa http://http://www.python.org.Velik je oko 7MB, ali se download isplati. Zavisno koji operativni sistem imate(pretpostavljamo da imate Windowse - uz skoro sve Linux distribucije dolazi dobroiskonfigurisani Python), pokrenite instalaciju i instalirajte Python.Nakon toga, moete pokrenuti Python kliknuvi na "Start"->"Programs"->"Python2.3"->"IDLE (Python GUI). Trebalo bi da dobijete ovakvu poruku:

  • 6Python 2.3.4 (#53, May 25 2004, 21:17:02) [MSC v.1200 32 bit (Intel)] on win32Type "copyright", "credits" or "license()" for more information. **************************************************************** Personal firewall software may warn about the connection IDLE makes to its subprocess using this computer's internal loopback interface. This connection is not visible on any external interface and no data is sent to or received from the Internet. ****************************************************************IDLE 1.0.3>>>

    >>> (tri strelice) zna e da je Python spreman za unos naredbe. Python je interpreterskijezik, to zna i da nije mogu e da napravite .EXE od vaeg programa, nego programmorate pokretati pomo u interpretera.(NOTE: Zapravo, .exe datoteka se moe napraviti -postoji jedan program koji pretvara .py u .exe.URL: py2exe)

    Naredba print i input, varijable i stringovi

    Probajte napisati print "Python rules!". Program bi trebao ispisati Python rules naekranu. Primetite da program odmah izvrava vau naredbu. Ako prvo elite napisatiprogram, pa onda ga pokrenuti, odaberite "File"->"New window" i tu napiite program.Kada zavrite, spremite program ("File"->"Save") i odaberite "Edit"->"Run Script" iprogram e se pokrenuti.

    Postoji tradicija da se pri pisanju uputstva uvek prvo navede program koji ispisuje"Zdravo, svete!" na ekran. U Python-u , ovo je zaista lako :print "Hello, world!"Ovo je prakti no kao recept koji govori kompjuteru ta da radi : Da ispie "Hello, world!".Nita lake. ta ako elimo da uradi vie stvari?print "Hello, world!"print "Goodbye, world!"Nije mnogo tee, zar ne? I ne ba zanimljivo... Mogli bi neto da uradimo sa sastojcima,ba kao pri pravljenju salate. Pa koje sastojke imamo? Kao prvo, imamo nizove tekstakao "Hello, world!", ali tako e imamo i brojeve.Python jako dobro slui i kao kalkulator. Uprozoru "Python shell" upiite neki matemati ki izraz, npr. 2+2, i Python e ispisatirezultat. Moete koristiti zagrade, imaginarne brojeve (ta god to bilo), itd.>>> 2+24

  • 7Dobro, po nimo programirati. Nau ili smo ta radi naredba print - ispisuje neto naekranu. Moemo tako e napisati print 2+2>>> print 2+24pogledajmo malo druga iji primer:>>> print '2+2'2+2Zapaate razliku? Python tretira niz karaktera izme u navodnika kao string tj. kao tekst,pa se razlikuje rezultat u predhodna dva primera.Recimo da elimo da kompjuter izra una povrinu pravougaonika za nas. Tada bi mumogli zadati ovakav mali recept:# Povrsina pravougaonika# Sastojci:sirina = 20visina = 30# Uputstva:povrsina = sirina*visinaprint povrsinaVerovatno moete da vidite sli nosti sa receptom za salatu. Ali kako to radi? Pre svega,linije koje po inju sa # zovu se komentari (recimo u Pascal-u je to {tekst} -prim.prev.) injih kompjuter ignorie. Ipak, ubacivanje malih objanjenja kao to su ova moe bitiolakavaju a okolnost za ljude koji itaju kod vaeg programa. Sada, redovi koji izgledajukao neto = merna jedinica zovu se dodele. U slu aju sirina = 20 govorimo kompjuteruda irina treba biti 20 . ta to zna i "irina je 20"? To zna i da je stvorena promenljiva saimenom "sirina" (ili ako ve postoji, promenjena je njena vrednost) i data joj je vrednost20. Tako, kada kasnije koristimo tu promenljivu, kompjuter zna njenu vrednost. Zato,sirina*visinaJe u stvari isto kao20*30ijim izra unavanjem dobijamo 600, to se sada dodeljuje promenljivoj po imenu

    "povrsina". Poslednja linija programa ispisuje vrednost promenljive "povrsina", pa je onoto vidite kada pokrenete program samo

  • 8600Napomena : U nekim jezicima morate kompjuteru da kaete koje su vam promenljivepotrebne na samom po etku programa (kao spisak sastojaka za salatu) Python jedovoljno pametan da ih sam shvati idu i redom. U Pythonu se ne morate brinuti odeklarisanju tipa varijable (u mnogim drugim programskim jezicima se prilikomdodeljivanja imena promenjivoj mora voditi ra una o deklaraciji), Python sam odre uje tipvarijable, za razliku od C++-a gde prvo svaku varijablu morate deklarisati (zajedno snjenim tipom - integer, double, char, ...).

    OK. Sada moete da izvedete jednostavne, ali i veoma sloene prora une. Na primer,moda elite da program izra una povrinu kruga umesto pravougaonika :>>> poluprecnik=30>>> print poluprecnik*poluprecnik*3.142826.0Kako bilo, ovo nije mnogo zanimljivije nego program za pravougaonik, nekeko jenepromenljivo. ta ako krug koji nama treba ima polupre nik 31? Kako bi kompjuter toznao?. Treba nam podrka, ili INPUT. Sada kada znamo kako ispisivati na ekranu, vremeje da nau imo kako uzimati informacije od korisnika. Za to koristimo naredbu input. Kakokompjuter da sazna polupre nik kruga? I njemu treba ulazna vrednost... ta mi moemoda mu kaemo to je da pita korisnika koliki je polupre nik.poluprecnik = input("Koliki je poluprecnik?")print poluprecnik*poluprecnik*3.14Rezultat programa izgleda ovako:Koliki je polupre nik?313017.54Sad stvari postaju zapetljane... ulaz je neto to zovemo funkcija. (Uskoro ete nau iti dastvarate svoje. Input je funkcija koja je ugra ena u Python programski jezik.).Jednostavno piu i:Inputne emo posti i mnogo... Morate da stavite par zagrada na kraju. Tako, input() bi radilo jednostavno bi ekalo da korisnik unese polupre nik. Verzija odozgo je moda laka zakori enje, jer ipak prvo ispisuje pitanje. Kada stavimo neto kao niz teksta "Koliki jepolupre nik?" u zagradu funkcije to se zove dodela parametra funkciji. Stvar (ili stvari) uzagradi su parametri. U ovom slu aju dodajemo pitanje kao parametar da input zna tada ispie pre nego to dobije odgovor od korisnika.Ali kako odgovor dospeva do promenljive polupre nik? Funkcija input, kada je pozvana,vra a vrednost (kao i mnoge druge funkcije). Ne morate da koristite ovu vrednost, ali unaem slu aju, elimo tako. Zato, slede e dve izjave imaju veoma razli ito zna enje :

  • 9nesto = inputvrednost = input()neto sada ima samu funkciju unosa (pa moe biti koris eno kao neto("koliko imasgodina ?"); ovo se zove poziv dinami ne funkcije) dok vrednost sadri ono to je korisnikuneo..Slede i program pita korisnika koliko ima godina, i nakon toga ispisuje rezultat na ekranu:godine = input('Koliko imate godina? ')print godinePrvo se varijabli godine pridruuje korisnikov unos (unos traje dok korisnik ne pritisneENTER), a onda se vrednost varijable ispisuje.Probajte - otvorite IDLE (Python GUI), odaberite File->New window, i tamo kopirajteovaj program. Snimite ga pod nekim imenom i stisnite F5 da bi ga pokrenuli. Divite sesvom prvom programerskom ostvarenju! :)

    Umesto broja godina, moemo pitati korisnika da upie bilo ta i da se to onda ispie naekranu. Kod je isti, osim jedne male razlike u naredbi unosa. Naredba vie nije input, veraw_input, pa kod izgleda ovako:tekst = raw_input('Unesite neki tekst: ')print tekstZna i, za brojeve koristimo naredbu input, a za stringove koristimo raw_input.Vana napomena: Pzthon ima dvadeset i osam klju nih re i koje ne bi trebali da koristiteza imena promenjivih, jer ih on tuma i kao naredbe, a to su:

    Pogledajmo slede i primer:a = 2b = 4print a + bUnesete li ovaj program i pokrenete li ga, na ekranu ete dobiti rezultat 6. Zato? a i b su(kao to ve znamo) varijable, i to broj ane, kojima su dodijeljene vrednosti 2 i 4. Pythonmoe sabirati i varijable . Dok god su te varijable broj ane (mogu biti i decimalne, nijevano), sabiranje e biti logi no. No probamo li pokrenuti ovaj program:

  • 10

    a = "Python"b = "rules"print a + b

    rezultat je pomalo neo ekivan, iako ne nelogi an: Pythonrules. Primetimo da su a i b uovom slu aju stringovi (upiete li a = python (bez navodnika oko re i python), Python emisliti da varijablu "a" pokuavate pridruiti vrednosti varijable python, a budu i da tavarijabla ne postoji, izbaci pogreku). Python radi neto to se zove zdruivanje stringova,iliti spajanje. Tu Python jednostavno na kraj vrednosti prve varijable ubacuje vrednostdruge varijable. Python zdruivanje stringova radi automatski isklju ivo sa stringovima, asa brojevima se to moe uraditi tako da broj pretvorimo jednom naredbom (koju emou iti neki drugi put) u string, i onda ih pridruimo.Ukoliko elimo da ostavimo korisniku mogu nost da unese proizvoljne vrednosti za a i b,program emo pisati ovako:a = input ("unesite vrednost a=")b = input ("unesite vrednost b=")c = a+bprint "a+b=",cOvaj program i prvo pita korisnika da unese vrednost za a i b, a zatim promenjivoj cdodeljuje vrednost zbira i kona no tampa tekst a+b=, iza kojeg postavlja vrednostpromenjive c.Jo malo o print naredbiAko ste pomno pratili tutorial, mogli ste videti neto to je prili no samoobjanjavaju e,ali to ipak do sada nismo objasnili. To je ova linija:print "ja koristim", website, "da bi saznao stvari o muzici"Prvo imamo print naredbu za koju znamo to radi. Nakon toga print naredba ispisujestring "ja koristim". Tu stane i trai vrednost varijable "website" i ume e je na to mjesto(uz razmake na po etku i na kraju - tako da se oko toga ne trebate brinuti), i onda opetnastavlja ispis stringa "da bi saznao stvari o muzici". Ovo je vrlo korisno jer se u drugimprogramskim jezicima mora pribegavati druga ijim i mnogo komplikovanijim rjeenjima.Jo malo o stringovimaStringovi poseduju indekse koji odre uju poloaj pojedinih karaktera. Stringovi se zarazliku od listi (koje emo kasnije objasniti) ne mogu menjati preko indeksa.

    Pogledajmo ovaj primer:string = "python"print string[0:2]

  • 11

    Daje: py - prva dva slova stringa... Mnogo bolje nego QBasicov LEFT$(a,b) i sli no.Tako e moemo uzimati vrednosti i s kraja (ovo vai i za stringove i za liste) sapredznakom -:string = "python"print string[-1]Daje: n, zadnje slovo stringa.Moda bi jo koji primer pojasnio razliku izme u stringa, komentara i numeri kihvrednosti u Python-u pa evo ih:PR.1:#Ovo je prvi komentarmleko=1 #Ovo je drugi komentar #a evo i trecegstring= " ovo nije komentar "PR.2:#ovo je komentar u programskoj linijiprint 2+2 #ovo je komentar u istoj programskoj liniji sa instrukcijomPR.3:#ovo je pocetak programaprint 2+2 #ova programska linija stampa 4#print 2+2 ovo je samo komentarPR.4:# ovo je program koji deli dva brojax = input("x=") #sada pitamo korisnikakolika je vrednost za xy=input("y=") # sada pitamo korisnikakolika je vrednost za yprint "y/x=", y/x #na kraju tampamo kolicnikProbajte ovo:>>> word = Help + A>>> wordHelpA>>>

    >>> word[4]A>>> word[0:2]He>>> word[2:4]lp>>> word[:2] # The first two charactersHe

  • 12

    >>> word[2:] # All but the first two characterslpANajbolji na in je da razmiljate o indeksima kao o ta kama izme u karaktera, ovako:+---+---+---+---+---+| H | e | l | p | A |+---+---+---+---+---+0 1 2 3 4 5-5 -4 -3 -2 -1

    Napravite novi string kormbinacijom sa starim:>>> x + word[1:]xelpA>>> Splat + word[4]SplatAMoete se igrati, pa isprobajte npr neto ovako:

    >>> word[:2] + word[2:]HelpA>>> word[:3] + word[3:]HelpA>>> word[1:100]elpA>>> word[10:]

    >>> word[2:1]Indeksi mogu biti negativni ako po nemo brojati s desna:>>> word[-1] # The last characterA>>> word[-2] # The last-but-one characterp>>> word[-2:] # The last two characterspA>>> word[:-2] # All but the last two charactersHel>>> word[-0] # (since -0 equals 0)H>>> word[-100:]HelpA>>> word[-10] # errorTraceback (most recent call last):File "", line 1, in ?IndexError: string index out of rangeA ovako moete proveriti koliko karaktera ima neka promenjiva:

  • 13

    >>> s = supercalifragilisticexpialidocious>>> len(s)34PRIMERI I VEBE

    Primer 1 :Napisati program koji e dati ovakav rezultat:Reenje:ODE TO COMPUTERS****************I think I shall never seeA computer program smarter than me.But computer's power is extremely fast,It computes answer very fast!Primer 2:Napisati Python program koji pita korisnika kako se zove i koliko ima godina, a zatim tepodatke tampa.Reenje:ime=raw_input("kako se zoves ")prez=raw_input("kako se prezivas ")god=input("koliko imas godina ")print "Ti si ",ime, prez," imas ", god," godina"

    Upotreba Pythona kao kalkulatoraPokuajmo da koristimo Python kao kalkulator, pa jednostavno, interpeter deluje isto kaoi kalklator : ukucajte izraz i dobi ete rezultat. Prioritet operatora je sli an kao u drugimprogramskim jezicima. Python izvrava operacije prema prioritetu koji moete kontrolisatipostavljanjem zagrada. Kao u drugim programskim jezicima izrazom imepromenjive=izrazdodeljujete vrednost promenjivoj. Sve e biti jasnije sa primerima.Evo prioriteta svih operatora:+x, -x, ~x Unary operatorsx ** y Power (right associative)x * y, x / y,x % y Multiplication, division, modulox + y, x - y Addition, subtractionx > y Bit shifting

  • 14

    x & y Bitwise andx | y Bitwise orx < y, x y, x >= y, x == y,x != y, x y, x is y, x is not y, xin s, x not in s>> 12/3*416Zapaate da je rezultat 16, a ne 1. Primenite zagrade i evo 1.>>> 12/(3*4)1Pogledajmo slede e :>>> (50-5*6)/45>>> # Celobrojno deljenje>>> 7/32ovako dajemo do znanja da elimo decimalni rezultat>>> 7./32.3333333333333335i jo primera:>>> 3*3.75/1.57.5>>> 7.0/23.5dodelite istu vrednost za vie varijabli :>>> x=z=y=0>>> x0>>> z0>>> y0

  • 15

    Pogledajmo razliku u slede im primerima:>>> 4**3./232.0I drugi:>>> 4**(3./2)8.0U prvom slu aju 4 prvo stepenujemo sa 3 , pa rezultat delimo sa 2, dok u drugom osnovu4 stepenujemo na 3/2. Ukoliko elimo da korenujemo neki broj to moemo uraditijednostavnim stepenovanjem na 1/2 ili ovako:from math import*x=input ("unesi x= ")print "x=",x,"koren x=",sqrt(x)u prvoj programskoj liniji pozivamo matemati ke funkcije, u drugoj taimo broj odkorisnika, u tre oj ispisujemo rezultat dobijen primenom fje sqrt( ) onosno kvadratnogkorena. Koje jo f-je vam stoje na raspolaganju moete pogledati ukoliko u *PythonShell* ukucate help( ),math. Evo ta dobijete:help> mathHelp on built-in module math:NAME mathFILE (built-in)DESCRIPTION This module is always available. It provides access to the mathematical functions defined by the C standard.FUNCTIONS acos(...) acos(x) Return the arc cosine (measured in radians) of x. asin(...) asin(x) Return the arc sine (measured in radians) of x. atan(...) atan(x)

  • 16

    Return the arc tangent (measured in radians) of x. atan2(...) atan2(y, x) Return the arc tangent (measured in radians) of y/x. Unlike atan(y/x), the signs of both x and y are considered. ceil(...) ceil(x) Return the ceiling of x as a float. This is the smallest integral value >= x. cos(...) cos(x) Return the cosine of x (measured in radians). cosh(...) cosh(x) Return the hyperbolic cosine of x. degrees(...) degrees(x) -> converts angle x from radians to degrees exp(...) exp(x) Return e raised to the power of x. fabs(...) fabs(x) Return the absolute value of the float x. floor(...) floor(x) Return the floor of x as a float. This is the largest integral value

  • 17

    frexp(...) frexp(x) Return the mantissa and exponent of x, as pair (m, e). m is a float and e is an int, such that x = m * 2.**e. If x is 0, m and e are both 0. Else 0.5 x * (2**i) log(...) log(x[, base]) -> the logarithm of x to the given base. If the base not specified, returns the natural logarithm (base e) of x. log10(...) log10(x) -> the base 10 logarithm of x. modf(...) modf(x) Return the fractional and integer parts of x. Both results carry the sign of x. The integer part is returned as a real. pow(...) pow(x,y) Return x**y (x to the power of y). radians(...) radians(x) -> converts angle x from degrees to radians sin(...) sin(x) Return the sine of x (measured in radians). sinh(...) sinh(x) Return the hyperbolic sine of x. sqrt(...) sqrt(x)

  • 18

    Return the square root of x. tan(...) tan(x) Return the tangent of x (measured in radians). tanh(...) tanh(x) Return the hyperbolic tangent of x.DATA e = 2.7182818284590451 pi = 3.1415926535897931

    PRIMERI I VEBE

    Primer 1:Napisatii program za Pitagorinu teoremu ( izra unati hipotenuzu za unete vrednostikateta).Reenje:#Pitagoraa=input("unesite vrednost za katetu a=")b=input("unesite vrednost za katetu b=")c=(a**2+b**2)**(1.0/2)print "Hipotenuza c=",cPrimer 2:Napisati Python program koji ra una povrinu i obim krunog ise ka.Reenje:#Kuzni isecakr= input ("unesi poluprecnik r=")alfa= input ("unesi ugao alfa=")l=2*r+alfa*rs=(r**2*alfa)/2print "Povrsina kruznog isecka s=",s,", a obim l=",lPrimer 3:Napisati Python program koji ra una povrinu i obim krunog ise ka pri emu je potrebnoda korisnik unese ugao u stepenima, a ne uradijanima kao u predhodnom primeru.

  • 19

    Reenje:#Kuzni isecakr= input ("unesi poluprecnik r=")alfastep= input ("unesi ugao u stepenima alfa=")from math import pialfarad=(alfastep/180.0)*pil=2*r+alfarad*rs=(r**2*alfarad)/2.0print "Povrsina kruznog isecka s=",s,", a obim l=",l

    2. Uslovno grananje, petlje i poravnanjeU prolom nastavku Python tutoriala za smrtnike nau ili smo par osnovnih komandi odkojih su najvanije input i print. To su verovatno i naredbe koje ete i naj e e koristiti.Sada moemo da piemo programe koji e obavljati jednostavne akcije (ra unanje i isipis)i biti u stanju da prime ulaznu vrednost od korisnika. Ovo je korisno, ali smo i daljeograni eni na na takozvano sekvencijalno izvravanje komandi, to jest moraju bitiizvrene u zadatom redosledu

    Danas emo nau iti jo par korisnih i esto koritenih naredbi, a to su naredbe za uslovnogrananje i programske petlje, koje su korisne kada elimo ponavljati iste naredbe vieputa.

    if naredbaUslovno grananje nije nita drugo nego programerski izraz za izvravanje nekog koda naosnovu nekog uslova.Da bi stvari bile jasnije, pogledajmo jedan primer:ime = "Nikola"if (ime == "Nikola"): print "Dobrodosao, Nikola"U prvoj liniji definiemo varijablu ime i postavljamo joj vrednost Nikola. Vrednost smookruili navodnicima jer je to string. U drugoj liniji zapravo proveravamo da li je vrednostvarijable ime jednaka Nikola. Ako jeste, izvrava se kod koji je ispod naredbe if i kojiobavezno mora biti odmaknut jednim TAB-om (o tome vie itajte pri kraju ovog lanka).Tako je sintaksa naredbe if ovakva:if (uslov): kod koji treba izvriti ukoliko je uslov zadovoljenUmesto proveravanja jednakosti, moemo proveravati i za ostale uslove. Evo popisa tih

  • 20

    uslova (tj. logi kih operatora):Uslov to proverava-----------------------== jednako!= nejednako> ve e< manje>= ve e ili jednako b): print "a je vece od b"

    a = 5b = 5if (a

  • 21

    Kako bi interpreter znao kada blok naredbi koje se trebaju izvriti ukoliko je uslovzadovoljen prestaje? Vi ne morate koristiti else, a ak i kada bi ga koristili, kada biinterpreter znao kada blok else prestaje? Zbog toga se koriste poravnanja, i ona semoraju koristiti (deo su Pythonove sintakse).Napomena : Uvla enje pasusa je vano u Python-u. Blokovi u uslovnom izvravanju (ipetlje i definicije funkcija vidi ispod) moraju biti uvu eni (i uvla enje mora bitijednako; se broji kao 8 mesta) tako da interpreter zna gde po inju i gde sezavravaju. To tako e ini program lakim za itanje od strane ljudi.

    if-elseIf je vrlo korisna naredba, no ako postavljeni uslov nije zadovoljen, na ekranu se nepokae nita. Tu dolazi u igru naredba else koja govori to e se dogoditi ako se uslovpostavljen u if naredbi ne zadovolji.Sintaksa ide ovako:if (uslov): kod koji se izvrava ako je uslov zadovoljenelse: kod koji se izvrava ako uslov nije zadovoljen

    Pogledajte ovaj primer:ime = "Nikola"if (ime == "Nikola"): print "Zdravo, Nikola!"else: print "Zdravo, gost!"Naravno, ovaj kod smo mogli napisati i tako da ime dobijemo od korisnika:ime = raw_input("Unesite vase ime: ")if (ime == "Nikola"): print "Zdravo, Nikola!"else: print "Zdravo, gost!"

    Ovaj program proverava da li je vrednost varijable ime jednaka Nikola. Ako jeste,ispisuje se Zdravo, Nikola!, u protivnom se ispisuje Zdravo, gost!.

    Probajmo sa kuvarskim problemom, ako elimo da kaemo kompjuteru da proveri stanjesalate na ringli? Ako je zagrejana, onda je treba skinuti u suprotnom, treba je kuvati jominut ili dva. Kako to izraavamo?

  • 22

    Ono to elimo, je da kontrolisemo tok programa. Moe da ide u dva pravca ili da sklonierpu, ili da je ostavi jo malo u zavisnosti dali je dovoljno zagrejano. Ovo se zoveuslovno izvrenje. To moemo ovako da obavimo:

    temperatura = input("Koja je temperatura jela?")if temperatura > 50:....print "Salata je skuvana."else:....print "Kuvaj jos malo."Zna enje ovoga je o igledno : Ako je temperatura via od 50 (stepeni), onda ispii porukukorisniku da je jelo skuvano, u suprotnom , ispii da kuva jo malo.

    Da se vratimo naem izra unavanju povrine. Vidite li ta ovaj program radi?# Program za racunanje povrsineprint "Dobro dosli u program za racunanje povrsine"print "---------------------------------------"print# Ispisi izbor:print "Molim vas izaberite oblik:"print "1 Pravougaonik"print "2 Krug"# Unos korisnikovog izbora:oblik = input("> ")# Izracunavanje povrsine:if oblik== 1:....visina = input("Molim vas unesite visinu: ")....sirina = input("Molim vas unesite sirinu: ")....povrsina = visina*sirina....print "Povrsina je", povrsinaelse:....poluprecnik = input("Molim vas unesite poluprecnik: ")....povrsina = 3.14*(poluprecnik**2)....print "Povrsina je", povrsinaNove stvari u ovom primeru: print kori eno samostalno ispisuje prazan red == proveravada li su dve stvari jednake, suprotno od =, to dodeljuje vrednost desne stranepromenljivoj na levoj strani. ovo je vana lekcija ! ** je u Python-u mo an operator tako se polupre nik na kvadrat pie **2. Print moe da ispie vie od jedne stvari. Samoih odvojite zarezima. (Na ekranu prilikom ispisa e biti odvojeni jednim praznim mestom.)program je veoma jednostavan : Trai da se unese broj, koji govori da li korisnik eli dara una povrinu kruga ili pravougaonika. Onda , koristi ako-izjavu (uslovno izvrenje , if=

  • 23

    ako) da odlu i koji blok e biti koriten za ra unanje povrine. Ta dva bloka su po gra iistovetna sa onima kori enim u prethodnim primerima. Uo ite kako komentari ine kodlakim za itanje. Re eno je da je prva zapovest programiranja : "Pravi komentare!" Bilokako, to je lepa navika koju treba usvojiti.

    Uslovno grananje s vie uslova: if-elif-elseIf-else je OK stvar ukoliko imamo samo jedan uslov koji treba proveriti. Ukoliko trebaproveriti vie uslova, moemo koristiti ili hrpu if naredbi, ili vrlo korisnu naredbu elif. Elifje skra enica od "else if". Sa elif proveravamo neki drugi uslov koji nije naveden u ifnaredbi.Sintaksa ide ovako:if (uslov): kodelif (uslov): kodelif (uslov): kod...else: kodVeba:Proiri program odozgo tako da ukljucuje ra unanje povrine kvadrata, gde korisnik unosiduinu samo jedne stranice. Da bi ovo uradili, potrebno je da znate samo jednu stvar :Ako imate vie od dva izbora, moete da napiete neto kao:if nesto== 1:....# Uradi jednu stvar...elif nesto== 2:....# Uradi nesto drugo...elif nesto== 3:....# Uradi nesto potpuno drugacije...else:....# Ako sve drugo propadne...ovde elif predstavlja tajanstveni kod koji zna i "else if" :). Zna i ako je neto jedno, uradijednu stvar; u suprotnom, ako je neto drugo, uradi neto drugo i tako. Moete poeletida dodate druge mogu nosti u program kao trouglove i mnogouglove. To je na vama

  • 24

    A evo i primera - jedan VRLO jednostavni kalkulator:a = input("unesite prvi broj: ")op = raw_input("unesite operaciju (+, -, *, /, pot): ")b = input ("unesite drugi broj: ")if (op == "+"): print a + belif (op == "-"): print a - belif (op == "*"): print a * belif (op == "/"): print a / belif (op == "pot"): print a ** b # ** je stepenovanjeelse: print "Unesite pravilnu operaciju!"U ovom slu aju kod ispod else se izvrava ukoliko niti jedan uslov nije zadovoljen. elifnaredbi moemo imati koliko elimo.PRIMERI I VEBEPrimer 1:Napisati Python program koji ra una povrinu i obim krunog ise ka pri emu je potrebnoda korisnik unese ugao u stepenima do vrednosti 360 u suprotnom da obavesti korisnikada je unos pogrean.Reenje:#Kruzni isecak uslovnor =input ("unesi poluprecnik r=")alfastep = input ("unesi ugao u stepenima alfa=")if alfastep

  • 25

    Primer 2:Napisati Python program za slede u funkciju

    1,110,

    0,02

    XXX

    XY

    Reenje:# Y funkcijax = input("Unesi x=")if x1: y=1else: y=x**2print "y=",y

    Programska petlja whileta ako elimo ponoviti neki kod vie puta? Jedan trivijalni primer za ovo bilo bioispisivanje stringa "Zdravo, Nikola" sedam puta. Tu uska e naredba while. Za razliku odif, koji se izvrava kada uslov postane ta an, while se izvrava dok god je zadati uslovta an.Sintaksa:while (uslov): kod koji se izvrava dok je uslov ta anPogledajmo primer:a = 1while (a

  • 26

    Slede i While loop je loop koji se ponavlja sve dok odre eni uslov nije zadovoljen; recimo- sve dok a nije jednak 10 ili sve dok je a = 10.Pogledajmo primer jednog jednostavnog while loopa:a = 0while a

  • 27

    HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello# jo nekoliko desetaka puta ovako ;-)# prekinuto sa CTRL+CTraceback (most recent call last): File "", line 2, in ? print "Hello" File "C:\PYTHON22\Tools\idle\PyShell.py", line 679, in write self.shell.write(s, self.tags) File "C:\PYTHON22\Tools\idle\PyShell.py", line 670, in write raise KeyboardInterruptKeyboardInterruptOvo se stru no naziva "infinite loop" - loop iz kojeg nema izlaska. Ako bolje pogledate kodvide ete , budu i da se varijabla a ne uve ava (konstantno ostaje 0), da iz loopa nemaizlaska; tj. uslov se nikad ne zadovoljava.To rezultuje beskona nim ponavljanjem zadatihnaredbi.ta bi sa naim kuvarskim problemom? Ako elimo da proverimo jelo to puta, to jeveoma dobro resenje; ali mi ne znamo je li to dovoljno ili je previse. Mi samo elimo danastavimo da proveravamo dok ne bude dovoljno (ili dok nije dovoljno vru e - zavisi odgledista). Zato koristimo while:# Program za kuvanje# Namesti pauziranje funkcijefrom time import sleepprint "Molim vas pocnite da kuvate. (Vraticu se za 3 minuta.)"# cekaj 3 minuta (to jest, 3*60 sekundi)...sleep(180)print "vratio sam se :)"# koliko vruce je taman koliko treba?dovoljno_vruce = 50

  • 28

    temperatura = input("koliko vruce je jelo? ")while temperatura< dovoljno_vruce:....print "Nije dovoljno... kuvaj to jos malo..."....sleep(30)....temperatura = input("OK. Koliko je sada? ")print "Dovoljno je! zavrsili ste !"Nove stvari u ovom primeru...

    Neke korisne funkcije se uvaju u modulima i mogu se uvesti. U ovom slu aju uvozimo(import) funkciju sleep (koja pauzira program na odredjen broj sekundi)iz modula timekoji dolazi uz Python. (Mogu e je i napraviti svoje module...)Veba:

    Napiite program koji stalno unosi brojeve od korisnika i sabira ih dok ne dodje do sumeod 100. Napiite drugi program koji unosi 100 brojeva od korisnika i ispisuje njihov zbir .Postoji jo jedna programska petlja, a to je for. No, da bi objasnili petlju for, treba prvoobjasniti liste.

    3. Liste, manipulacija listama i for loop

    U prolom nastavku Python tutoriala nau ili smo kondicionalno grananje i whileprogramsku petlju. Danas emo nau iti liste i FOR programsku naredbu. Da bi nau ili FORprogramsku naredbu moramo znati liste, pa krenimo logi nim redosledom...Do sada smo upoznali varijable - jedan tip podataka. One mogu sadravati isklju ivojednu vrednost:ime = "Nikola"Sada zamislite varijablu koja moe da sadri vie vrednosti. Taj se tip podataka zove lista.Lista se uvijek okruuje uglatim zagradama: [ i ]. Pogledajmo primer jedne liste:python = ["jednostavan", "objektno orjentisan", "lagan", "mocan"]Ukoliko napiemo print python dobijamo ovo:['jednostavan', 'objektno orjentisan', 'lagan', 'mocan']Ukoliko nam treba samo prvi unos iz liste (u ovom slu aju "jednostavan"), koristimo zero-based indexing (iliti indeksiranje na bazi nule). Tako prvi unos ima indeks 0, drugi 1, tre i2, itd., tako da ako elimo izdvojiti samo prvi unos iz liste, piemo ovo:print python[0]

  • 29

    Broj u uglatim zagradama je indeks.Python moe sadravati sve tipove varijabli u listi - i brojeve i stringove, pa ak i drugeliste:miks = ["Nikola", 1234, ["jos", "jedna", "lista"], 3.1415]

    Manipulisanje listama

    Liste se mogu sabirati sa + operatorom:p2pprogs = ["kazaa lite", "kazaa", "winmx", "audiogalaxy"]mp3sites = ["mp3.com", "listen4ever.com"]music = p2pprogs + mp3sitesprint musicdobijamo ovo:['kazaa lite', 'kazaa', 'winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com']Tako e moete uzimati i delove liste, npr. samo prva dva unosa u listu:print music[0:2] # ispisuje unose sa indeksom 0 i 1

    daje ovo:['kazaa lite', 'kazaa']Podaci u listama se mogu menjati:music[1] = "kazaa media desktop" # ovo je zapravo drugi unos u listiSada naa lista izgleda ovako:['kazaa lite', 'kazaa media desktop', 'winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com']

    Ukoliko treba proveriti da li je neki unos u listi, dobro e vam do i naredbe "in" i "not in"koje vra aju booleanski rezultat (true ili false - 0 ili 1):print "kazaa lite" in musicdaje: 1 (true), jer kazaa lite postoji u listi "music".print "zweistein.web" not in musicdaje: 1 (true) jer zweistein.web ne postoji u listi "music".Ukoliko elite dodati unos u listu, naredba append() e vam pomo i:music.append("zweistein.web")

  • 30

    A lista izgleda ovako:['kazaa lite', 'kazaa media desktop', 'winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com','zweistein.web']Za brisanje se koristi naredba del() koja brie unos na osnovu indeksa:del music[0]Ovako izgleda lista nakon to smo obrisali unos sa indeksom 0:['kazaa media desktop', 'winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com','zweistein.web']

    Tako e moemo brisati po vrednosti umesto po indeksu:music.remove("kazaa media desktop")

    Ovako izgleda naa lista nakon to smo obrisali unos sa vredno u "kazaa mediadesktop":['winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com', 'zweistein.web']

    Ukoliko elite pore ati listu po abecedi, koristi e vam naredbe sort() i reverse():music.sort()# rezultat: ['audiogalaxy', 'listen4ever.com', 'mp3.com', 'winmx', 'zweistein.web']music.reverse()# rezultat: ['zweistein.web', 'winmx', 'mp3.com', 'listen4ever.com', 'audiogalaxy']Jo primera: (ukoliko neto nije jasno pitajte me na asu )>>> a=[1,6.9,8]>>> a[1, 6.9000000000000004, 8]>>> b=a>>> b[1, 6.9000000000000004, 8]>>> b[0]=9>>> a[9, 6.9000000000000004, 8]>>> b[9, 6.9000000000000004, 8]>>> g=a+b>>> g[9, 6.9000000000000004, 8, 9, 6.9000000000000004, 8]>>> g[0]=80>>> g[80, 6.9000000000000004, 8, 9, 6.9000000000000004, 8]

  • 31

    >>> c=a*3>>> c[9, 6.9000000000000004, 8, 9, 6.9000000000000004, 8, 9, 6.9000000000000004, 8]>>> x=[[1,3],[6,9]]>>> x[[1, 3], [6, 9]]>>> x[0][1, 3]>>> x[1][6, 9]>>> x[0][0]1>>> x[0][1]3>>> x[0][0]=6>>> x[[6, 3], [6, 9]]

    For loopFor loop nam slui da bi izveli neku naredbu na svakoj vrednosti u nekom tipu podataka(varijabli, listi...).for hrana in "paprika", "jaja", "paradajz":....print "Ja volim", hranaovo zna i : za svaku stavku u listi "paprika", "jaja", "paradajz", ispii da je voli. Blokunutar petlje je izvren po jednom za svaku stavku, i svaki put, trenutni element jedodeljen promenljivoj hrana (u ovom slucaju).for broj in range(1,100):....print "Zdravo, svete!"....print "samo", 100 - broj, "je preostalo..."print "zdravo, svete"print "To je bio poslednji... Uh!"Raspon funkcije (range) vra a listu brojeva u datom rasponu (uklju uju i prvi, bezposlednjeg... u ovom slu aju, [1..99]). Zato, da preformuliemo ovo:

    Sadraj petlje je izvren za svaki broj u rasponu od (uklju uju i) 1 do (isklju uju i) 100.(ta telo petlje u stvari radi se razlikuje od programa do programa i to je na vama)

    Sintaksa je:

  • 32

    for privremena_varijabla in tip_podataka: blok naredbi

    Pogledajmo jedan primer i sve e biti malo jasnije:music = ['winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com', 'zweistein.web']for website in music: print "ja koristim", website, "da bi saznao stvari o muzici"

    ta daje sljede i ispis:ja koristim winmx da bi saznao stvari o muzicija koristim audiogalaxy da bi saznao stvari o muzicija koristim mp3.com da bi saznao stvari o muzicija koristim listen4ever.com da bi saznao stvari o muzicija koristim zweistein.web da bi saznao stvari o muziciFor loop moete koristiti i za stringove:string = "python tutorial"for slovo in string: print slovo

    Ovo daje sljede i ispis:pythontutorialZanimljiv efekat, ne? :)Spomenuli smo funkciju range() koja vam olakava da manipuliete sa nizovimavrednosti. Ova f-ja generie aritmeti ku progresiju lanova liste, da pojasnimo:>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  • 33

    Zapaate da lista po inje 0? Mogu e je da range zapo ne drugim brojem ili da zadatekorak (step) koji elite:>>> range(5,10)[5, 6, 7, 8, 9]>>> range(0,10,5)[0, 5]>>> range(0,10,2)[0, 2, 4, 6, 8]>>> range(1,10,2)[1, 3, 5, 7, 9]>>> range(-10,-100,-30)[-10, -40, -70]Uz pomo naredbe len( ) slika je jo jasnija:>>> a=['Mary','had','a','little','lamb']>>> for i in range(len(a)): print i, a[i]

    0 Mary1 had2 a3 little4 lamb

    TupleDo sada ste upoznali dva tipa podataka - stringove i liste. String se ne moe menjati, alista moe. Sada emo upoznati jo jedan tip podataka, a to je tuple. Tuple je vrlo sli anlisti - samo se podaci u tupleu ne mogu menjati.Tuple definiemo ovako:music = 'winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com', 'zweistein.web'Kao to vidimo, veoma sli no listi, samo to nema uglastih zagrada. Zapravo, i tupleikoriste zagrade (ali ne uglaste, ve male - ( i )), ali one nisu potrebne. Tako gornji tuplemoemo napisati ovako:music = ('winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com', 'zweistein.web')Ukoliko elimo napraviti tuple sa samo jednim unosom (to je potrebno ako elimo vepostoje em tupleu dodati neto novo - objanjeno kasnije), jednostavno dodamo zarez izastringa:

  • 34

    music2 = ('uraniummusic.com',)to daje isti rezultat kao gornji primer.Za tuple vai gotovo sve kao i za liste:

    >>> type(music) # sa funkcijom type moemo saznati kojeg nam je tipa neka varijabla -str, int, tuple, list...

    >>> print music[0]winmx>>> print music[3]listen4ever.com>>> music = music + music2>>> print music('winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com', 'zweistein.web', 'uraniummusic')

    Ali, ukoliko pokuamo neto menjati:>>> del music[5]Traceback (most recent call last): File "", line 1, in ?TypeError: object doesn't support item deletion>>> music[5] = "lambgoat.com"Traceback (most recent call last): File "", line 1, in ?TypeError: object doesn't support item assignmentIli, ukoliko pokuamo pridruiti neki drugi tip podataka tupleu:>>> music = ('winmx', 'audiogalaxy', 'mp3.com', 'listen4ever.com', 'zweistein.web')>>> music2 = "uraniummusic">>> music = music + music2Traceback (most recent call last): File "", line 1, in ?TypeError: can only concatenate tuple (not "str") to tupleTuplei su korisni za uvanje podataka za koje ne elite da korisnici mijenjaju.

  • 35

    PRIMERI I VEBEPrimer 1 :Napisati Python program za pronalaenje najmanljeg broja u skupu proizvoljno unetihbrojeva. Reenje:

    #Najmanji brojn = input("koliko ima brojeva u skupu?")xmin = input("Unesi prvi broj")for i in range (2,n): x = input("unesi sledeci broj") if x

  • 36

    unesi vrednost koraka k=2y= 4y= 16y= 36vidimo da u tom slu aju nije izra unato y za x=8, pa prema tome ako se posluimotrikovima rezultat naeg koda bi trebao da izgleda ovako:unesi pocetnu vrednost a=2unesi pocetnu vrednost b=8unesi vrednost koraka k=2y= 4y= 16y= 36y= 64

    Primer 3 :Napisati Python program koji pita korisnika da unese broj i da ukoliko je broj pozitivanispie pozitivan i izra una njegov koren, a ukoliko je negativan ispie negativan,promeni mu znak i izra una koren.Reenje:print"Progran za racunanje korena broja"from math import*x=input("unesite broj x=")if x>0: print " uneti broj je pozitivan"else: print "uneti broj je negativan" x=-xkoren=sqrt(x)print "Kvadratni koren broja koji ste uneli je ",koren

    Primer 4 :Napisati program koji tampa sve parne a zatim sve neparne brojeve od 0 do 100.Reenje:# parni i neparni brojeviprint "parni brojevi su:"for i in range(0,101,2): print iprint"a ovo su neparni brojevi:"for n in range(1,100,2): print n

  • 37

    Primer 5 :Pokuajte napisati program sli an predhodnom ali ostavite korisniku izbor opsega brojeva.Reanje: ovo bi mogli sami pokuati

    Primer 6 :Napisati program koji ra una srednju vrednost u skupa proizvoljnih brojeva koje korisnikunosi.

    Reanje:# srednja vrednostn =input("koliko brojeva ima u skupu?")suma=0for i in range(n): X =input("Unesite broj x=") suma=suma+XXsr=suma/nprint " Srednja vrednost Xsr=",XsrPrimer 7:Napisati Python program koji pita korisnika da unese brojeve m i n proizvoljan broj puta ina kraju izra una srednju vrednost proizvoda za sve unete parove vrednosti m i n.Reanje:#srednja vrednost proizvodaq =input("Koliko parova vrednosti zelite?")s=0for i in range (q): n =input("Unesite vrednost n=") m =input("Unesite vrednost m=") s=s+n*mprint "Suma svih proizvoda SUM(n*m)=",sPrimer 8 :Napisati Python program za prora un pritiska gasa prema jedna ini idealnog gasnogstanja, tako da korisnik unosi vrednosti za ostale parametre.

    nRTPVReenje: ovo je zaista lako

  • 38

    Primer 9 :Napisati Python program za prora un pritiska gasa prema jedna ini idealnog gasnogstanja, tako da korisnik unosi vrednosti za ostale parametre, ali sada program treba izvrionoliko prora una koliko korisnik eli.

    nRTPVReenje: ovo je sli no, samo primenite for petlju...

    Primer 10 :Napisati Python program za prora un pritiska za niz ekvidistantnih zapremina od vp do vk

    celobrojnim korakom dv, prema VDW jedna ini:

    Reenje:#racunanje pritiska prema VDW j-niR=8.314a= input("Unesi parametar a=")b= input("Unesi parametar b=")T= input("Unesi temperaturu u K T=")vp= input("Pocetna zapremina vp=")vk= input("Krajnja zapremina vk=")dv= input("Celobrojni korak dv=")print"-----------------------------"for v in range(vp,vk,dv): p=R*T/(v-b)-a/v/v print "za v=", v ,"p=", p

    Primer 11 :

    Napisati Python program za prora un pritiska za vie proizvoljnih vrednosti zapremina,prema VDW jedna ini:

    2va

    bvRTp

    2va

    bvRTp

  • 39

    Reenje:#racunanje pritiska prema VDW j-niR=8.314n= input("Za koliko unetih zapremina zelite proracun?")a= input("Unesi parametar a=")b= input("Unesi parametar b=")T= input("Unesi temperaturu u K T=")print"-------------------------"for i in range(n): v=input("unesi zapreminu v=") p=R*T/(v-b)-a/v/v print "za v=",v ,"p=",p

    Primer 12: Napisati Python program za prora un viskoziteta date supstance , i proizvoljan broj, ntemperatura T . Pri tome se svi potrebni podaci unose sa tastature. Na ekran prikazatitemperature T, odgovaraju e viskozitete i standardno kvadratno odstupanje izra unatihviskoziteta 2s .

    Polazni podaci su: ime supstance , molekulska masa M, kriti an pritisak Pc, kriti natemperatura Tc. Da bi izra unali viskozitet, potrebno je izra unati redukovanutemperaturu Tr, koja se ra una po formuli:

    cr T

    TT

    pri emu mora biti zadovoljen uslov da je Tr 1.5. Tada viskozitet ra unamo poformuli:

    6

    3 294.05100.34c

    cr T

    PTMStandardno kvadratno odstupanje viskoziteta se ra una kao:

    nnsn

    iin

    ii

    2

    11

    221

    1

    gde su i, viskoziteti supstance na temperaturi Ti, (i = 1,...,n).Program testirati za n-pentan: M=71.15, Pc=33.3, Tc=469.5 i slede e temperature:T=198, 298, 398, 498, 598, 698

  • 40

    Reenje:#Viskozitetprint" Ovo je proracun viskoziteta supstance za proizvoljan broj temperatuura"ime=raw_input("Unesi ime supstance ")M=input("Unesi M=")Pc=input("Unesi Pc=")Tc=input("Unesi Tc=")n=input("Za koliko temperatura zelis proracun? ")mi=n*[0]T=n*[0]rt=n*[0]s1=0s2=0for i in range(n): while True: T[i]=input("Unesi T=") rt[i]=T[i]/Tc if rt[i]

  • 41

    Da bi izra unali pad pritiska, potrebno je izra unati slede e: - popre ni presek: S d

    2

    4 - srednju brzinu: S

    Qv =

    - Rejnolds-ov broj: dvRe i

    - koeficijent podunog trenja koji je funkcija Re i definisan je na slede i na in:

    428.0

    575.0

    264.2035.03500

    6421000001.035002100

    ee

    ee

    e

    RRRR

    RR

    Pad pritiska p se ra una po formuli:

    22v

    dLp [kPa]

    Standardna devijacija protoka sQ se ra una kao:

    1

    2

    112

    nnQQn

    sn

    ii

    n

    ii

    Q

    Gde su Qi (i = 1,...,n) uneti protoci te nosti.Tetirati program za slede e podatke: : = 1000, = 1.8 10-5, d = 0.1, L = 100 i slede eprotoke Q = 0.01, 0.1, 1, 5, 10

    Reenje:#PAD PRITISKA U CEVIprint"Proracun pada pritiska pri protoku tecnosti kroz cev"ro =input("Unesi gustinu ro=")mi =input("Unesi viskozitet mi=")d =input("Unesi precnik cevi d=")l =input("Unesi duzinu ceviovoda l=")

  • 42

    n =input("Koliko proracuna zelite?")s =d**2*3.14/4q =n*[0]v =n*[0]re =n*[0]la =n*[0]dp =n*[0]s1 =0s2 =0for i in range(n): q[i] =input("unesi protok Q=") v[i] =q[i] / (ro*s) re[i] =v[i]*d*ro / mi if re[i] < 2100: la[i] = 64 / re[i] elif re[i] >= 3500: la[i] =0.035+2.264*re[i]**-0.428 else: la[i]= 0.0001*re[i]**0.575 dp[i]= la[i]*l/d*ro*v[i]**2/2 s1=s1+q[i] s2=s2+q[i]**2sdq = (n*s2-s1**2 / (n*(n-1)))**1/2for i in range (n): print "Za unetu vrednost protoka Q=",q[i]," izracunati pad pritiska je dP=",dp[i]print "Standardna devijacija protoka je Sq=",sdq

    5. Ve i programi Skra ivanje posla,funkcije

    Ako elite kratak uvid u knjigu, ne ete itati sve stranice pogleda ete sadrzaj, zar ne?To je jednostavno spisak glavnih tema u knjizi. Sada - zamislite pisanje kuvara. Mnogirecepti, kao "makaroni u kremastom prelivu " i "Svajcarska pita sa prelivom" mogusadrzati sli ne stvari, kao preliv, u ovom slu aju - ipak vi ne bi eleli da u svakom receptuponovo piete kako se pravi preliv. (OK...vi zaista ne pravite preliv... ali drimo se njega unaim primerima :)). Stavi ete recept za preliv u odvojeno poglavlje, i jednostavnoukazati na njega iz drugih recepata. Tako umesto pisanja itavog recepta svakog puta,treba da koristite samo ime poglavlja. U kompjuterskom programiranju to se zove pozivprocedure.Jesmo li naleteli na neto sli no ovome ranije? Da. Umesto da smo kompjuteru ta noobjasnili kako da dobije odgovor od korisnika(OK - ne moemo ba to da uradimo... ali nemoemo ni da napravimo preliv.. :)) jednostavno smo koristili input - predodre enufunkciju. Zapravo, moemo sami da napravimo svoje funkcije da ih koristimo kaoprocedure.

  • 43

    Recimo da elimo da nadjemo najve i intider (pozitivan broj bez ostatka) koji je manji odzadatog broja. Na primer, ako zadamo broj 2,7 taj inidzer e biti 2. Ovo se esto zove"pod" (floor) datog broja. (Ovo se u stvari moe obaviti preko ugradjenih Python-ovihfunkcija, ali opet...) kako emo uraditi ovo? Jednostavno reenje je da probamo svemogu nosti po ev od nule:

    broj = input("Koji je broj u pitanju? ")

    floor = 0while floor < broj:....floor = floor+1floor = floor-1print "Pod broja", broj, "je", floorPrimeti ete da se petlja zavrava onda kada pod vie nije manji od broja; dodali smojedan previe. Zbog toga moramo da oduzmemo jedan. ta ako elimo da koristimo ovu"floor"-stvar u sloenom matemati kom izrazu? Morali bi da piemo petlju za svaki brojkome treba na i "pod". Ne ba lepa situacija... Pogadjate ta emo uraditi umesto toga :Stavi emo sve u nau novu funkciju nazvanu "floor" :

    def floor(broj):....rezultat = 0....while rezultat < broj:........rezultat = rezultat+1....rezultat = rezultat-1....return rezultatNove stvari u ovom primeru....

    1. Funkcije se definisu klju nom re i def, koju prati njeno ime i o ekivani parametri uzagradi.

    2. Ako funkcija treba da vrati neku vrednost, ovo se postie klju nom re i return (kojaistovremeno automatski prekida funkciju.

    Sad kad smo je definisali moemo je koristiti, ovako:x = 2.7y = floor(2.7)Posle ovoga, Y bi trebalo da ima vrednost 2. Tako e je mogu e napraviti funkcije sa vieod jednog parametra :

  • 44

    def sum(x,y):....return x+y

    Napiite funkciju koja sadrzi Euklidov metod za nalazenje zajedni kog mnoioca dva broja.To ide ovako:

    1. Imate 2 broja, a i b, gde je a ve e od b2. Ponavljate slede e dok b ne postane nula:

    1. a se menja u vrednost b2. b je promenjeno u podsetnik kada je a (pre promene) podeljeno sa b (pre

    promene)3. Na kraju vratire sa return poslednju vrednost broja a

    Ovde je data saeta verzija algoritma :

    def euklid(a,b):....while b:.......a,b = b,a % b....return a

    Saveti:Koristi a i b kao parametre funkcijeJednostavno pretpostavi da je a ve e od bPodsetnik kad je x podeljeno sa z se ra una kao izraz x % zDve promenljive mogu biti istovremeno dodeljene, kao : x, y = y, y+1. Ovde je xprimilo vrednost y (to jest, vrednost koju je Y imalo pre dodele) a ipsilon jeuve ano za jedan.

    Vrsta skra ivanja posla koju smo koristili pravljenjem funkcija zove se proceduralnoskra ivanje, i mnogi jezici koriste re procedura pored re i funkcija. U stvari, ova dvakoncepta su razli ita, ali se oba zovu funkcije u Python-u (poto se manje-vise definisu ikoriste na isti na in)Koja je razlika (u drugim jezicima) izmedju funkcija i procedura? Pa, kao to ste primetiliu prethodnom odeljku, Funkcije mogu da vrate neku vrednost. Razlika lezi u tome toprocedure ne vra aju nikakvu vrednost. Na mnogo na ina ova podela funkcija u dve grupena one koje vra aju i one koje ne vra aju vrednost moe biti veoma korisna.Funkcija koja ne vra a vrednost ("procedura") se koristi kao pod-program ili podrutina.Pozovemo funkciju i program uradi neku stvar, na primer umuti slag ili sli no. Ovakve

  • 45

    funkcije moemo koristiti na mnogo mesta bez ponovnog pisanja koda. (Ovo se zoveponovno koris enje koda, vrati emo se na to kasnije.)Korisnost funkcija (ili procedura) lei u njihovim sporednim efektima menjaju svojuokolinu (meaju i se er i kremu i mute i ih, na primer...) Pogledajmo ilustraciju :def zdravo(kome):....print "Zdravo,", kome

    zdravo("svete")# Ispisuje na ekran "Zdravo, svete"Ispisivanje stvari smatra se sporednim efektom, a poto je to sve to ova funkcija radi, toje tipi no za takozvane procedure. Ali... Ona ne menja stvarno svoju okolinu, zar ne?Kako bi mogli to da uradimo? Da probamo:# *Pogresan nacin* da se to uradistarost= 0def setStarost(a):....starost= asetStarost(100)print Starost# Ispisuje "0"ta je pogreno ovde? Problem je to funkcija setStarost stvara svoju lokalnupromenljivu,tako e nazvanu Starost koja je vidljiva samo unutar setStarost. Kako da toizbegnemo? Moemo da koristimo neto to se zove globalna promenljiva.

    Napomena : Globalne promenljive se ne koriste mnogo u Python-u. One lako vode do loestrukture, ili onoga to zovemo pageti-kod. Ovde ih koristimo da vas upoznamo sakomplikovanijim tehnikama - molim vas da ih izbegavate ako moete.Govore i interpreteru da je promenljiva globalna (radi se izjavom kao Global Starost) mimu govorimo da koristi promenljivu izvan funkcije umesto da stvori novu. (Pa je to ustvari globalna kao suprotno od lokalna). Program moemo ispraviti ovako:# Ispravan, ali ne bas najbolji na inStarost= 0def setStarost(a):....global Starost....Starost= asetStarost(100)print Starost# Ispisuje "100" na ekran racunara.

  • 46

    Kada nau ite o objektima (ispod), vide ete da bi prili niji na in da se ovo uradi bio da sekoristi objekt sa Starost osobinom i setStarost metodom. U odeljku o strukturi podataka,tako e e te videti bolje primere za funkcije koje menjaju svoju okolinu.

    Pa - ta je sa realnim funkcijama? ta je funkcija uopste? Matemati ke funkcije su kaomaine koje imaju ulaz i ra unaju reenje. Vrati e isti rezultat svaki put, kada je istaunesena vrednost. Na primer:def kvadrat(x):....return x*xovo je isto kao matemati ka funk ija f(x)=x na kvadrat. Ponasa se fino, radi samo naulaznoj promenljivoj i ne menja svoju okolinu u bilo kom pogledu.I tako zaokruili smo dva na ina za pravljenje funkcija : Jedan tip je vie kao procedure,ne vra a rezultat; drugi je vie kao matemati ka funkcija i ne radi nita osim to vra arezultat (skoro nita). Naravno, mogu e je napraviti neto izmedju, iako im funkcijamenja neto, jasno je da to radi. Moete ovo objaviti njenim imenom, na primerkoris enjem imenica za iste funkcije kao kvadrat i imperativni oblik za procedurolikefunkcije kao setStarost.

    Pa ve znate dosta toga: Kako da primite ulaz i vratite izlaznu promenljivu, da pravitestrukture komplikovanih programa i da vrite razna ra unanja; Pa ipak najbolje tek dolazi.Koje smo sastojke koristili do sada u naim programima? Brojeve i re enice, zar ne?Nekako dosadno... Sad treba da upoznamo nekoliko sastojaka koji e u initiprogramiranje zanimljivim.Strukture podataka su sastojak koji strukturise podatke. (Ma vidi ti to...) Samostalan broju stvari nema neku strukturu, zar ne? ali recimo da elimo da stavimo nekoliko brojevazajedno u jedan sastojak to bi imalo neku strukturu. Na primer, mozda elimo listubrojeva. To je lako:[3,6,78,93]Pominjali smo liste u odeljku o petljama, ali zapravo nismo rekli puno o njima. Pa evokako ih pravimo. Samo navedemo elemente odvojene zarezom i zatvorimo uglastezagrade.Da pogledamo primer koji ra una proste brojeve (deljive samo sa sobom i sa 1)::

    # Racuna sve proste brojeve ispod 1000# (Ne bas najbolji nacin da se to obavi,ali...)rezultat = []kandidati = range(3,1000)

  • 47

    baza = 2proizvod = bazawhile kandidati:....while proizvod < 1000:........if proizvod in kandidati:............kandidati.remove(proizvod)........proizvod = proizvod+baza....rezultat.append(baza)....baza = kandidati[0]....proizvod = baza....del kandidati[0]rezultat.append(baza)print rezultatNove stvari u ovom primeru.

    1. Interval brojeva ugradjen u funkciju moe se koristiti kao bilo koji drugi interval..(uklju uje prvi broj, ali ne i poslednji.)

    2. Lista (interval,raspon) se moe koristiti kao logi ka promenljiva. Ako nije prazna,onda je ta na (true) , a ako jeste prazna onda je neta na (false). Tako, whilekandidati zna i "dok lista kandidata nije prazna" ili jednostavnije "dok jo uvek imakandidata".

    3. Moete pisati IF neki element IN neka lista da proverite da li se on nalazi u njoj.4. Moete napisati neka_lista.remove(neki_element) da izbacite taj element iz date

    liste.5. Moete dodati jednu listu na drugu koriste i neka_lista.append(druga_lista). U

    stvari, moete koristiti i + (kao npr. jednalista = drugalista + nekatreca) ali to nijejako efikasno.

    6. Moete do i do elementa liste zadaju i njegovu poziciju kao broj (gde je prvielement, za udo, element 0) u uglastim zagradama iza naziva liste. TakoNekalista[3] je etvrti element intervala nekalista. (Opsirnije o ovom kasnije.)

    7. Moete da briete promenljive koriste i klju nu re del. Ona se moe koristiti (kaoovde) za brisanje elemenata iz liste. Tako del nekaLista[0] brie prvi element iznekaLista. Ako je lista bila [1,2,3] pre brisanja, bi e [2,3] posle.

    Pre nego to krenem sa objasnjenjem misterije indeksiranja liste elemenata, da u kratkoobjanjenje prethodnog primera. Ovo je verzija prastarog algoritma po imenu "The Sieveof Erastothenes"(ili tako neto). On podrazumeva paket (ili u ovom slu aju listu tj. niz)brojeva kandidata, i sistematski uklanja brojeve za koje zna da nisu prosti. Kako to zna?Zato to su oni proizvodi dva druga broja.Po injemo listom kandidata koja sadzi brojeve [2..999] znamo da je 1 prost broj (ustvari, mozda i nije, zavisi koga pitate), i elimo sve proste brojeve manje od 1000. (Ustvari naa lista je [3..999], ali i 2 je kandidat, jer nam je on prva baza). Tako e imamo ilistu Rezultat koja sadrzi sve do tada dodate rezultate. Na po etku, ova lista sadrzi samobroj 1. Tako e imamo promenljivu nazvanu baza. U svakom prolazu kroz algoritam, mi

  • 48

    uklanjamo sve brojeve koji su nekako deljivi sa ovim brojem koji je baza (koji je uveknajmanji mogu i od svih kandidata). Posle svakog prolaza, znamo da je najmanji broj kojije preostao prost (jer su svi brojevi koji su bili proizvodi nekih manjih izba eni shvatateli?). Zbog toga, dodajemo ga nizu Rezultat, kao novu bazu postavljamo vrednost ovogbroja, i sklanjamo ga sa liste kandidata (da ga ne obradjujemo ponovo.) Kada listakandidata ostane prazna, u nizu Rezultat bi e svi prosti brojevi. Pametno, a?Stvari o kojima treba razmisliti:ta je specijalno kod prvog prolaza? Ovde je baza 2, pa ipak i ona je uklonjena uizbacivanju? Zato? Zato se to ne dogodi sa drugim bazama? Moemo li biti sigurni da jeproizvod uvek u listi kandidata kada elimo da ih uklonimo? Zato?Sad ta je slede e? Ah, da ... Indeksiranje i isecanje. Ovo je na in da dodjemo dosamostalnih elemenata iz Python-ovih lista. Ve ste videli kako funkcionise obi noindeksiranje. Prili no je linearno. U stvari, rekli smo sve to treba da znate o tome, osimjedne stvari : negativna oznaka zna i da se ra una od kraja liste. Zna i, nekaLista[-1] jeposlednji element iz niza nekaLista, nekaLista[-2]je pretposlednji i tako dalje.

    6. Objekti i objektno-orijentisano programiranje

    Evo jedne, ako takva postoji, veoma zvu ne re i : "Objektno-orijentisano programiranje."kao to naslov poglavlja sugerie, ova vrsta programiranja je samo jo jedan na inskra ivanja posla i ne petljanja sa detaljima. Procedure skra uju kompleksne operacijetako to im daju ime koje se kasnije poziva u programu. U OOP, ne tretiramo na ovajna in samo operacije, ve i objekte. (E sad, to mora da je bilo veliko iznenadjenje, a?)uzmimo za primer, da elimo da napravimo program za kuvanje preliva, umesto dapiemo mnogo procedura koje se bak u sa temperaturom, vremenom, sastojcima i takodalje, mogli bi da ih strpamo sve zajedno u preliv-objekt. Ili bi mozda mogli da imamo ierpa-objekt i vreme-objekt ... Sada, stvari kao to je temperatura bile bi samo osobinepreliv-objekta, dok bi se vreme moglo o itavati iz sat-objekta. A da na program radineto, mogli bi da nau imo nae objekte neke metode; na primer, erpa-objekt bi moglada zna kako da skuva preliv itd.Pa, kako to radimo u Python-u? Ne moemo direktno napraviti objekt. Umesto pravljenjaerpe, napravi emo 'recept' koji govori kako se pravi erpa, napravi emo uputstvo koje eopisati erpu. ovo uputstvo opisuje klasu (class) objekta koji zovemo erpa. Veomajednostavna klasa za erpu bi bila:class Serpa:....def insertPreliv(self, preliv):.......self.preliv = preliv....def getPreliv(self):........return self.preliv

  • 49

    Jel' ovo izgleda udno?Nove stvari u ovom primeru...

    1. Klase objekata definisu se klju nom reci class.2. Imena klasa obi no po inju velikim slovom, dok funkcije i promenljive (pa i metode

    i osobine) po inju malim slovom.3. Metode (tj. funkcije i operacije koje objekti znaju da obave) su definisane na

    standardan na in, ali unutar bloka klase.4. Sve metode objekata treba da imaju prvi parametar koji se zove self (ili neto

    sli no...) Razlog e (nadam se) postati jasan uskoro.5. Osobinama i metodama objekata se pristupa ovako: mojPreliv.temperatura = 2, ili

    debil.budi_dobar().Mogu da pogodim da su vam neke stvari u vezi primera jo uvek nejasne. na primer, taje ta self stvar? A sada kad imamo recept za objekt (tj. njegovu klasu), kako pravimo samobjekt?

    Prihvatimo se prvo ovog poslednjeg. Objekt se stvara pozivanjem imena klase kao da jefunkcijamojaSerpa = Serpa()mojaSerpa sada sadrzi serpa objekt, esto zvan primer klase Serpa. Pretpostavimo dasmo napravili i klasu Preliv; tada bi mogli da uradimo neto kao:mojPreliv = preliv()mojaSerpa.insertPreliv(mojPreliv)mojaSerpa.preliv bi sada sadrala mojPreliv. Kako to? Zato to, kada pozovemo jednumetodu objekta, prvi parametar, obi no nazvan self, uvek sadrzi sam objekt. (pametno,a?) zato, linija self.preliv = preliv postavlja osobinu preliv trenutnog objekta serpa navrednost parametra preliv. uo ite da su ovo dve razli ite stvari, iako se obe zovu preliv uovom primeru.

    Obzirom na injenicu da naim kursom nije predvi eno ozbiljnije izu avanje i primenaPythona, ovde emo se zaustaviti. Nadamo se da Vam je ovaj tutorial pomogao dasteknete osnovna znanja o Python programskom jeziku.

  • 50