PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   Python - kako početi? (https://forum.pcekspert.com/showthread.php?t=266367)

KhongLo 05.01.2015. 01:49

Python - kako početi?
 
Pregledavao sam forum i vidio da se tu i tamo javljaju upiti vezani uz Python. Često ga se preporuča kao prvi izbor, kako za one koji još nikada nisu programirali, a htjeli bi početi, tako i za one koji već znaju programirati u nekom drugom programskom jeziku, a htjeli bi dodati još jedan na listu u svom CV-u. Kolegiji vezani uz Python u programu su mnogih svjetski renomiranih sveučilišta, a vidim da na mala vrata ulazi i u nastavne programe srednjih škola i fakulteta diljem Lijepe Naše. Osobno mi se jezik jako sviđa zbog svoje jednostavnosti i funkcionalnosti, pa sam odlučio otvoriti temu i podijeliti svoja iskustva. Nadam se da će bar nekome biti od koristi i da će se i drugi korisnici nadovezati sa svojim znanjem i iskustvom...

Što je Python?

Python je interpretirani općenamjenski programski jezik visoke razine. Tvorac jezika je Guido van Rossum, a ime je dobio prema serijalu Monty Python. Besplatan je i otvorenoga je koda te podržan na velikom broju različitih operativnih sustava, uključujući Windows, Linux i Mac. Korisniku daje mogućnost korištenja većine programski paradigmi, a najviše se ističu proceduralno i objektno orijentirano programiranje. Upravo zahvaljujući Pythonu, YouTube, Dropbox, mnoge Googleove usluge i mnoge distibucije Linuxa (npr. Ubuntu i Mint) izgledaju onako kako ih danas poznajemo. Više na službenim stranicama i Wikipediji...

Preduvjeti za programiranje u Pythonu:
  1. Potrebno je imati računalo na raspolaganju. *
  2. Znati se služiti barem jednim text editorom (npr. Notepad, Notepad++, Vim, Emacs, Nano, Atom, TextMate, Sublime Text, gedit, Kate, itd.). **
  3. Preuzeti Python interpreter (download) i instalirati ga na računalo (uputstva). ***
  4. Uistinu je poželjno, rekao bih čak i nužno, služiti se engleskim jezikom. ****
* Python interpreter moguće je instalirati i na tabletima (pouzdano znam za iPad).
** Uz interpreter dolazi i IDE, no za početak preporučam korištenje text editora. Postoje i razni drugi IDE-ovi koje je moguće besplatno preuzeti s interneta ili ih kupiti.
*** Mac i većina distribucija Linuxa dolaze s predinstaliranim Python interpreterom. Za provjeru otvorite Terminal i upišite help python ili python --version.
**** Za one kojima engleski jezik predstavlja problem bit će navedena i literatura na hrvatskom te ostalim jezicima na kraju.

Koju verziju trebam odabrati: Python 2 ili Python 3?
Ukratko: odaberite prema vlastitim potrebama.
Pojašnjenje:
Online kolegiji za početnike:
  • Learn Python The Hard Way by Zed Shaw (za potpune početnike, tj. one koji nisu ranije programirali)
  • Codecademy (za potpune početnike i one koji imaju prethodnog iskustva s programiranjem u drugim programskim jezicima; potrebno se registrirati ili prijaviti koristeći Facebook ili Google+ account; na stranici postoji interaktivni online interpreter)
  • Learn Python (za potpune početnike i one koji imaju prethodnog iskustva s programiranjem u drugim programskim jezicima; na stranici postoji interaktivni online interpreter)
  • Video snimke s predavanja iz Introduction to Computer Science and Programming na Massachusetts Institute of Technology (MIT 1)
  • Video snimke s predavanja iz Introduction to Computer Science and Programming na Massachusetts Institute of Technology (MIT 2)
  • A Byte of Python by Swaroop C H (vrlo kratki tutorial za potpune početnike)
  • Online Python Tutor (s4vgR ga preporuča za totalne početnike)

Ma ja bih radije da me neka zgodna cura uvede u sve to! :)
Ne sviđa se meni to sve online, daj mi neku knjigu!
Već poznajem osnove Pythona. Htio bih krenuti s nečim konkretnim!
Coding styleKao što i u PEP-u 8 piše, prilagodite svojim potrebama i radnoj okolini.

Kompletna dokumentacija o svemu i svačemu:
Dodatna literatura:
Literatura na hrvatskom i ostalim jezicima:

cccp 05.01.2015. 13:47

Lijep sažetak. Hvala na tome, možda napokon pokrenem lijenu guzicu :)

rodney 05.01.2015. 20:21

