30
Programiranje 1 Funkcije, Moduli Univerzitet u Beogradu Elektrotehnički fakultet

Programiranje 1 Uvod u programski jezik Pythonrti.etf.bg.ac.rs/rti/ir1p1/materijali/vezbe/P1_V3_Python...5. zadatak (1/5) Na programskom jeziku Python sastaviti: a) Funkciju koja za

  • Upload
    others

  • View
    6

  • 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/