Category Archives: Python

Python

Python http server u jednoj liniji u terminalu

Kao sto naslov kaze, uz pomoc Pythona, iz terminala mozete podici web, odnosno http server u samo jedno komandnoj liniji, bez potrebe za instaliranjem Appache web servera i slicnih komplikacija. Idealno, ako na brzinu zelite da podignete server da probate nesto ili da delite fajlove preko lokalne mreze.
Server ce biti podignut na portu 8000, ako zelite na portu 80 ili nekom drugom portu ispod 1024, treba da kucate sudo ispred komande.
Pokretanje servera sa sudo privilegijama nikako ne preporucujem.

U narednim primerima ce biti podignut http server. Dostupni fajlovi ce biti u trenutno aktivnom direktorijumu.
Za potrebe testiranja, napravite direktorium i udjite u taj direktorijum, u terminalu kucajte:
mkdir brzihttpserver
cd brzihttpserver

Radi potrebe testiranja iskopirajte fajlove u taj direktorijum. Ti fajlovi ce biti vidljivi u web pregledacu.
Ako se u direktorijumu nalazi fajl index.html, taj fajl ce biti automataski otvoren u web pregledacu.

Pokrenite terminal i kucajte sledece:
Primeri za Python 2.x:

Pokrece server na portu 8000:
python -m SimpleHTTPServer
Sada u web pregledacu, u polje za adresu kucajte: 127.0.0.1:8000 ili ip_adresa_servera:8000 ako se server nalazi na drugom umrezenom kompjuteru.

Pokrece server na portu 80:
sudo python -m SimpleHTTPServer 80
Ovde je dovoljno kucati 127.0.0.1 ili ip adresu umrezenog kompjutera, ako se server nalazi na drugom kompjuteru.

Primeri za Python 3.x:

Pokrece server na portu 8000:
python3 -m http.server
Sada u web pregledacu, u polje za adresu kucajte: 127.0.0.1:8000 ili ip_adresa_servera:8000 ako se server nalazi na drugom umrezenom kompjuteru.

Pokrece server na portu 80:
sudo python3 -m http.server 80
Ovde je dovoljno kucati 127.0.0.1 ili ip adresu umrezenog kompjutera, ako se server nalazi na drugom kompjuteru.

Advertisements

Python Loto

Igre na srecu su uvek bile popularne. Razvijani su bezbrojni sistemi u nadi da se povecaju sanse za dobitak. Sa pojavom kompjutera ovo je podignuto na visi nivo. Jos od vremena 8-bit kompjutera, svi znacajniji casopisi su objavljivali kratke programe na ovu temu. Naravno da niko nije ocekivao da postane milioner preko noci. Ideja je pre svega bila da se vezba pisanje koda, kao i da se nauci nesto novo. U tom smislu treba shvatiti i program koji je pred vama.

Opis: Ovaj kratki program predstavlja demonstraciju optimalizovanog koda u Python jeziku. Tema je standardni loto sistem 7/39. Sastoji se od tri rutine: loto() – daje najcesce izvlacene brojeve, lotos() – daje najredje izvlacene brojeve i lotox() – daje random brojeve u zadatom okviru. Mozete ga koristiti kako god zelite uz CC-BY uslove.

Setup: Napravite folder ‘Loto’ i u njemu fajlove loto.py i loto.txt. Zatim u loto.py iskopirajte kod programa. Fajl loto.txt sadrzi statistiku izvlacenja. Format je: sedam brojeva razdvojenih spaceom, zatim novi red i novih sedam brojeva itd. To u praksi izgleda ovako:

5 8 22 26 31 33 37
2 8 9 12 23 34 38
4 11 26 27 31 32 35
3 9 21 30 32 35 39

.. itd. Naravno ovo je samo primer, vi ga zamenite svojim brojevima.

Kod:

#Loto bY W|nDu [CC-BY/Pv2]

#LotoMax
def loto():
    bla = []; dat = {}
    c = 'LotoMax Nums: '
    a = open('loto.txt')

    for n in a:
        bla.append(n.split())

    bla = sum(bla,[])

    for m in bla:
        dat[m] = dat.get(m,0) + 1

    x1 = sorted(dat.items(), key = lambda x:x[1], reverse = True)

    x2 = [n[0] for n in x1]
    x2 = x2[:7]; x2.sort(key=int)
    
    for m in x2:
        c += m + ', '

    print c[:-2]