Apeliram na "upravu" da stave ovo kao sticky. Mislim da se ovakav post svakako mora istaknuti iznad gomile "do my homework" tema, pa čak i iznad onih par suvislih.

gaggo 05.01.2015. 20:36

Jako dobar post i jako informativno!
Ako zelis imam prezentacije u pdf-u sa kolegija na faksu gdje smo poceli koristiti python za obradu teksta.

KhongLo 05.01.2015. 21:18

@cccp - Ja sam krenuo iz razloga jer sam se htio upoznati s OOP-om i vidjeti što nudi u odnosu na paradigme koje su mi dosada bile poznate (moj background su MATLAB i Fortran 90 u kojima OOP postoji, ali se njegove mogućnosti baš i ne koriste prečesto). Ako te nešto treba malo "pogurati", kao početnu točku preporučam Codecademy jer imaju sustav bodovanja, tj. možeš pratiti svoj napredak u postotcima koji predstavljaju omjer onog gdje si trenutno i onog što sve treba riješiti da bi ti na profilu pod Completed Skills stajalo Python, a postoji i n day(s) streak. Druga opcija je korištenje nečega od ostalog što sam naveo i da svaki dan uploadaš svoj kod negdje (npr. na GitHub koji također ima Current streak).

@gaggo - Može! Python najčešće i koristim upravo za raznorazna čarobiranja s datotekama punim brojki i pokojim slovom, pa mislim da će dobro doći. Ako je moguće, molio bih te da ovdje staviš link da malo obogatimo i nadopunimo temu.

Mr. X 04.02.2015. 09:13

@KhongLo
ovime si uspio zainteresirati nekoga tko nikad nije programirao. svaka čast!

pogi 04.02.2015. 09:26

još jedan glas za Stiki!

Cartmann 17.02.2015. 19:46

Odlična tj. vrlo korisna tema. :care::care:

ps. sad si i mene sjetio fortrana i programiranja početkom 90tih. :)

A kako sam trenutno nezaposlen (skoro 3mj), a ispucao sam sve veze za pronalazak drugog vjerojatno ću bit nezaposlen još neko vrijeme pa gledam kako najbolje iskoristit taj period.

Razmišljao sam upisat i položit ccna jer su i mreže moje interesno područje, ali phyton odnosno programiranje u tom dijelu mi ipak bolje leži.

ps. imam jedno polu-off topic pitanje za one koji rade u toj branši, što im je najgori/najteži dio posla?

wnbeeeE 17.02.2015. 20:09

Najteži dio je navesti klijenta / poslodavca da ti točno objasni što želi u samom startu jer u suprotnome može nastati cirkus. Ili možda objasniti poslodavcu na čemu se trenutno radi :D

partwish 17.02.2015. 20:30

Zašto baš phyton, a ne neki drugi programski jezik. Ne pitam ovo kao nekakvo filozofiranje ili podbadanje, nego čisto informativno... Zašto phyton, a ne c++ ili java?

Neo-ST 17.02.2015. 21:08

FYI, trenutno na Courseri traju predavanja o Pythonu, namijenjena potpunim početnicima (čak i ljudima koji se općenito ne razume baš u kompjutere, dakle baš ono teška nula :D ).

Kurs završava 29.4., trenutno je u tijeku 3. tjedan predavanja (od njih 10), međutim bilo tko se može spojiti bilo kada i odgledati predavanja, te riješiti assignmente za bodove koji će vam trebati kasnije ako želite certifikat.

Inače, sve je besplatno:

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

wnbeeeE 17.02.2015. 21:14

Citiraj:

Autor partwish (Post 2737665)
Zašto baš phyton, a ne neki drugi programski jezik. Ne pitam ovo kao nekakvo filozofiranje ili podbadanje, nego čisto informativno... Zašto phyton, a ne c++ ili java?

zbog na oko jednostavne sintakse. Preporučljiv je apsolutnim početnicima.

Ako pitaš zašto baš taj jezik, neki od razloga bi bili
- dobra dokumentacija
- čistljivost koda
- koristi se za web aplikacije, desktop aplikacije, te dosta i u znanstvene svrhe
- stvari su uglavnom jednostavnije za isprogramirati nego recimo u c++
- nema kompajliranja, koristi se interpreter
- nema brige oko memory managmenta, znaci nemoras alocirati memoriju za varijable, niti moras oslobadati memoriju jednom kad zavrsis sa njihovom upotrebom
Eto par stvari iz glave..

Sve ovisi što te zanima i u kojem polju želiš raditi.

partwish 17.02.2015. 21:24

Citiraj:

Autor wnbeeeE (Post 2737693)
zbog na oko jednostavne sintakse. Preporučljiv je apsolutnim početnicima.

Aha, ja sam radio nešto sitno c++.

Cartmann 17.02.2015. 23:48

Citiraj:

Autor wnbeeeE (Post 2737654)
Najteži dio je navesti klijenta / poslodavca da ti točno objasni što želi u samom startu jer u suprotnome može nastati cirkus. Ili možda objasniti poslodavcu na čemu se trenutno radi :D

Da. Jer gledam poslove vani i vidim da se python znalce bez problema plaća 300-400 funti na dan (što bi bilo 3100-4200 kuna dnevno) pa se pitam gdje leži zec s obzirom da te imperijalisti neće platiti ni pennya više nego što moraju.

http://www.reed.co.uk/jobs/contract-...eywords=python

http://www.reed.co.uk/jobs/python-de...eywords=python

KhongLo 18.02.2015. 01:29

Citiraj:

Autor partwish (Post 2737665)
Zašto baš phyton, a ne neki drugi programski jezik. Ne pitam ovo kao nekakvo filozofiranje ili podbadanje, nego čisto informativno... Zašto phyton, a ne c++ ili java?

Osim svega što je wnbeeeE već napisao, ja bih još nadodao ogroman broj korisnika. Time je šansa da će se dobiti pomoć kada negdje zapne daleko veća nego kad se radi o jeziku čija je zajednica dosta mala kao što je to slučaj kod npr. Fortrana, kojeg danas pretežito koriste samo matematičari, fizičari i inženjeri, i to uglavnom kada stvarno moraju. Osim toga, Python je dovoljno mlad programski jezik, a opet je dovoljno star i time jako dobro razvijen, pa se ne treba bojati za njegovu budućnost, tj. da se neće više razvijati ili koristiti za koju godinu. Još je k tome i veoma popularan i rasprostranjen, pa se dolazi do onog all the cool kids do it :D

Citiraj:

Autor Neo-ST (Post 2737689)
FYI, trenutno na Courseri traju predavanja o Pythonu, namijenjena potpunim početnicima (čak i ljudima koji se općenito ne razume baš u kompjutere, dakle baš ono teška nula :D ).

Kurs završava 29.4., trenutno je u tijeku 3. tjedan predavanja (od njih 10), međutim bilo tko se može spojiti bilo kada i odgledati predavanja, te riješiti assignmente za bodove koji će vam trebati kasnije ako želite certifikat.

Inače, sve je besplatno:

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

Hvala na informaciji! Nadam se da ću stići baciti oko na koje predavanje čisto da vidim kako su oni složili kolegij i u kojem smjeru će ga voditi.

Citiraj:

Autor Cartmann (Post 2737786)
Da. Jer gledam poslove vani i vidim da se python znalce bez problema plaća 300-400 funti na dan (što bi bilo 3100-4200 kuna dnevno) pa se pitam gdje leži zec s obzirom da te imperijalisti neće platiti ni pennya više nego što moraju.

http://www.reed.co.uk/jobs/contract-...eywords=python

http://www.reed.co.uk/jobs/python-de...eywords=python

Vidi njega! Ja pokrenuo temu za početnike, a on je već u glavi vrti nule :D (JK)

Kruno M 18.02.2015. 09:22

Svaka čast.

Da li ima tko iskustva sa pythonom i android programiranjem? Koji alat je najbolji a to?

s4vgR 18.02.2015. 09:51

Kivy (nisam koristio)


Citiraj:

Autor KhongLo (Post 2737827)
Osim svega što je wnbeeeE već napisao, ja bih još nadodao ogroman broj korisnika. Time je šansa da će se dobiti pomoć kada negdje zapne daleko veća nego kad se radi o jeziku čija je zajednica dosta mala kao što je to slučaj kod npr. Fortrana, kojeg danas pretežito koriste samo matematičari, fizičari i inženjeri, i to uglavnom kada stvarno moraju.

+ ooogroman broj open source modula

zubich 18.02.2015. 10:08

Python - kako početi?
 
@KrunoM
Ja imam i s pythonom i s android programiranjem, ali s pythonom nebuš radio android aplikacije, za to imaš javu.

da i ja osobno nadodam na listu odgovora na gornje pitanje "zašto python?"...
Python se smatra jezikom za rapid development, označavajući svojstvo rasprostranjenosti i jednostavnosti. Tako si možeš uzeti bilo koji adekvatan framework za ono što želiš raditi i imaš sve osnovne probleme rješene, dok bi, na primjer, razvoj web aplikacije u c++ potrajao n-tero puta dulje.

partwish 18.02.2015. 10:55

Pa hvala svima na odgovorima. Razmišljao sam da se malo bacim na php, a sad ste mi ubacili bubu u uho s ovim... Prokletnici! :D

Cartmann 18.02.2015. 13:04

Citiraj:

Autor KhongLo (Post 2737827)
Vidi njega! Ja pokrenuo temu za početnike, a on je već u glavi vrti nule :D (JK)

U, daleko sam ja od tih nula. :) Baš pitam iz perspektive početnika, ali baš potpunog početnika tipa bakice koja radi na kasi u konzumu.

Kad gledam kao početnik (zamislim da imam 18 godina i biram svoj put), izgleda mi teže položiti ccna, ccnp,.. te dizajnirati i administrirati mrežu za 25k godišnje, nego python (django, mysql, javascript,..) i raditi u ubs banci za 60k godišnje. Ili još boje junior developer za 30-40k.

wnbeeeE 18.02.2015. 15:11

Citiraj:

Autor Cartmann (Post 2737952)
Kad gledam kao početnik (zamislim da imam 18 godina i biram svoj put), izgleda mi teže položiti ccna, ccnp,.. te dizajnirati i administrirati mrežu za 25k godišnje, nego python (django, mysql, javascript,..) i raditi u ubs banci za 60k godišnje. Ili još boje junior developer za 30-40k.

izgleda ti :D

Cartmann 18.02.2015. 16:47

Možeš li malo detaljnije, vjerujem da ta tema nije nezanimljiva, bar ne početnicima.

Ne znam kako bi objasnio, npr. da mi dođe netko i kaže "ja sam bloger i zarađujem milijun kuna godišnje", shvatio bi zašto je to tako. Čovjek piše blog kojeg prate milijuni te od reklama zarađuje taj novac. Samo od desetaka tisuća, pa i stotina tisuća blogera koji ne mogu zaraditi ni jednu kunu, on je taj koji je imao mix talenta i sreće da dođe u tu poziciju. S druge strane mi se čini da python developer može biti svak tko ima dovoljno upornosti i želje, sreća i talent nisu presudni u toj priči. Ispada da svak tko ima volje uložiti par godina života može doći do plaće od 400-600 tisuća kuna godišnje (pretvoreno iz funti u kune).

wnbeeeE 18.02.2015. 17:08

Citiraj:

Autor Cartmann (Post 2738113)
Možeš li malo detaljnije, vjerujem da ta tema nije nezanimljiva, bar ne početnicima.

Ne znam kako bi objasnio, npr. da mi dođe netko i kaže "ja sam bloger i zarađujem milijun kuna godišnje", shvatio bi zašto je to tako. Čovjek piše blog kojeg prate milijuni te od reklama zarađuje taj novac. Samo od desetaka tisuća, pa i stotina tisuća blogera koji ne mogu zaraditi ni jednu kunu, on je taj koji je imao mix talenta i sreće da dođe u tu poziciju. S druge strane mi se čini da python developer može biti svak tko ima dovoljno upornosti i želje, sreća i talent nisu presudni u toj priči. Ispada da svak tko ima volje uložiti par godina života može doći do plaće od 400-600 tisuća kuna godišnje (pretvoreno iz funti u kune).

To i je problem, nema svako toliko volje, vremena i novaca da baci dvije godine života full time na nešto. Potrebno je uložiti puno sati, ali najveći problem i nisu uloženi sati i volja već učenje na pravim projektima. Ekipa obično završi codeacademy/codeschool/knjigu/tutorijal ali ne radi na projektu, a na pravim se projektima uči zanat.

Zato kažu da je dobro znati što želiš napraviti("sagraditi") sa tim jezikom prije nego što ga kreneš učiti, tako da ga kroz učenje možeš mic po mic raditi i praksati se. Ne bi baš rekao da je to tako lako i jednostavno, jer zahtjeva dosta učenja, vježbanja i neprospavanih noći, pogotovo za apsolutnog početnika, ali sve se može :) Danas je to bar lako uz sve te materijale što su nam dostupni.

Ja sam evo za primjer završio studij turizma i ekonomije, a radim full time u it-u ko developer jer mi je studij ostavljao dovoljno vremena sa strane da se posvetim onome što me uvijek zanimalo.

KhongLo 18.02.2015. 20:51

Citiraj:

Autor wnbeeeE (Post 2738121)
To i je problem, nema svako toliko volje, vremena i novaca da baci dvije godine života full time na nešto. Potrebno je uložiti puno sati, ali najveći problem i nisu uloženi sati i volja već učenje na pravim projektima. Ekipa obično završi codeacademy/codeschool/knjigu/tutorijal ali ne radi na projektu, a na pravim se projektima uči zanat.

U potpunosti se slažem. Knjige, tutorijali i tečajevi su dobri za upoznavanje s nekim programskim jezikom (ili bilo kojom drugom tematikom), ali nikakve koristi od svega toga dok se naučeno negdje ne primjeni. Tek kad se krene s nečim što ima glavu i rep i kad se u međuvremenu naiđe na desetke i stotine pitanja i problema, te se na kraju postigne željeni rezultat, onda se može reći da nešto znaš.

Čak i ako se netko ne bavi takvim poslom, danas barem više nije problem pronaći projekte. Open source projekti veoma često nove contributore čekaju širom raširenih ruku. Samo na GitHubu takvih projekata ima "beskonačno" mnogo, a ima ih i na drugim stranicama.

Citiraj:

Ja sam evo za primjer završio studij turizma i ekonomije, a radim full time u it-u ko developer jer mi je studij ostavljao dovoljno vremena sa strane da se posvetim onome što me uvijek zanimalo.
:respekt:

Cartmann 18.02.2015. 21:26

Hvala na odgovoru. :chears: Vjerojatno će mi biti jasnije kad se uhvatim učenja. Čitam na drugom forumu prijedloge čovjeku koji želi krenuti smjerom web developmenta. Prvo python jer je lak za naučiti (par tjedana), zatim preć na CSS, html, php, html5, css3,.. i paralelno učit javascript jQuery. Ako se uhvatiš toga ozbiljno za manje od godinu dana si front end developer s plaćom od bar 5000kn (u ZG, nakon par mjeseci potrage za poslom). Ili 20-30t funti u UK. To je otprilike plaća koju dobiju sistem administratori s ccna/ccnp, ovisi o iskustvu, veličini kompanije itd. A onda vidim one oglase za python za 500 funti dnevno pa se pitam što ti ljudi rade kad se poslodavcu isplati dati taj novac tj. što ti ljudi mogu napraviti da to nitko drugi ne može uraditi za manje. Jer za tu plaću bi average Indijac dao oba bubrega i 20 godina po 16h dnevno štrebao python. I Hrvat bi. :)

KhongLo 18.02.2015. 21:36

Prilično zgodan uvod u sve što si nabrojao možeš naći na Codecademy, a sve izuzev Pythona, također imaš to i na W3Schools. Mike Locke je na svom YouTube kanalu dosta dobro opisao svoj put preko trnja do zvijezda. Iako je on web designer, a ne web developer, mnogo toga o čemu priča vrijedi za oba posla. Preporučam da baciš pogled kada nađeš vremena.

wnbeeeE 18.02.2015. 21:55

Python - kako početi?
 
Citiraj:

Autor Cartmann (Post 2738262)
Hvala na odgovoru. :chears: Vjerojatno će mi biti jasnije kad se uhvatim učenja. Čitam na drugom forumu prijedloge čovjeku koji želi krenuti smjerom web developmenta. Prvo python jer je lak za naučiti (par tjedana), zatim preć na CSS, html, php, html5, css3,.. i paralelno učit javascript jQuery.

krivo. Python neces naucit u par tjedana, napipat ćeš samo sintaksu. U web developmentu ići prvo učiti python pa onda html nema nikakvog smisla. Uči html,css (kodiranje) i javascript, a sa strane udaraj svoje po pythonu, ako si baš ambiciozan.

Moj savjet je da ignoriraš taj web svijet za sada jer tamo ima previše tehnologija, i kreni sa pythonom. A putem ćeš pohvatati html/css(štrikanje, kodiranje) ako ti već bude trebao.

Frend mi je full stack web dev u dublinu i ima 500 eura dnevnicu, ali je zato to nakrojio sa 6 godina radnog iskustva. Ništa neide preko noći. Možda kada shvatiš koliko je programiranje teško i koliko je vremena potrebno da postaneš senior shvatiš zašto je dobro plaćeno :) A shvatit ćeš. Programera vani fali i dobro su plaćeni, neka te ne brine nedostatak posla, ali fali onih dobrih programera sa iskustvom.

Cartmann 19.02.2015. 02:55

Nešto malo sam se igrao u css-u, php-u itd.. ali ne s ciljem da to radim za lovu već bi me pukla ideja da napravim blog (wp, css, vlastita domena/hosting) koji bi htio urediti po svom guštu pa bih provodio noći ispitujući opcije i mogućnosti. Onda bi me puklo da se malo igram i s joomlom ili s forumima (vbulletin, smf, dedicated, prebacivanje mysql baze s jednog na drugi), samo sam posljenjih 5-6 godina kompletno izvan toga.

Svakako da ne idem off-topic jer to nema veze s pythonom, zaintrigralo me i to što (barem koliko vidim) Indijci nisu srušili cijenu rada i na ovom području, kao u području mreža.

s4vgR 19.02.2015. 18:08

http://pythontutor.com/

ovo je zgodno za totalne početnike :)

Neo-ST 27.02.2015. 00:02

Može mi netko objasniti ovo:

http://www.pohrani.com/f/1f/rb/2BtCg...001-custom.jpg


Ovo je inače dio predavanja o funkcijama.
Tu mi nešto nije jasno.
Pri definiranju funkcije "computepay", čemu služe "h" i "r", ako dolje pri "try" segmentu te parametre pamti kao "hours" i "rate", a ne "h" i "r" ?
I čemu služi ono "return p" ako je već formulom definiran "p" ?

L31 27.02.2015. 00:23

Ne bih ti znao pomoci, tek sam na pocetku prvog predavanja one gospodjice iz prvog posta.

Bullet1 27.02.2015. 00:26

Simple:

computepay je funkcija koja prima dva argumenta (h i r) odnosno ante i mate ili kako god hoćeš ih možeš nazvati.
Kada se program izvršava, najprije se izvršava try pa se zatim poziva computepay funkcija čiji se rezultat sprema u varijablu pay te sa print pay ispisiva taj rezultat.

Ukratko, kada poziva funkciju predaje argumente hours i rate koji su neka realna brojčana vrijednost. Ti argumenti se pri pozivu funkcije kopiraju u varijable h i r (moglo ih se isto nazvati hours i rate ali vjerojatno namjerno nije kako ne bi mislio da radiš direktno sa donjim varijablama već njihovim kopijama).
Ovisno o tome je li h <= 40 rade se zadane operacije a rezultat se sprema u varijablu p. Tu varijablu, odnosno njenu vrijednost moramo zapamtiti prilikom izvršenja funkcije. Za taj dio je zaslužan return p koji kod poziva pay = computepay(hours, rate) ima ulogu da u varijablu pay spremi vrijednost varijable p iz funkcije.

Nadam se da nisam zakompliciro s odgovorom :D

to bi izgledalo ovako na primjeru:

ukoliko za Enter hours unesemo 5.5 a za Enter rate unesemo 3.5 onda pozivamo funkciju computepay koja bi izgledala computepay(5.5, 3.5). Ulaskom u funkciju varijabla h iznosi 5.5 a varijabla r 3.5. Iizvršava se if uvjet jer h nije veći od 40 pa je rezultat 19.25 i taj rezultat se sprema u varijablu p. Else dio se preskače i funkcija vraća vrijednost 19.25 te se ta vrijednost sprema u varijablu pay jer smo tako rekli pri pozivu funkcije (pay = computepay(...)).
Kada isprintamo varijablu p (print p) vidit ćemo da je rezultat 19.25.

Neo-ST 27.02.2015. 00:32

Citiraj:

Autor Bullet1 (Post 2743055)
Ukratko, kada poziva funkciju predaje argumente hours i rate koji su neka realna brojčana vrijednost. Ti argumenti se pri pozivu funkcije kopiraju u varijable h i r (moglo ih se isto nazvati hours i rate ali vjerojatno namjerno nije kako ne bi mislio da radiš direktno sa donjim varijablama već njihovim kopijama).

Dobro, ali kako je on povezao hours sa h, rate sa r i pay sa p ?

Princ288 27.02.2015. 01:17

Predzadnji red, kad poziva funkciju compute, prenosi parametre hours i rate a u prvom redu ih ta funkcija kopira u h i r. U predzadnjem redu ti ito tako pise pay=... A vracas p, ona vrijedbost koju vracas ce se spremiti u pay.

Bullet1 27.02.2015. 05:24

Citiraj:

Autor Neo-ST (Post 2743056)
Dobro, ali kako je on povezao hours sa h, rate sa r i pay sa p ?

Samo treba shvatiti da h i hours nisu iste varijable već je h kopija od hours.
Dakle ako ti imaš varijablu imena Neo-ST koju šalješ funkciji, nije uopće bitno kako će se ona u funkciji zvati. Može se zvati isto Neo-ST a može Bullet, Pero a, z, žnj itd.

funkcija ima oblik:

funkcija (a, b) {
...tijelo funkcije...
}

a u main programu ti tu funkciju pozivaš funkcija(Neo-ST, Bullet) gdje argumenti koje predaješ odgovaraju tipu varijable koja funkcija prima.

Neznam kako bi ti pobliže objasnio od ovako:

Dakle, computepay gledaj kao funkciju i nema apsolutno nikakve veze što je ona napisana prije try. Try se nalazi u main dijelu programa i služi kako bi ti dao vrijednost nekoj varijabli.
Imaš jabuku i trebaš joj dati vrijednost da znaš koliko ona košta. Ako si definirao da jabuka košta 2kn možeš ju zapisati kao jabuka = 2. S druge strane imaš krušku koja košta 3kn i definiraš varijablu kruška = 3. Sada imaš dvije opcije za izračun koliko jedna jabuka i jedna kruška skupa koštaju. Prva opcija je da u main programu samo nastaviš pisati nešto poput:
suma = jabuka + kruška ;
što znači da je suma = 2 + 3 odnosno suma = 5;
ili napraviš funkciju koja se zove suma te prima parametre artikl1 i artikl2. Takav zapis funkcije izgleda suma(artikl1, artikl2). Ti od te funkcije tražiš da ti napravi sumu dvaju artikala i da ti vrati rezultat. Nebitno je jesu li u pitanju kruške i jabuke ili šljive i smokve, ista je matematika. Dakle, definirao si u glavnom programu da je:
jabuka = 2;
kruška = 3;
i sada želiš primjeniti funkciju koja će zbrojiti vrijednosti krušaka i jabuka. To ćeš napraviti jednostavnim pozivom funkcije suma(jabuka, kruška) i spremit ćeš povratnu vrijednost u neku varijablu kako bi tu sumu mogao koristiti dalje u programu ili ju samo ispisati. Da ne filozofiram dalje, napisat ću ti jednostavniji primjer od toga što imaš zadano pa možda shvatiš.

Code:

//ovo je funkcija koju pozivaš iz main programa
def suma(artikl1, artikl2):
    rezultat = artikl1 + artikl2;
    return rezultat;


//ovo je main program
jabuka = 2;
kruška = 3;
šljiva = 5;
smokva = 1;

//funkcija sprema rezultat (5) u varijablu trošak1
trošak1 = suma(jabuka, kruška);

//ispisivamo vrijednost varijable trošak1 odnosno broj 5
print trošak1;

//funkcija sprema rezultat (6) u varijablu trošak2
trošak2 = suma(šljiva, smokva);

//ispisivamo vrijednost varijable trošak2 odnosno broj 6
print trošak2;

//funkcija sprema rezultat (11) u varijablu ukupan_trošak
ukupan_trošak = suma(trošak1, trošak2);

//ispisivamo vrijednost varijable ukupan_trošak odnosno broj 11
print ukupan_trošak;

Vidimo da smo funkciju suma upotrijebili 3 puta za različite proizvode. To je moguće zato jer se svaki puta kada pozovemo funkciju suma, oni argumenti koje smo predali u main programu preslikaju/kopiraju u one argumente koje funkcija prima.

Jabuka se preslikala u artikl1
Kruška se preslikala u artikl2

Šljiva se preslikala u artikl1
Smokva se preslikala u artikl2

Trošak1 se preslikao u artikl1
Trošak2 se preslikao u artikl2

Već su neke ure i neznam kako da ti bolje objasnim, sorry...

L31 27.02.2015. 10:02

Ako sam dobro shvatio, funkcija je zadana sa svojim varijablama. Kad definiramo sumu, unutar sume su elementi funkcije i nije bitno sto napisemo jer kad napisemo tu funkciju program zna o kojoj je funkciji rijec i automatski za artikl1 stavlja jabuku, za artikl2 stavlja krusku...odnosno u primjeru sa slike za hours stavlja h a za rate r
Jesam dobro shvatio?

KhongLo 27.02.2015. 12:26

Tako je. Ono što funkcija radi je definirano u tijelu funkcije, a s kojim vrijednostima će to nešto raditi zadaje se pomoću argumenata. Tijelo funkcije je sve ono što ide ispod def ime_funkcije(arg1, arg2, arg3), pri čemu su arg1, arg2 i arg3 argumenti.

Osim toga što se "razbijanjem" koda na funkcije dobiva na čitljivosti te lakšem pronalaženju i popravljanju grešaka, jedna od glavnih svrha njihovog korištenja je tzv. reusability, tj. ista funkcija može se koristiti u različitim programima i za potpuno različite stvari. Bullet1 je naveo kao primjer funkciju suma i s njom je zbrajao cijene voća. Ista ta funkcija može se kasnije u nekom drugom programu koristiti npr. za zbrajanje kilometara od Zagreba do Rijeke i od Rijeke do Splita. Naravno, ako će je se koristiti za zbrajanje kilometara, bilo bi primjerenije da se artikl1 i artikl2 preimenuju u nešto poput kilometri1 i kilometri2 jer bi bilo lakše za razumijeti u okviru tog programa, pa bi to izgledalo ovako:

