PMG - Python

2
PMG - Python
PMG - Python
Sadržaj
1.
Pozdrav Pythonu? ........................................................................................................................ 3
1.1.
Kako do Pythona .................................................................................................................. 3
1.2.
Print - izlaz............................................................................................................................. 3
1.2.1.
Još malo znakovnih nizova (string) ........................................................................... 4
1.2.2.
Formatirani ispis ........................................................................................................... 4
1.3.
Operator pridruživanja ........................................................................................................ 5
1.4.
Varijable ................................................................................................................................. 6
1.5.
Operatori ................................................................................................................................ 6
1.6.
Ponavljanje............................................................................................................................. 7
Grananje toka naredbom if ................................................................................................... 9
2.
3.
2.1.
Osnovna usporedba ............................................................................................................. 9
2.2.
I – ILI .................................................................................................................................... 10
2.3.
Logičke (Booleove) varijable ............................................................................................. 10
2.4.
Else i Else If .......................................................................................................................... 11
2.5.
Usporedba tekstova............................................................................................................ 12
2.6.
Ponavljanje........................................................................................................................... 12
Petlje ............................................................................................................................................. 14
3.1.
FOR ....................................................................................................................................... 14
4.
Moduli .......................................................................................................................................... 16
5.
Funkcije ........................................................................................................................................ 16
6.
5.1.
Osnovna svojstva funkcije ................................................................................................. 16
5.2.
Definicija funkcije ............................................................................................................... 16
5.3.
Rekurzije .............................................................................................................................. 17
Liste .............................................................................................................................................. 19
3
PMG - Python
1. Pozdrav Pythonu?
1.1. Kako do Pythona
Na stranici http://www.python.org/ možete preuzeti, najnoviju verziju Python-a
pripremljenog za Vaš operativni sustav. Nakon instalacije pokrenite IDLE (Python GUI) i
pojavit će Vam se prozor kao na slici (Slika 1. Python Shell).
Slika 1. Python Shell
Python IDLE je vrlo sposobno integrirano razvojno okruženje, kojim ćemo se poslužiti u
početku korištenja Python-a.
1.2. Print - izlaz
Upišemo li u IDLE redom ove jednostavne linije koda, dobivamo:
>>>print ("Pozdrav!")
Pozdrav!
>>>print (2+3)
5
>>>print ("2 + 3")
2 + 3
Naredba za ispis je print(). Unutar zagrada upišemo što želimo da nam program ispiše.
Koristimo li navodnike, govorimo računalu da ispiše točno to što smo napisali. Kao npr. Kad
smo upisali 2+3 bez navodnika, računalo je ispisalo aritmetički zbroj zadanih brojeva (2 i 3)
dok je u drugom slučaju kad smo koristili navodnike ispisalo 2+3.
Pokušamo li napisat
>>>print(Pozdrav!)
4
PMG - Python
Računalo javlja grešku (SyntaxError: invalid syntax), Problem je u tome što smo
koristili znak ! koji ne možemo koristiti za naziv varijabli, i bez znaka ! računalo bi javilo
grešku jer bi na riječ Pozdrav gledalo kao na varijablu koja nije deklarirana. Drugim riječima
Python na vrijednost unutar zagrada koje nisu unutar navodnika gleda kao matematičke
vrijednosti.
Želimo li ispisati više vrijednosti, iste odvajamo zarezom:
>>>print ("Zbroj 10 i 10 je:", 10 +10)
Zbroj 10 i 10 je: 20
Ili
>>>print ("Zbroj 10 i 10 je:", "10 +10")
Zbroj 10 i 10 je: 10 +10
1.2.1. Još malo znakovnih nizova (string)
Posebni znak
\n
\t
\\
\'
\''
Opis djelovanja
Prijelaz u novi red
Tabulator
Ispisati lijevo ukošenu crtu
Ispisati jednostruki navodnik
Ispisati dvostruki navodnik
Ili Želim li ispisati više redova:
1.2.2. Formatirani ispis
Želimo li ispisati više varijabli popraćenih odgovarajućim tekstom koristim print funkciju na
sljedeći način:
Uočimo da unutra zagrada možemo izostaviti brojeve ako se podrazumijeva da podaci idu
ulaznim redom.
Ponekad ćemo htjeti pobliže označiti koji tip podataka ispisujemo i u tom ćemo slučaju
unutar vitičastih zagrada iza rednog broja varijable napisati dvotočku i nakon toga oznaku
tipa
5
PMG - Python
d – ako ispisujemo cijeli broj,
f – ako ispisujemo realni broj,
s – ako ispisujemo string
1.3. Operator pridruživanja
Jedan od najosnovnijih operatora svih programskih jezika je operator pridruživanja. Njime
dodjeljujemo vrijednost varijabli da bi istu kasnije mogli koristiti.
#Kreiramo varijablu x i pridružujemo joj vrijednost 10
x=10
#Ispisujemo vrijednost pohranjenu u varijabli x
print (x)
#Ova linija koda ispisuje znak x a ne vrijednost u x
print ("x")
#Ispisuje: "x = 10"
print("x =", x)
U gornjem primjeru uočavamo razliku između ispisa x kad se nalazi unutar navodnika i
izvan njih. Ako se x nalazi unutar navodnika računalo ispisuje znak x, a ako je zadan samo x
bez navodnika računalo će ispisati vrijednost pohranjenu u varijabli x.
Pridruživanje vrijednosti varijabli je obrnuto od algebarskih jednadžbi. Sa lijeve strane znaka
jednakosti se nalazi varijabla dok je desno izraz. Pogledajte sljedeći primjer koji je potpuno
drugačiji od nama poznatih matematičkih jednadžbi. U ovom primjeru varijabli x
pridružujemo vrijednost varijable x (nje same) uvećane za 1.
x = x +1
Zadatak 1:
Što ispisuje sljedeći program?
x = 5
x = x + 1
print (x)
Kraći zapis x = x + 1 je:
x += 1
i u ovom slučaju varijabli x pridružujemo vrijednost nje same uvećane za 1.
6
PMG - Python
1.4. Varijable
Praksa je da varijable u Python-u započinjemo malim slovom, veliko slovo i podvlaka su
rezervirani za neke specijalne slučajeve. Nakon prvog malog slova varijabla može sadržavati
velika i mala slova kao i brojeve i podvlake. Varijable ne smiju sadržavati razmake!
Varijable su osjetljive na velika i mala slova, tako u sljedećem primjeru program će ispisati 6
umjesto pet, jer smo definirali dvije različite varijable.
x = 6
X = 5
print(x)
1.5. Operatori
Za složenije matematičke operacije možemo koristiti sljedeće operatore:
Tabela 1:
Operator
+
*
/
//
**
%
Operacija
Zbrajanje
Oduzimanje
Množenje
Dijeljenje
Cjelobrojno dijeljenje
Eksponent
Modul
Primjer
a=3+2
a=3-2
a=3*2
a= 3/2
a=3//2
a=3**2
a= 3%2
I u Python-u vrijede sva pravila kao i u matematici, pa tako sljedeći primjer neće dati
ispravnu vrijednost srednje vrijednosti.
srednja_vrijednost=90+86+100+71+98/5
Provo će se odraditi operator dijeljenja ( 98/5) pa tek onda zbrajanje. Problem možemo
riješiti koristeći zagrade.
srednja_vrijednost=(90+86+100+71+98)/5
Primjer 1:
Koristeći Python napišimo program koji izračunava koliko kilometara može prijeći
automobil sa litrom goriva ako nam je poznato da sa 13,5 l prijeđe 198 km.
k=198/13.5
print(k)
Ovaj kod možemo unaprijediti koristeći varijable. To nam omogućava lakšu izmjenu
parametara bez zadiranja u matematičku jednadžbu.
k=198
l=13.5
k2=k/l
print(k2)
7
PMG - Python
Ovakav je program teško razumljiv, pa je preporučljivo varijablama davati svima razumljiva
imena. Npr:
prijeđeniKilometri = 198
potrošenoLitara = 13.5
kilometaraSaLitrom = prijeđeniKilometri/potrošenoLitara
print(kilometaraSaLitrom)
Program je mnogo korisniji ako je interaktivan tj. ako postoji interakcija između programa i
korisnika na način da program traži korisnika da unese broj prijeđenih kilometara i količinu
potrošenog goriva. Za takav način rada koristimo naredbu za unos podataka (input).
#Skor pa radi :-)
prijeđeniKilometri = input(" Unesite prijeđene kilometre :")
potrošenoLitara = input(" Unesite potrošeno gorivo :")
kilometaraSaLitrom = prijeđeniKilometri/potrošenoLitara
print(kilometaraSaLitrom)
Ako pokušamo pokrenuti ovaj program izbacit će nam grešku: (TypeError:
unsupported operand type(s) for /: 'str' and 'str')
Zašto je došlo do pogreške demonstrirat ćemo malom izmjenom programa:
prijeđeniKilometri = input(" Unesite prijeđene kilometre :")
potrošenoLitara = input(" Unesite potrošeno gorivo :")
x = prijeđeniKilometri + potrošenoLitara
print(" Zbroj kilometara i litara je:", x)
Pokrenemo li gornji program dobiti ćemo:
Unesite prijeđene kilometre:100
Unesite potrošeno gorivo:10
Zbroj kilometara i litara je: 10010
Program nije zbrojio brojeve, on je samo stavio jedan iza drugog! Zašto se to dogodilo?
Program ne zna da smo mi unijeli brojeve i kao takav, on na unos gleda kao na tekst. Mogli
smo unijeti i „Pero“ i „Ivo“, te bi program ispisao: PeroIvo.
Da bi računalo znalo da ulaze brojevi, moramo mu to reći. To radimo pomoću funkcija
int() ili float(). Int koristimo za cijele brojeve, dok za decimalne koristimo float.
prijeđeniKilometri = float(input(" Unesite prijeđene kilometre :"))
potrošenoLitara = float(input(" Unesite potrošeno gorivo :"))
kilometaraSaLitrom = prijeđeniKilometri/potrošenoLitara
print(kilometaraSaLitrom)
1.6. Ponavljanje
1. Napiši liniju koda koja ispisuje tvoje ime.
2. Kako se dodaje komentar u program?
3. Što će ispisati sljedeća linija koda?
print(2/3)
8
PMG - Python
4. Napiši liniju koda koja stvara varijablu „pi“ i pridružuje joj odgovarajuću vrijednost.
5. Napišite liniju koda koja traži korisnika da unese duljinu stranice kvadrata i rezultat
pridružuje varijabli. Budi siguran da je primljena vrijednost pohranjena kao cijeli broj.
6. Napiši program koji ispisuje površinu kvadrata koristeći varijablu iz zadatka 5.
7. Napravi sve isto kao u pitanjima 5 i 6 ali za površinu elipse
s = πab
8. Napravi sve isto kao u pitanjima 5 i 6 ali koristeći formulu za izračun tlaka idealnog
plina:
p=
nRT
V
gdje je n-broj molova, R opća plinska konstanta (8,3144), T termodinamička
temperatura, V volumen plina.
9
PMG - Python
2. Grananje toka naredbom if
Da bi računalo bilo sposobno donositi ikakve odluke, potrebna su grananja. Prilikom
grananja računalo se pita, dali je ili nije zadovoljen uvjet iza ključne riječi if!?
if I to je ključ za
donošenje bilo kakve odluke.
2.1. Osnovna usporedba
Ako je vrijednost izraza iza riječi if logička istina (true), izvodi se blok naredbi koje slijede iza
izraza. U protivnom taj
aj blok se preskače i izvođenje se nastavlja od prve naredbe iza bloka.
Slika 2: jednostavno grananje
Budući da je a manje od b ispisat će se prvi blok naredbe, no što bi se ispisalo da je b bilo
jednako 5? U tom slučaju niti jedan
jeda uvjet nije zadovoljen te program ne bi ispisao ništa.
Mogli smo napisati program kojim provjeravamo dali je a veći ili jednak b ili obrnuto.
Slika 3.
Ili smo se mogli pitat dali su brojevi jednaki (==) ili možda različiti (!=):
(!=)
NAPOMENA: vrlo česta pogrješka je korištenje znaka = umjesto ==, ako želimo usporediti
dali je nešto jednako, koristimo ==, a za pridruživanje vrijednosti znak =.
10
PMG - Python
Slika 4: najčešća pogrješka
2.2. I – ILI
Naredbom if možemo provjeriti i više logičkih izraza (uvjeta), prema pravilima logičke
(Booleove) algebre.
Slika 5: Logičko I i ILI
2.3. Logičke (Booleove) varijable
Python u potpunosti podržava logičke varijable, koje mogu biti istina (True) ili laž (False).
Takve varijable možemo koristiti i prilikom grananja. Ako za grananje koristimo logičke
izraze nisu nam potrebni logički operatori.
Također varijabli možemo dodijeliti rezultat usporedbe, tako u donjem kodu varijabli
pridružujemo vrijednost usporedbe varijable a i b, ako su jednake c će biti istina dok u
suprotnom c je laž.
11
PMG - Python
2.4. Else i Else If
Donji program traži od korisnika da unese vrijednost temperature, te ispisuje dali je vani
vruće.
Želimo li da se ispiše „Vani nije vruće“ u slučaju da unesena temperatura manja ili jednaka
30, gornje grananje proširimo novim blokom naredbi koji se izvršava ako izraz daje logičku
neistinu. Kao u primjeru:
Moguće je i nadovezati nekoliko blokova if naredbi. U Python-u je to naredba elif.
Gornji program ne priječi korisnika da unese da je temperatura zraka 100 °C, pa ga je
potrebno još malo nadograditi.
12
PMG - Python
2.5. Usporedba tekstova
Pokušamo li u gornjem programu umjesto „Miro“ unijeti „miro“, uvjet neće biti zadovoljen.
Razlog tomu je što Python razlikuje velika i mala slova. To se možemo poslužiti malim
trikom, da sva unesena slova pretvorimo u mala.
2.6. Ponavljanje
1. Odredite vrijednost za svaki od ponuđenih izraza i provjerite ispravnost svojih
odgovora pomoću Python-a.
a. True and not False
b. True or True and False
c. Not True or not False
d. True and not 0
e. 52 < 52.3
f. 1 + 32 < 32.3
2. Opiši kako radi and operacija u Pythonu.
3. Napišite program kojim ćete ispitati dali je upisani broj paran ili neparan i shodno
tome ispisati poruku.
4. Mještani su odlučili uz rijeku koja prolazi njihovim mjestom postaviti niz
naizmjenično plavih i crvenih klupa s tim da prva klupa u nizu bude crvena.
13
PMG - Python
Izračunali su da trebaju postaviti točno n klupa. Napiši program koji će za učitani
broj klupa n ispisati koliko mu treba crvenih a koliko plavih klupa.
5. Napišite program koji za učitani cijeli broj provjerava da li pripada skupu prostih
brojeva. Ako pripada program će ispisati „Uneseni broj je prosti broj“, a u suprotnom
ispisuje uneseni broj.
14
PMG - Python
3. Petlje
3.1. FOR
Donji program koristi for petlju za ispis riječi „Hi“ 10 puta, tj. deset puta se poziva funkcija
print().
I pritom vidimo da je riječ ''Hi'' ispisana svaki put u novi red. To je zato što funkcija
print() unaprijed ima postavljenu vrijednost end='\n', tj. funkcija print() na
kraju ispisuje ono što je zadano sa parametrom end.
Vidimo da umjesto prelaska u novi red, u ovom slučaju funkcija print() je sve ispisala u
jednom redu.
Kombinacijom gornja dva ispisa možemo ispisati prvih sto brojeva tako da u svakom redu
ispišemo po deset brojeva.
15
PMG - Python
A može to i ljepše:
Što smo dobili sa '{:3d}'?
Probajte predvidjeti što će ispisati sljedeći programi:
16
PMG - Python
4. Moduli
Do sad smo koristili ugrađene funkcije kao što su print() i input() njih i njima slične
možemo koristiti čim pokrenemo Python – one su ugrađene u njegov osnovni kostur.
Međutim za Python posjeduje i mnoge druge funkcije. Njih možemo pronaći u podmapi
osnovne mape Python-a.
Želimo li matematičke funkcije kao npr. sin(), cos(), log() i slično, koristimo modul math.
5. Funkcije
Funkcije su važan alat za pisanje složenih programa. O njima možete razmišljat kao o malim
programima koji se nalaze unutar glavnog programa.
Dva su osnovna razloga za korištenje funkcija. Prvi, one olakšavaju razumijevanje koda i čine
ga lakšim za čitanje. Drugi, omogućavaju višestruko pozivanje istog koda.
5.1. Osnovna svojstva funkcije
Svaka funkcija ima svoje jedinstveno ime. Koristeći to ime u drugim dijelovima programa
izvršavamo dio koda koji je naveden u funkciji. Kažemo da smo u tom trenutku „pozvali
funkciju“. Ona može biti pozvan od bilo koje druge funkcije.
Funkcija je također neovisna što znači da izvođenje njezinog koda uopće ne ovisi o drugim
dijelovima programa.
Funkcija može vratiti vrijednost pozivajućem programu
5.2. Definicija funkcije
Opći oblik:
def ime_funkcije(argumenti):
blok naredbi
return izraz
Def – ključna riječ kojom u Python-u definiramo novu funkciju, nakon koje dolazi ime
funkcije. Unutar zagrada mogu (a i ne moraju) se nalaziti argumenti koje prosljeđujemo
funkciji. Naredba return služi za vraćanje u nadređenu funkciju ili vraća rezultat izvršavanja
u nadređenu funkciju.
17
PMG - Python
5.3. Rekurzije
Jedna od osnovnih algoritamskih tehnika u kojem potprogram neposredno ili putem drugog
potprogama poziva samog sebe. To se naziva rekurzivni poziv funkcije ili kraće rekurzija.
Karakterizira je jednostavan i efikasan zapis, ali skriva kao što ćemo vidjeti mnoge
nedostatke. Naravno da pozivanje samog sebe ne može ići u nedogled, jer se proces
izvršavanja rekurzije nikad ne bi zaustavio. Mora postojati uvjet prekida, kada potprogram
danu operaciju izvršava bez pozivanja samog sebe. Potrebu postojanja uvjeta prekida
pojasnio bih pitanjem? Zašto se dug napravljen kreditnom karticom, ne može platiti istom
kreditnom karticom? (pitanje prof. sa FER-a kad objašnjavaju nužnost postojanja uvjeta
prekida).
Neki programski jezici ne podržavaju rekurziju. Rekurzivni programi su kraći, ali je
izvođenje programa dulje. Dakle, ako se njome rukuje pravilno, rekurzija može biti vrlo
djelotvorno sredstvo pri rješavanju algoritma. S druge strane, ukoliko se njome nepropisno
rukuje može biti vrlo opasna....
Prvi korak pri potpunoj kontroli rekurzije je razumijevanje njezina rada!
Cilj rekurzije je razbijanje složenog na jednostavnije probleme. Karakteristično je što su ti
jednostavniji problemi potpuno istog tipa kao polazni problem (poput odraza u ogledalu zamislite da se nalazite između dva ogledala, okrenuta jedno nasuprot drugom. Tada biste
vidjeli mnogo svojih odraza, jednog iza drugoga, svaki bi bio nešto manji od prethodnog). U
jednom trenutku dobiveni problem je toliko jednostavan da je njegovo rješenje očito, te ono
zatim dovodi do rješenja polaznog problema.
Kako rade rekurzivni programi?
Koristi se struktura podataka nazvana stog (eng. stack) za pohranjivanje varijabli rekurzivne
funkcije. U njemu se posljednji pohranjeni podatak prvi uzima u obradu (LIFO - Last In First
Out). Sada se proces izvršavanja preusmjerava na potprogram koji je pozvan (ta ista
funkcija!), dok se sve varijable prije pozivanja spremaju na stog, da bi se nakon njegovog
završetka izvršavanje nastavilo od mjesta s kojeg je pozvan, te vraćanja varijabli sa stoga.
Kojeg završetka? Kada se ispuni uvjet prekida pozivanja funkcije. Naravno da ovakav način
rada troši dodatno vrijeme i memoriju na spremanje i očitavanje vrijednosti varijabli, što ima
za posljedicu sporije rješavanje problema. Mora se ovdje napomenuti da je dokazano da
svako rekurzivno rješenje se može napisati kao nerekurzivno, pa je preporučljivo koristiti
rekurziju samo u slučaju kada se nerekurzivni pristup teško ostvaruje.
Primjer 1: Računanje produkta prvih n prirodnih brojeva, tzv. "n faktorijela", u oznaci n!, n je
prirodan broj.
Po definiciji je 0! = 1 i 1! = 1
Uočimo da vrijedi n! = n* (n-1)! Dakle, rekurzivna funkcija bi glasila:
18
PMG - Python
Primjer: n=4!
k = fakt (4);
= 4 * fakt (3);
= 3 * fakt (2);
= 2 * fakt (1);
=1
Zadaci:
1. Napisati rekurzivnu funkciju koja će izračunati zbroj prvih n prirodnih brojeva.
2. Napisati rekurzivnu funkciju za potenciranje prirodnog broja prirodnim brojem.
3. Napisati rekurzivnu funkciju za pretvaranje prirodnog broja u binarni brojevni
brojevn sustav.
4. Napisati rekurzivnu funkciju koja će izračunati umnožak parnih prirodnih brojeva do
prirodnog broja n.
5. Napisati rekurzivnu funkciju koja će izračunati zbroj prvih n neparnih prirodnih brojeva.
6. Napisati rekurzivnu funkciju koja će izračunavati
izračunavati umnožak znamenki prirodnog broja.
19
PMG - Python
6. Liste
U liste se smještaju podaci koji su na neki način srodni kako bi se lakše ili jednostavnije
postupalo s njima.
U nekim drugim programskim jezicima takva sljedna struktura naziva se poretkom, poljem
ili nizom (array) pri čemu veličina poretka mora biti unaprijed poznata i svi elementi
moraju biti istog tipa.
Suprotno tomu, u Pythonu elementi liste mogu sadržavati različite tipove podataka i mogu
se dinamički (tijekom uporabe) povećavati ili smanjivati.
Liste se mogu zadavati na različite načine. Najjednostavniji je način stvaranje liste nabrajanje
elemenata liste odvojenih zarezom i to unutar uglatih zagrada. Nakon toga možemo
elemente liste dohvaćati tako da uz ime liste u uglatim zagradama napišemo indeks
elementa.
Pristup pojedinom članu liste:
20
PMG - Python
Program može pohranjivat i stringove unutar liste:
Ili čak druge liste:
Želimo li dodavati jedan po jedan član u listu možemo kreirati praznu listu i zatim koristiti
funkciju append.
Primjer: Lista kreirana unosom korisnika:
Zadatak: Ispišite listu iz gornje primjera.
Primjer: Zbrajanje vrijednosti iz liste:
U gornjem primjeru očito je da nam funkcija len(ime_liste) vraća dužinu liste, tj. broj
elemenata unutar liste.
21
PMG - Python
Zadatak: Kreirajte listu brojeva i uvećajte sve vrijednosti unutar liste za duplo.
Još malo o metodama listi
Operatori za liste
Za liste vrijede isti operatori: +, *, in, not in kao i za stringove:
Operator
+
*
in
not in
Opis djelovanja
nadovezivanje
uvišestručenje, jedan operand je tipa int
element je sadržan u listi
element nije sadržan u listi
Evo nekoliko primjera:
Zadatak:
Napišite program koji će ispisivati najveći i najmanji element liste od 20 elemenata, čiji su
elementi nasumično generirani prirodni brojevi do 100. ( u programu je potrebno napisati
funkciju koja će vraćati najveći i najmanji element generirane liste, ne koristeći ugrađene
funkcije).
22
PMG - Python
Ugrađene funkcije nad listama:
Funkcija
len(L)
min(L)
max(L)
Evo nekoliko primjera uporabe tih funkcija:
Opis djelovanja
vraća duljinu liste
vraća najmanju vrijednost elementa liste
vraća najveću vrijednost elementa liste