#LotoMin
def lotos():
    bla = []; dat = {}
    c = 'LotoMin Nums: '
    a = open('loto.txt')

    for n in a:
        bla.append(n.split())

    bla = sum(bla,[])

    for m in bla:
        dat[m] = dat.get(m,0) + 1

    x1 = sorted(dat.items(), key = lambda x:x[1])

    x2 = [n[0] for n in x1]
    x2 = x2[:7]; x2.sort(key=int)
    
    for m in x2:
        c += m + ', '

    print c[:-2]

#LotoRnd
def lotox():
    import random
    c = 'LotoRnd Nums: '

    bla = random.sample(range(1,40), 7)
    bla.sort()

    for n in bla:
        c += str(n) + ', '

    print c[:-2]

#EOF

Upotreba:

– Desni klik na loto.py > Edit with IDLE. Zatim u Idle: Run > Run Module. Otvorice se Python shell.

– Komande u shellu:
loto() – daje brojeve koji su najvise puta bili izvlaceni.
lotos() – daje brojeve koji su najmanje puta bili izvlaceni.
lotox() – daje 7 random brojeva u rasponu od 1 do 39.

Fajl loto.txt je neophodan za prve dve funkcije. Trecu mozete koristiti i bez njega.

Napomena: Program je napisan u Pythonu v2. Ako zelite da radi u Pv3, bila bi zanimljiva vezba da ga prevedete koristeci Google i ove smernice.

Srecno za programiranjem i pametno sa igrama na srecu. :)

Najava novih kurseva

U ponedeljak prvog juna pocinju dva kursa koja mogu biti zanimljiva citaocima. Prvi je dobro poznat jer je vec imao nekoliko ciklusa, dok drugi ima svoj debi u MOOC svetu.

1/ Programming for Everybody je uvodni kurs u Python programiranje. Traje jedanaest nedelja i vodi ga izvanredni profesor Charles Severance sa Univerziteta u Micigenu. Popularni Dr.Chuck je inace jedan od pionira i veliki entuzijasta po pitanju online i otvorene edukacije. O ovome na neki nacin svedoce i njegove tetovaze posvecene projektima u kojima je ucestvovao. :)

Kurs je inace baziran na njegovoj knjizi Python for Informatics i zamisljen je tako da radi na svim platformama. Organizuje ga Univerzitet u Micigenu preko Coursera MOOC sistema. Rad Dr.Chucka mozete pratiti na njegovom sajtu i preko twittera, a vise o pristupu edukaciji pogledajte na predavanju sa TEDx-a.

Adresa >
https://www.coursera.org/course/pythonlearn

2/ HTML5 je novi standard za prikazivanje sadrzaja sa weba i naslednik je HTML4. Nakon vise revizija, definitivno je standardizovan od oktobra 2014te. Danas ga podrzavaju svi znacajni browseri. Ono sto odmah upada u oci jeste povecana interaktivnost i jaca podrska za multimediju. Ovaj kurs na EdX-u organizuje upravo WWW Konzorcijum (W3C), tako da su informacije iz prve ruke.

Adresa >
https://www.edx.org/course/learn-html5-w3c-w3cx-html5-1x

Oba kursa nude verifikovane (placene), a trebalo bi i honor code sertifikate. Potpuno su besplatni, neophodno je da se uclanite na odgovarajucu platformu.

 

Password generator

Password generator je program napisan u Pythonu 3.4.0. Sluzi da generise sifre po nekim zadatim kriterijumima. Izdat je pod GNU GPL V3 licencom. Radi iz komandne linije. Kada se program pokrene iz komandne linije, prvo treba zadati broj karaktera za sifru, podrazumevana vrednost je 16, ali se moze promeniti u rasponu od minimalno 4, pa sve do 1024 karaktera. Zatim se odredjuje koji ce karakteri biti ukljuceni u generisanje sifre. To mogu biti Mala slova, velika slova, brojevi i znakovi interpunkcije. Svaku grupu karaktera mozete ukljuciti ili iskljuciti, podrazumevano je da su sve grupe ukljucene, ali mozete pojedine grupe karaktera iskljuciti pritiskom na slovo N na tastaturi, kada se pojavi upitnik za odredjenu grupu karaktera.

Program mozete preuzeti sa linka:
https://dl.dropboxusercontent.com/u/26020865/passwordgeneratorV3.zip

U zip arhivi se nalazi srpska i engleska verzija programa.

Python: Funkcije, praksa

U poslednjem textu mini-serijala o funkcijama pokazacemo njihovu primenu u praksi na primeru Cezar enkripcije. Ovo ce ujedno biti demonstracija pojedinih naucenih koncepata, kao i optimizavanog i pomalo minimalistickog stila u programiranju.

Najpre da se podsetimo sta smo do sada naucili. U prvom textu obradili smo osnovne elemente Python funkcije. U drugom smo radili na osobinama funkcija kroz primere. U trecem smo naucili dva trika za povecanje produktivnost. I u zavrsnom sumiramo nauceno kroz praksu.

Ovaj kratak program je napisan tokom izvanrednog IHTS kursa, koji svima preporucujem. Cezar cypher je jednostavan sistem enkripcije koji je dobio naziv po Juliju Cezaru jer ga je primenjivao tokom vojnih operacija za razmenu poruka. Radi se o jednostavnoj zameni slova za slovo po nekom kljucu koji definise za koliko je mesta pomeren alfabet u kriptovanom textu. Detaljno objasnjenje mozete naci na wikipediji ovde. Poznat primer ove enkripcije je cuveni ROT13 u kome je Engleski alfabet podeljen na pola. On je bio jako popularan na starim news grupama i jednostavnu demonstraciju mozete videti ovde.

Da predjemo na posao. U IDLE Editoru iskopirajte i pokrenite sledeci code:

def cea(s,x):
    a = ''
    for n in s:
        if n.isalpha():
            b = chr((ord(n.lower())+x-97)%26+97)
            if n.isupper():
                a += b.upper()
            else: a += b
        else: a += n
    print(a)

def uncea(s,x): cea(s,-x)

def brutc(s):
    for n in range(25):
        print('Key',n+1,'Text:')
        uncea(s,n+1)

#Examples:

#cea('Simple is better than complex.',5)
#brutc('Mywzvoh sc loddob drkx mywzvsmkdon.')
#uncea('Lyuxuvcfcns wiohnm.',20)

Kratko objasnjenje: Funkcija Cea pomera text za faktor x, cime ga enkriptuje. Uncea poziva Cea ali sa obrnutim faktorom, cime ga vraca nazad u alfabetu za onoliko mesto koliko je bio pomeren tokom enkripcije. I Brutc jednostavno izlistava svih 25 mogucnosti pomerenog texta za Engleski alfabet. Onda je lako videti koji od njih ima smisla, a time i koji je kljuc koriscen.

Testirajmo nas program u shellu:

>>> cea('Simple is better than complex.',5)
Xnruqj nx gjyyjw ymfs htruqjc.
>>> uncea('Lyuxuvcfcns wiohnm.',20)
Readability counts.
>>> brutc('Mywzvoh sc loddob drkx mywzvsmkdon.')
[...]
Key 10 Text:
Complex is better than complicated.
[...]

Opciono za kraj mozete probati brutc funkciju za sledeci cypher:

'Sw lzcowu xili, aiu c riuc swxi.'

Dobicete remix verziju jedne nase poslovice. :)

Inace, primeri koje smo koristili predstavljaju neke od osnovnih principa Pythona. Njih je napisao Tim Peters u svom textu The Zen of Python. U koliko zelite da procitate integralnu verziju texta sa svim principima, mozete koristiti poznati Python Easter Egg.

Kucajte u IDLE Shellu:

>>> import this

Na kraju treba dodati da Cezar shift vise nije u upotrebi jer se smatra nesigurnim. Dovoljno je pronaci kljuc na osnovu dela texta i onda je lako dekriptovati kompletan sadrzaj. Medjutim, gotovo je idealan za ucenje programiranja i demonstraciju jednostavne enkripcije.

Ovim zavrsavamo mini-serijal o funkcijama. Srecno u novim Python avanturama.

Python: Funkcije, trikovi

U proslom textu obradili smo neke osobenosti funkcija kroz nekoliko primera. Danas cemo objasniti dva trika kojim vase funkcije mozete uciniti korisnijim.

1) Docstring – Pomocne informacije u funkcijama.

Sve ugradjene funkcije u Pythonu imaju svoj kratak help. Ako zelite da ih vidite, kucajte u Shellu:

>>> dir(__builtins__)

Dobicete listu svih standardnih funkcija u Pythonu. Sada ako zelite da dobijete vise informacija o njima, mozete koristiti komandu help. Pokusajte recimo sledece:

>>> help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

Ili:

>>> help(input)
Help on built-in function input in module builtins:

input(...)
    input([prompt]) -> string

    Read a string from standard input.  The trailing newline is stripped.
    If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
    On Unix, GNU readline is used if enabled.  The prompt string, if given,
    is printed without a trailing newline before reading.

Docstring metod nam omogucava da isto to uradimo sa nasim funkcijama. Upisuje se unutar tri znaka navoda, odmah iza imena funkcije a pre akcije. Pogledajmo to na primeru naseg konvertora iz prethodnog texta. Da se podsetimo, on izgleda ovako:

def face(fa):
    return (fa-32)*5/9

def cefa(ce):
    return ce*9/5+32

Otvorite ga u IDLE editoru i preradite da izgleda npr. ovako:

def face(fa):
    """
    (num) -> float
    Za unetu temperaturu u Farenhajtima,
    vraca vrednost u Celzijusima.
    """
    return (fa-32)*5/9

def cefa(ce):
    """
    (num) -> float
    Za unetu temperaturu u Celzijusima,
    vraca vrednost u Farenhajtima.
    """
    return ce*9/5+32

Snimite ga, izvrsite (F5) i u IDLE Shellu testirajte:

>>> cefa(31)
87.8
>>> face(90)
32.22222222222222

Vec i prilikom kucanja videcete da vam Shell nudi objasnjenje koji tip unosa funkcija ocekuje. Sada testirajte help na vasim funkcijama:

>>> help(cefa)
Help on function cefa in module __main__:

cefa(ce)
    (num) -> float
    Za unetu temperaturu u Celzijusima,
    vraca vrednost u Farenhajtima.

>>> help(face)
Help on function face in module __main__:

face(fa)
    (num) -> float
    Za unetu temperaturu u Farenhajtima,
    vraca vrednost u Celzijusima.

Help vam sada vraca informacije koje ste upisali u docstring funkcije.

Ovo je tipican nacin pisanja docstringa. Da li cete i kako koristiti ovu opciju potpuno je na vama. Ona moze biti narocito korisna u timskom radu, kao i korisnicima vasih programa radi brzog pregleda informacija.

2) Funkcija iz funkcije

Vec je pomenuto da funkcija moze pozivati drugu funkciju. Ovo je korisno radi razbijanja komplexnih zadataka na jednostavnije. Takodje i radi optimizacije koda, jer ako znate pouzdano da vam neka vec napisana funkcija dobro radi, nema potrebe da isto ponavljate u drugoj.

Radi ilustracije, napravicemo jednostavan primer. Pretpostavimo da zelite da napisete funkciju koja uzima dva broja, sabira ih i podize na kvadrat. Pri tome, vec imate funkciju koja dize na kvadrat.

To bi moglo izgledati ovako. U Python editoru kucajte:

def kvad(a):
    return a*a

def skvad(a,b):
    return kvad(a+b)

Testirajmo funkciju u shellu:

>>> skvad(1,4)
25
>>> skvad(5,7)
144

Kao sto vidite, funkcija skvad uzima dva broja, sabira ih, poziva funkciju kvad koja ih podize na kvadrat, i na kraju nam vraca rezultat. Pri tome je naravno moguce upotrebljavati i funkciju kvad direktno:

>>> kvad(4)
16

Ovim zavrsavamo treci text serijala o funkcijama. U narednom i poslednjem bavicemo se praksom kroz jedan zanimljiv primer.

Python: Funkcije, primeri