Code:

def suma(kilometri1, kilometri2):
    rezultat = kilometri1 + kilometri2
    return rezultat

# Cestovne udaljenosti izmedu gradova su sljedece:
zagreb_rijeka = 170
rijeka_split = 360

''' Koliko cu kilometara prijeci ako krenem iz Zagreba, prespavam u Rijeci i
nastavim dalje prema Splitu? '''
udaljenost = suma(zagreb_rijeka, rijeka_split)
print udaljenost

Isti taj program mogao se napisati i bez da se išta u Bulletovom kodu mijenja, osim vrijednosti varijabli, samo je manje čitljivo i može biti zbunjujuće za onoga tko će čitati taj kod:
Code:

def suma(artikl1, artikl2):
    rezultat = artikl1 + artikl2
    return rezultat

# Cestovne udaljenosti izmedu gradova su sljedece:
jabuka = 170
kruska = 360

''' Koliko cu kilometara prijeci ako krenem iz Zagreba, prespavam u Rijeci i
nastavim dalje prema Splitu? '''
trosak = suma(jabuka, kruska)
print trosak

Oba programa bi na ekran trebala ispisati 530.

L31 27.02.2015. 12:46

Kad se dobro objasni, izgleda vrlo jednostavno :)

KhongLo 27.02.2015. 13:28

Kad sam se već dotaknuo lakšeg modificiranja programa i debugginga dat ću još jedan primjer zašto treba koristiti funkcije. Kad sam se prvi put u susreo s programiranjem, korištenje funkcija (i klasa) mi se činilo sasvim bezveze i razmišljao sam u stilu: Ma to je za pi***, ja cijeli kod napišem u komadu i ako je krajnji rezultat točan, onda sam miran, no vrlo brzo sam shvatio da je taj način razmišljanja kriv.

Primjer:
Web shop koji prodaje računalne komponente daje 10% popusta za gotovinsko plaćanje. Kod koji određuje cijenu koju će kupac platiti izgleda ovako:

Code:

def konacna_cijena(cijena_komponente, nacin_placanja):
    # 10% = 0.1
    popust = 0.1

    if nacin_placanja is 'gotovina':
        return cijena_komponente - popust*cijena_komponente
    else:
        return cijena_komponente

# Kupac nazove i pita za cijenu AMD FX 8320 procesora, a trgovac mu odgovara:
cijena_procesora = 1200
cijena_gotovina = konacna_cijena(cijena_procesora, 'gotovina')
print('Za placanje gotovinom to ce vas kostati', cijena_gotovina, 'kn,')
cijena_rate = konacna_cijena(cijena_procesora, 'rate')
print('a ako placate na rate, onda je cijena', cijena_rate, 'kn.')

Ako iz bilo kojeg razloga vlasnik web shopa odluči da je bolje da popust za gotovinsko placanja bude 9%, jedina stvar koju će trebati promijeniti jest umjesto popust = 0.1 napisati popust = 0.09.

Kada bi kod bio napisan tako da se za svaku komponentu konačna cijena računa zasebno kao što je to dano u primjeru ispod, tada bi promjena iz 10 u 9% zahtijevala malo više vremena, a mogućnost da se nešto propusti promijeniti ili napravi krivo je daleko veća.

Code:

def cijena_procesora(cijena_cpu, nacin_placanja):
    popust = 0.1

    if nacin_placanja is 'gotovina':
        return cijena_cpu - popust*cijena_cpu
    else:
        return cijena_cpu

def cijena_grafe(cijena_gpu, nacin_placanja):
    popust = 0.1

    if nacin_placanja is 'gotovina':
        return cijena_gpu - popust*cijena_gpu
    else:
        return cijena_gpu

def cijena_memorije(cijena_ram, nacin_placanja):
    popust = 0.1

    if nacin_placanja is 'gotovina':
        return cijena_ram - popust*cijena_ram
    else:
        return cijena_ram

Dakle, ovako se ne pisu programi! :D

Doduše, programe koji imaju veze s poslovanjem trgovine bilo bi bolje pisati objektno orijentirano, ali sada smo na funkcijama, pa sam onda korištenje klasa izostavio.

rodney 27.02.2015. 22:28

ups. nevidjeh čitavu drugu stranu teme..


Sva vremena su GMT +2. Sada je 19:59.

Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger