Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Programiranje 1
Funkcije,Moduli
Univerzitet u Beogradu
Elektrotehnički fakultet
Sadržaj
Funkcije
⚫ Kreiranje funkcija
⚫ Pozivi funkcija
⚫ Parametri i argumenti
⚫ Prosleđivanje parametara
Moduli
Lokalne i globalne promenljive
Ugnježdene funkcije
Lambda funkcija
ETF Beograd::Programiranje 1 2/30
Kreiranje funkcija
Funkcija se definiše korišćenjem rezervisane reči def nakon koje sledi ime funkcije
Funkciji se mogu proslediti podaci, tzv. parametri funkcije
Funkcija može vraćati podatke, tj. može imati povratnu vrednost (rezervisana reč return)
# funkcija unos nema parametre, ali ima navedenu povratnu vrednost
def unos():
return input("Unesite tekst: ")
# funkcija ispis ima jedan parametar t, ali nema navedenu povratnu vrednost
def ispis(t):
print(t)
ETF Beograd::Programiranje 1 3/30
Pozivi funkcija
Funkcija se na izvšavanje poziva preko definisanog imena
Funkciji se prilikom pozivanja prosleđuju i podaci, tj. argumenti funkcije
Ukoliko povratna vrednost nije navedena,podrazmevana povratna vrednost je None
Povratna vrednost funkcije se može koristiti nakon poziva funkcije
tekst = unos() # učitava tekst sa standardnog ulaza u promenljivu tekst
ispis(tekst) # ispisuje promenljivu tekst na standardni izlaz
ETF Beograd::Programiranje 1 4/30
Parametri i argumenti (1)
Proizvoljan broj parametara, odvajaju se zarezom
Pri pozivu je bitan redosled argumenata
Podrazumevana vrednost parametra:
⚫ Koristi se ako se funkcija pozove bez argumenta
def podrazumevaniParametri(godine = 19):
print("Imam {} godina.".format(godine))
podrazumevaniParametri(20) # Imam 20 godina.
podrazumevaniParametri() # Imam 19 godina.
def viseParametara(ime, prezime):
print("Moje ime je {} {}.".format(ime, prezime))
viseParametara("Jovan", "Jovanović") # Moje ime je Jovan Jovanović.
ETF Beograd::Programiranje 1 5/30
Parametri i argumenti (2)
Proizvoljan broj argumenata:
⚫ Za pakovanje se koristi operator *
Imenovani parametri:
⚫ Pri pozivu nije bitan redosled argumenata
def imenovaniParametri(grad, drzava):
print("Studiram u {}u, {}.".format(grad, drzava))
imenovaniParametri(drzava = "Srbija", grad = "Beograd") # Studiram u Beogradu, Srbija.
imenovaniParametri(grad = "Niš", drzava = "Srbija") # Studiram u Nišu, Srbija.
def proivoljniArgumenti(*kolokvijumi):
print("Spremio sam {} kolokvijuma.".format(len(kolokvijumi)))
proivoljniArgumenti("P1", "M1") # Spremio sam 2 kolokvijuma.
proivoljniArgumenti("P1", "PP1", "OET", "PKR") # Spremio sam 4 kolokvijuma.
ETF Beograd::Programiranje 1 6/30
Tipovi podataka:
⚫ Promenljivi (npr. liste) i nepromenljivi (npr. celi brojevi)
Prosleđivanje parametara
def funkcija(lista):
lista.append(2)
lista.insert(0, 3)
lista[0] = 0
return l is lista
l = [1]
print(funkcija(l)) # True
print(l) # [0, 1, 2]
def funkcija(broj):
broj += 1
return b is not broj
b = 1
print(funkcija(b)) # True
print(b) # 1
ETF Beograd::Programiranje 1 7/30
Na programskom jeziku Python sastaviti programkoji izračunava aritmetičku i geometrijsku sredinuzadate liste brojeva. Izračunavanje aritmetičke igeometrijske sredine liste realizovati kao zasebnefunkcije:
Aritmetička sredina:1
𝑛σ𝑖=1𝑛 𝑎𝑖
Geometrijska sredina: ς𝑖=1𝑛 𝑎𝑖
1
𝑛
1. zadatak (1/3)
ETF Beograd::Programiranje 1 8/30
1. zadatak (2/3)
def aritmeticka_sredina(a):
s = 0
for x in a:
s += x
return s/len(a)
def geometrijska_sredina(a):
p = 1
for x in a:
p *= x
return p**(1/len(a))
a = []
for i in range(int(input("N: "))):
a.append(int(input("A[{}]: ".format(i))))
print("Aritmetička sredina: ", aritmeticka_sredina(a))
print("Geometrijska sredina: ", geometrijska_sredina(a))
ETF Beograd::Programiranje 1 9/30
1. zadatak (3/3)
import numpy
def aritmeticka_sredina(a):
return sum(a)/len(a)
def geometrijska_sredina(a):
return numpy.prod(a)**(1/len(a))
Realizacija korišćenjem postojećih funkcija:
Šta znači rezervisana reč import? Šta su moduli ikako se koriste?
ETF Beograd::Programiranje 1 10/30
Moduli
Rezervisane reči import, as, from:
⚫ Uvoženje modula
⚫ Dodeljivanje alternativnog imena
⚫ Uvoženje dela modula
Mogu se koristiti ugrađeni moduli (npr. math)
import numpy
import math as m
from math import pi
lista = [1, 2, 3, 4, 5]
a = numpy.prod(lista) + 1 # 121
b = m.sqrt(a) # 11.0
c = pi # 3.141592653589793
t = m.trunc
d = t(c) # 3
e = b * d # 33
ETF Beograd::Programiranje 1 11/30
Na programskom jeziku Python sastaviti programkoji za unetu ivicu kocke 𝑎 računa poluprečnik ipovršinu opisane sfere.
2. zadatak
import math
def povrsina_sfere(r):
return 4 * math.pi * r**2
a = float(input("a: "))
o = a * math.sqrt(3) / 2
P = povrsina_sfere(o)
print("Poluprečnik opisane sfere: {:.2f}".format(o))
print("Površina opisane sfere: {:.2f}".format(P))
ETF Beograd::Programiranje 1 12/30
Lokalne i globalne promenljive
def funkcija():
print(a) # 1
a = 1
funkcija()
print(a) # 1
def funkcija():
a = 2
print(a) # 2
funkcija()
print(a) # NameError: name 'a' is not defined
def funkcija():
a = 2
print(a) # 2
a = 1
funkcija()
print(a) # 1
def funkcija():
global a
a = 2
print(a) # 2
a = 1
funkcija()
print(a) # 2
ETF Beograd::Programiranje 1 13/30
Ugnježdene funkcije
def funkcija():
def ugnjezdena():
a = 3
print(a) # 3
ugnjezdena()
print(a) # NameError: name 'a' is not defined
def funkcija():
a = 2
def ugnjezdena():
print(a) # 2
ugnjezdena()
print(a) # 2
def funkcija():
a = 2
def ugnjezdena():
a = 3
print(a) # 3
ugnjezdena()
print(a) # 2
def funkcija():
a = 2
def ugnjezdena():
nonlocal a
a = 3
print(a) # 3
ugnjezdena()
print(a) # 3
ETF Beograd::Programiranje 1 14/30
Lambda funkcija
Rezervisana reč lambda
Anonimna funkcija, izračunava jedan izraz
Korisna kod ugrađenih funkcija map() i filter()
def kvadrat(x):
return x**2
print(kvadrat(7)) # 49
k = lambda x: x**2
print(k(9)) # 81
p = lambda a, b, c : a + b * c
print(p(1, 2, 3)) # 7
lista = [1, 2, 3, 4, 5]
a = list(map(lambda x: x**2, lista)) # [1, 4, 9, 16, 25]
b = list(filter(lambda x: x > 2, lista)) # [3, 4, 5]
ETF Beograd::Programiranje 1 15/30
3. zadatak
Koji izraz izračunava sledeća funkcija napisana naprogramskom jeziku Python?
⚫ a) 𝑥 + 𝑦
⚫ b) 𝑥 ∙ 𝑦
⚫ c) 𝑥𝑦
Šta je rekurzija?
def izracunaj(x, y):
if y == 1:
return x
else:
return x + izracunaj(x, y - 1)
ETF Beograd::Programiranje 1 16/30
4. zadatak (1/2)
Na programskom jeziku Python sastaviti funkcijukoja računa faktorijel unetog broja 𝑛. Pretpostavkaje da se unosi nenegativan ceo broj. Zadatak rešiti:
⚫ a) iterativnim postupkom
⚫ b) rekurzijom
⚫ c) korišćenjem ugrađenih modula
def faktorijel_iterativno(n):
p = 1
for i in range(n):
p *= i + 1
return p
ETF Beograd::Programiranje 1 17/30
4. zadatak (2/2)
def faktorijel_rekurzija(n):
if n == 0:
return 1
else:
return n * faktorijel_rekurzija(n - 1)
import math
def faktorijel_math(n):
return math.factorial(n)
Uporediti priložena rešenja po brzini izvršavanja. Koja funkcija se najbrže izvršava? Zašto?
ETF Beograd::Programiranje 1 18/30
5. zadatak (1/5)
Na programskom jeziku Python sastaviti:
⚫ a) Funkciju koja za uneti broj 𝑛 formira listu čiji su elementi brojevi Paskalovog trougla grupisani u liste
⚫ b) Funkciju koja iterativno računa binomni koeficijent
⚫ c) Funkciju koja računa binomni koeficijent po formuli:𝑛𝑘
=𝑛 − 1𝑘 − 1
+𝑛 − 1𝑘
⚫ d) Modivikovanu funkciju a) koja koristi funkciju b) ili c)
⚫ e) Glavni program koji za učitani broj 𝑛 formira Paskalovtrougao, a zatim učitava brojeve u opsegu 𝑥 ∈ ሾ0, ሻ𝑛 i korišćenjem Paskalovog trougla računa 2𝑥. Brojeve učitavati sve dok se ne unose nekorektna vrednost.
ETF Beograd::Programiranje 1 19/30
5. zadatak (2/5)
def pt(n):
spoljasnja = []
for i in range(0, n):
unutrasnja = []
for j in range(0, i + 1):
if j == 0 or j == i:
unutrasnja.append(1)
else:
unutrasnja.append(
spoljasnja[i - 1][j - 1] +
spoljasnja[i - 1][j]
)
spoljasnja.append(unutrasnja)
return spoljasnja
a):
ETF Beograd::Programiranje 1 20/30
5. zadatak (3/5)
b):
def bk_i1(n, k):
deljenik = 1
delilac = 1
for i in range(1, k + 1):
deljenik *= n
delilac *= i
n -= 1
return deljenik // delilac
from math import factorial as faktorijel
def bk_i2(n, k):
return faktorijel(n) / faktorijel(k) * faktorijel(n - k)
ETF Beograd::Programiranje 1 21/30
5. zadatak (4/5)
c) i d):
def bk_r(n, k):
if k == 0 or n == k:
return 1
else:
return bk_r(n - 1, k - 1) + bk_r(n - 1, k)
def pt_bk(n):
spoljasnja = []
for i in range(0, n):
unutrasnja = []
for j in range(0, i + 1):
unutrasnja.append(bk_r(i, j))
spoljasnja.append(unutrasnja)
return spoljasnja
ETF Beograd::Programiranje 1 22/30
5. zadatak (5/5)
e):
n = int(input())
pt = pt_bk(n)
print(pt)
while True:
x = int(input())
if not 0
Pregled
ETF Beograd::Programiranje 1 24/30
Pregled – Funkcije i metode
Ugrađene funkcije:
⚫ sum()
⚫ list()
Funkcije iz modula math:
⚫ sqrt()
⚫ trunc()
⚫ factorial()
Funkcije iz modula NumPy:
⚫ prod()
⚫ map()
⚫ filter()
ETF Beograd::Programiranje 1 25/30
Pregled – Ključne reči
Za rad sa funkcijama:
⚫ def, return
⚫ global, nonlocal
⚫ lambda
Za rad sa modulima:
⚫ import, from, as
ETF Beograd::Programiranje 1 26/30
Pregled – Operatori
Aritmetički operatori
Bitski operatori
Operatori dodele
Relacioni operatori
Logički operatori
Operatori identiteta
⚫ is, is not
ETF Beograd::Programiranje 1 27/30
Pregled – Tipovi podataka
Int
Float
Complex
Boolean
String
List
Tuple
Set
Dict
Numerički tipovi
Logički tip
Kolekcije
ETF Beograd::Programiranje 1 28/30
Literatura – Knjige
M. Kovačević, Osnove programiranja u Pajtonu, Akademska misao, Beograd, 2017.
M. Lutz, Learning python: Powerful object-oriented programming, 5th edition, O'Reilly Media, Inc., 2013.
J. Zelle, Python Programming: An Introduction to Computer Science, 3rd Ed., Franklin, Beedle & Associates, 2016.
D. Beazley, B. K. Jones, Python Cookbook, 3rd edition, O'Reilly Media, 2013.
A. Downey, J. Elkner, C. Meyers, How To Think Like A Computer Scientist: Learning With Python, free e-book
ETF Beograd::Programiranje 1 29/30
Literatura – Online izvori
Python 3 documentation, https://docs.python.org/3/index.html
Learn Python, Basic tutorial, https://www.learnpython.org/
TutorialsPoint, Python tutorial https://www.tutorialspoint.com/python/index.htm
W3Schools, Python tutorial https://www.w3schools.com/python/
GeeksforGeeks, Python programming language https://www.geeksforgeeks.org/python-programming-language/
ETF Beograd::Programiranje 1 30/30
https://docs.python.org/3/index.htmlhttps://www.learnpython.org/https://www.tutorialspoint.com/python/index.htmhttps://www.w3schools.com/python/https://www.geeksforgeeks.org/python-programming-language/