U uvodnom textu smo ukratko objasnili sta su funkcije, kako se pisu i koriste. Sada cemo objasniti neke osobenosti funkcija kroz primere. Podsetite se kako se tehnicki radi sa .py fajlovima, jer ce vam biti od koristi i ovde.

Kao sto smo rekli, funkcije se sastoje od: imena, argumenata, neke akcije i rezultata. Medjutim, u praksi cete se sretati sa programima koji nemaju sve elemente standardne strukture. Evo i nekoliko primera.

1) Funkcije ne moraju da imaju akciju (radni deo). Akcije moze biti upisana u rezultat direktno.

Za ovaj primer iskoristicemo funkciju sab koju smo vec napisali. Ako ste je sacuvali, desni klik na sab.py i izaberite Edit with IDLE. Ako ne, otvorite IDLE i File > New Window za editor, pa upisite ili iskopirajte code.

Da se podsetimo sab.py izgleda ovako:

def sab(a,b):
    x = a+b
    return x

U ovom jednostavnom primeru radni deo je nepotreban. Nije potrebno napraviti dodatnu varijablu x za sabiranje, pa onda vracati tu varijablu. Moguce je u startu vratiti zbir.

Promenite vas sab.py code tako da izgleda ovako:

def sab(a,b):
    return a+b

Snimite ga sa File > Save i izvrsite sa Run > Run Module. U IDLE Shellu kucajte:

>>> sab(3,4)
7

Kao sto vidite funkcionalnost je ostala ista, iako je radni deo obrisan. Ili preciznije, prebacen u deo za rezultat. Sa ovim cete se vrlo cesto sretati.

2) Funkcije ne moraju da imaju rezultat/return. Ponekad je akcija sve sto zelite.

Napisite sledecu funkciju u IDLE Editoru, snimite je i izvrsite:

def sila(ime):
    print('May the Force be with you,',ime+'.')

Zatim je u Shellu pozovite sa argumentom vaseg imena. Npr. ako se zovete Dejan pisite:

>>> sila('Dejan')
May the Force be with you, Dejan.

Dobicete poznati pozdrav i StarWars-a. U ovom primeru funkcija nema rezultat koji vraca, vec samo izvrsava akciju na osnovu prosledjenog argumenta.

3) Funkcije ne moraju imati ni argumente.

Napisite sledecu funkciju u IDLE Editoru, snimite je i izvrsite:

def cikajova():
    print('Ucio ih, ucio\nOd srede do petka\n' \
          'Al\' se nisu odmakli\nDalje od pocetka.')

Pozovite je u IDLE Shellu jednostavno sa:

>>> cikajova()
Ucio ih, ucio
Od srede do petka
Al' se nisu odmakli
Dalje od pocetka.

Dobicete poznate stihove Cika Jove Zmaja. :) Ovde funkcija nema ni argumente ni rezultat, vec samo izvrsava neku akciju. Na ovaj nacin ih mozemo koristiti kao subrutine, sto donekle vazi i za drugi primer.

Napomena: Sve funkcije mogu stajati u istom .py fajlu. Ovo vazi i za glavni code koji ih pokrece.

4) A funkcije mogu biti i korisne.

Do sada smo pisali samo genericke funkcije sa ciljem da ilustrujemo neke osobine i mogucnosti. Sada cemo napisati jednu korisnu funkciju, temperaturni konverter izmedju celzijusa i farenhajta.

U IDLE Editoru napisite, snimite i izvrsite sledeci code:

def face(fa):
    return (fa-32)*5/9

def cefa(ce):
    return ce*9/5+32

Koristite cefa za konverziju C u F a face obrnuto. Npr.

>>> cefa(25)
77.0
>>> face(47)
8.333333333333334

Ovo vam moze biti korisno ako imate drugove u Americi ili na Bahamima. :)

Ovim zavrsavamo drugi deo serije textova u funkcijama. U sledecem textu cemo opisati dva trika koja ce vase funkcije uciniti produktivnijim.

Python osmi cas

For petlja sluzi da se neka komanda ili funkcija, odnosno blok komandi ili funkcija izvrsi odredjeni broj puta.

Primer 1:

U ovom primeru se koristi range, koji ima format range(start,kraj,korak). Korak se ne mora uvek koristiti. Ako se izostavi, podrazumevana vrednost je 1, ako se stavi neki broj, na primer 2, bio bi na primer ispisan svaki drugi broj. O tome kasnije.
Obratite paznju da blok komandi i funkcija koje su obuhvacene for petljom mora biti uvucen. Kada se petlja zavrsi posle odredjenog broja puta, nastavlja se izvrsavanje programa.

#! /usr/bin/python3

for n in range(1,11):
   print (n)

print (\nOvo je bio primer for petlje.")

Primer 2:

Ovaj primer je slican prethodnom, razlika je, sto je funkciji print dodat end=" ", na taj nacin, umesto liste brojeva koji su jedni ispod drugog, brojevi ce biti ispisani jedan pored drugog. Ovo je mozda trebalo da pomenem kada sam pisao o funkciji print, ali dobro, moze i ovde, ovo je dobar primer kada se koristi end=" ".

#! /usr/bin/python3

for n in range(1,11):
   print (n, end=" ")

print (\nOvo je bio primer for petlje.")

Primer 3:

For se ne mora koristiti samo sa brojevima, vec se moze koristiti i sa karakterima u stringu. U ovom konkretnom primeru, mora se na pocetku definisati varijabla a = 0 i zatim, varijabla a, sluzi kao brojac karaktera jer se za svaki karakter u stringu uvecava za 1 u liniji a = a + 1.

#! /usr/bin/python3

s = "Python"
a = 0

for n in s:
   a = a + 1
   print (a,"slovo u stringu je",n)

print (\nOvo je bio primer for petlje.")

Primer 4:

Slicno kao i prethodnim primerima, samo ovde mnozim svaki broj u opsegu sa 2.

#! /usr/bin/python3

for n in range(1,5):
   print (n*2)

print (\nOvo je bio primer for petlje.")

primer 5:

U ovom primeru koristim i treci argument u funkciji range. Posto je treci argument, odnosno korak 2, to znaci da ce biti preskocen svaki drugi broj u opsegu.

#! /usr/bin/python3

for n in range(1,11,2):
   print (n)

print (\nOvo je bio primer for petlje.")

Primer 6:

U ovom primeru brojanje ide u nazad.

#! /usr/bin/python3

for n in range(10,0,-1):
	print(n)

Python: Funkcije, uvod

Kao i vecina programskih jezika, Python nam omogucava da pisemo vlastite funkcije. To su zapravo odvojeni delovi programa, napisani sa ciljem da izvrsavaju neki zadatak. Kada ih jednom definisemo, mozemo ih pozivati koliko puta zelimo. U tom smislu podsecaju na subrutine iz basica.

Drugi razlog koriscenja funkcija je bolja organizacija. Ovaj tzv. modularni pristup programiranju nam omogucava da komplexne zadatke razbijemo na vise delova. Ovi delovi / moduli kasnije mogu da se menjaju i unapredjuju, pozivaju jedan iz drugog itd. U zavisnosti od stila, postoje programeri koji koriste funkcije u >90% svog koda, upravo iz ovog drugog razloga.

Struktura funkcije je vrlo jednostavna. Ona ima: ime, argumente, neku akciju i rezultat. Ime sluzi da je pozovemo. Argumenti su neki podaci koje joj dajemo. Akcija je ono sto uradi. I rezultat su povratni podaci koje nam funkcija vraca.

U Pythonu ova struktura izgleda ovako:

def ime(a,b,c..):
    neka akcija
    sa a,b, i c
    return x

U ovom primeru ime je ime funkcije; a, b i c su argumenti; u sredini je neka radnja i x je rezultat koji nam funkcija vraca. No da se manemo teorije, jer se programiranje najbolje uci kroz primere i praksu.

Napisimo jednu jednostavnu funkciju:

1. Otvorite IDLE. Idite na File > New Window (ili Ctrl+N). Otvorice vam se novi editor.
2. U njemu ukucajte sledeci code:

def sab(a,b):
    x = a+b
    return x

3. U editoru gde ste napisali code funkcije idite na File > Save as i snimite ga recimo na Desktop pod nazivom sab.py. U koliko probate da pokrenete fajl pre nego ga snimite dobicete upozorenje da ovo nije moguce. Isto vazi i ako kasnije modifikujete fajl.

4. U editoru gde ste napisali code funkcije i snimili ga, idite na Run > Run Module (ili F5). Ovim cete izvrsiti funkciju i bicete automatski vraceni u osnovni IDLE shell.

5. U IDLE Shellu kucajte recimo:

>>> sab(10,20)
30

Cestitam, upravo ste napisali svoju prvu funkciju u Pythonu. Ova procedura pisanja funkcija u novom prozoru, zatim snimanje i izvrsavanje je inace uobicajena kod pisanja Python programa. U koliko se ranije niste sretali sa ovim, ponovite proceduru nekoliko puta da bi vam postala bliska.

U koliko kasnije budete zeleli da menjate sab.py, desni klik na njega ce vam dati opciju Edit with IDLE. Ako napravite izmene, moracete najpre da snimite ovakav fajl da bi ste mogli da ga izvrsite. Slobodno experimentisite u Pythonu, to je najbolji nacin da naucite ovaj programski jezik.

Dodacemo jos da su varijable unutar funkcije lokalne za tu funkciju. Drugim recima, u svom glavnom programu mozete koristiti ista slova koja ste koristili unutar neke funkcije. Takodje, i u drugim funkcijama mozete raditi isto.

Primera radi otvorite sab.py (desni klik > Edit with IDLE) i izvrsite ga (Run > Run Module). Zatim u IDLE Shellu kucajte nesto tipa:

>>> a = 10
>>> x = 15
>>> b = sab(10,x)+a
>>> print(b)
35

Iz ovoga se vidi da se varijable a,b i x u glavnom programu nezavisno koriste od varijabli unutar funkcije sab.

Toliko za uvod. U narednom textu cemo kroz primere obraditi neke osobenosti funkcija.

Python sedmi cas

Cesto cete biti u situaciji da kontrolisete tok programa u zavisnosti od nekih uslova. Jedan od nacina da to uradite je uz pomoc komande if. Uz if mogu da se koriste elif i else, ali nisu obavezni.

Primer 1:

Program trazi da unesete odgovor. Ako je odgovor da, onda se program prekida. Ako nije da, onda se program nastavlja.

#! /usr/bin/python3

zzz = input ("Da li zelis da prekines izvodjenje programa?  ")

if zzz == "da":
   exit()

print('\nOvo je bio primer kako se koristi "if"')

Primer 2:

Program trazi da se ukuca rezultat zbira 2+2. Ako je odgovor tacan, onda se izvrsava blok komandi ispod if zzz == 4 i zatim program nastavlja dalje izvrsavanje ignorisuci blok komandi ispod elif zzz != 4.
Obratite paznju na uvucene linije. To je u Pythonu jako vazna stvar.
Neke komande, u ovom primeru if i elif imaju blok komandi koje slede ispod i taj blok komandi mora da bude uvucen.
U sustini, prostim jezikom receno, if i elif proveravaju da li je uslov ispunjen.
Ako je uslov iza if, odnosno elif ispunjen onda se izvrsava taj blok komandi.
Zatim program nastavlja izvodjenje programskih linija koje nisu uvucene.

#! /usr/bin/python3

zzz = input ("Koliko je 2+2? ")
zzz = int(zzz)

if zzz == 4:
   print("Tvoj odgovor je tacan!")
elif zzz != 4:
   print("Tvoj odgovor nije tacan!")
   print("Tacan odgovor je 4.")

print('\nOvo je bio primer kako se koristi "if"')

Primer 3:

Ako nijedan od uslova nije ispunjen, onda se izvrsava blok komandi ispod else.

#! /usr/bin/python3

zzz = input ("Koliko imas godina? ")
zzz = int(zzz)

if zzz <= 20:
   print("Ti si bas mlad.")
elif zzz <= 50:
   print("Ti si u najboljim godinama.")
else:
   print("Bas si mator.")

print('\nOvo je bio primer kako se koristi "if"')

U ovim primerima ste mogli da zapazite i neke simbole koji se koriste za if, elif i else.
U Pythonu postoji 6 simbola za razlicite uslove.

Manje od ............ <
Vise od ............. >
Manje ili jednako ... <=
Vece ili jednako .... >=
Jednako ............. ==
Razlicito ........... !=
%d bloggers like this: