Електротехничка школа „Никола Тесла“ Панчево
Предмет
Програмирање мрежних сервиса
Смер
Техничар за администрирање рачунарских мрежа
Разред
III
Наставник
Никола Ђорђевић
Лекција

Функције у Пајтону

Интерактивна лекција за све који нису били на часу или желе да утврде градиво: шта је функција, како се декларише и позива, позив у петљи, функција која тражи унос од корисника и функције са параметрима. Сваки корак има вежбе које пишеш и покрећеш директно на овој страници.

Пајтон још није учитан Решено 0/0
Како да користиш ову страницу

Свака вежба има поље за код. Дугме Покрени (или Ctrl + Enter) извршава твој код и приказује шта програм исписује. Дугме Провери тестира решење, и то не само на примеру који видиш, већ и на скривеном, па решење мора да ради за било коју вредност. Помоћ даје наговештај, а Решење показује тачан код. Пробај прво сам.

Пајтон се учитава у прегледачу при отварању странице (потребан је интернет, први пут траје неколико секунди). Напредак се чува у овом прегледачу.

01

Шта је функција

Функција је део кода који има своје име и обавља један задатак. Напишемо је једном, а онда је позивамо по имену кад год нам затреба, колико год пута хоћемо.

Функције већ знаш, само их ниси ти писао: print(), input(), len(), float(), range(). Неко их је написао уместо нас, а ми их само позивамо. Сада учимо да правимо своје функције.

Не понављамо код

Ако исти посао треба урадити пет пута, не пишемо исти код пет пута, већ пет пута позовемо функцију.

Измена на једном месту

Ако треба нешто да се промени, мењамо само функцију, а сва места која је позивају аутоматски добијају измену.

Прегледан програм

Програм је подељен на делове са смисленим именима (poruka, kvadrat), па се лакше чита.

Поређење из животаФункција је као дугме на даљинском. Неко је једном испрограмирао шта се дешава кад притиснеш „појачај звук“, а ти само притиснеш дугме кад год хоћеш.
02

Декларација и позив функције

Функција се декларише (дефинише) речју def. Први ред функције има четири обавезна дела:

defкључна реч: „дефинишем функцију“
porukaназив функције
()заграде за аргументе (овде празне)
:двотачка

Испод првог реда долази тело функције: наредбе које функција извршава. Сви редови тела су увучени 4 размака. По томе Пајтон зна шта припада функцији, исто као код for и if.

#Funkcija
def poruka():
    print("Dobrodosli u ETS Nikola Tesla Pancevo")

#Algoritam
poruka()

Функцију позивамо тако што напишемо њен назив и заграде: poruka(). Тек тада се извршава код у њој.

Дефинисање није исто што и извршавањеРед def poruka(): само каже Пајтону: „запамти да постоји функција poruka и шта ради“. Ако функцију никад не позовеш, програм неће исписати ништа. И још нешто: функција мора да буде дефинисана пре првог позива. Ако је позовеш изнад def, добијаш грешку NameError.
Правило за наше задаткеИзнад пишемо функције (коментар #Funkcija), а испод њих део програма који их позива (коментар #Algoritam). Назив функције пишемо малим латиничним словима, без размака, и бирамо га тако да каже шта функција ради.
03

Задатак 1: порука пет пута

04

Позивање функције у петљи

Пет истих редова poruka() раде, али шта ако поруку треба приказати 100 пута? Ту нам помаже for петља коју смо већ радили: тело петље се понавља онолико пута колико кажемо у range().

for i in range(5):
    poruka()      # poziva se 5 puta: za i = 0, 1, 2, 3, 4

Позив poruka() је увучен, па припада петљи и понавља се. Променљиву i овде не користимо. Она само броји кругове петље.

05

Задатак 2: исто, али петљом

06

Функција која тражи унос: input()

У тело функције можемо да ставимо било шта што смо до сада учили: input(), рачунање, if, петље. Функција испод пита корисника за име, па га исписује.

def ime():
    unos = input("Unesi svoje ime: ")
    print(unos)

ime()

Променљиве унутар функције

Променљива која настане у функцији (овде unos) постоји само док се функција извршава. Кад функција заврши, та променљива нестаје, па изван функције не можемо да је користимо. Покрени код испод и погледај грешку.

07

Параметри и аргументи

Функција poruka() увек ради потпуно исто. Често нам треба функција која ради исти посао, али са различитим вредностима: на пример, рачуна обим и површину квадрата за било коју страницу. Зато у заграде пишемо параметар.

defкључна реч
kvadratназив
(
stranicaпараметар: променљива која прима вредност
)
:
ПојамГде се налазиПример
Параметару заградама код def; име променљивеdef kvadrat(stranica):
Аргументу заградама при позиву; вредност која се шаљеkvadrat(4)

При позиву kvadrat(4) параметар stranica добија вредност 4, као да смо на почетку функције написали stranica = 4. При позиву kvadrat(5) иста функција ради са stranica = 5.

Прати извршавање корак по корак

Изабери вредности за два позива, па иди кораком „Напред“. Обрати пажњу на то где програм скаче при позиву функције и шта се дешава са променљивама кад функција заврши.

Променљиве унутар функције

Испис програма

Подсетник: степеновање и float()stranica ** 2 значи „stranica на квадрат“, исто као stranica * stranica. А пошто input() увек враћа стринг, унету страницу претварамо у број са float(), који прихвата и децималне бројеве (2.5). Зато ће у испису писати 16.0, а не 16.
08

Задатак 4: обим и површина квадрата

Трик са часа: привремено „искључивање“ кодаУ решењу су пробни позиви kvadrat(4), kvadrat(5) и kvadrat(6) стављени између """ и """. Тако постају коментар и не извршавају се. То је згодно док тестираш: пробне позиве не бришеш, само их искључиш, а програм ради са унетом вредношћу.
09

Функција са више параметара

Функција може да има више параметара, одвојених зарезом. Правоугаонику требају две странице, па функција има два параметра:

def pravougaonik(a, b):
    obim = 2 * (a + b)
    povrsina = a * b
    print(f"Obim je {obim}")
    print(f"Povrsina je {povrsina}")

pravougaonik(3, 5)   # a = 3, b = 5
  • Аргументи се додељују параметрима по редоследу: први аргумент први параметар, други други.
  • Број аргумената у позиву мора да буде једнак броју параметара. Позив pravougaonik(3) даје грешку TypeError.
  • У решењу са часа и променљиве изван функције зову се a и b. То је случајност, а не правило: позив би радио исто и са pravougaonik(x, y) или pravougaonik(3, 5).
10

Задатак 5: обим и површина правоугаоника

11

Преглед: шта смо научили

ШтаЗаписПример
Декларација функцијеdef naziv():def poruka():
Тело функцијередови увучени 4 размака print("Dobrodosli")
Позив функцијеnaziv()poruka()
Позив више путаfor i in range(n):for i in range(5): poruka()
Функција са параметромdef naziv(parametar):def kvadrat(stranica):
Позив са аргументомnaziv(vrednost)kvadrat(4), kvadrat(a)
Више параметараdef naziv(p1, p2):pravougaonik(3, 5)
Степеновањеx ** nstranica ** 2
Унос децималног бројаfloat(input(...))a = float(input("Unesite stranicu:"))

Честе грешке

ГрешкаШта се десиПоправка
Функција дефинисана, а није позванапрограм не испише ништаиспод дефиниције додај naziv()
Позив без заграда: porukaфункција се не извршаваувек пиши заграде: poruka()
Нема двотачке иза def poruka()SyntaxErrordef poruka():
Тело није увученоIndentationErrorувуци редове тела 4 размака
Позив изнад defNameErrorпрво дефиниши, па позови
Погрешан број аргуменатаTypeErrorонолико вредности колико има параметара
Променљива из функције коришћена изван њеNameErrorкористи је само унутар функције
Пет ствари које треба запамтити 1. Функција се декларише са def naziv():, а тело јој је увучено.
2. def само памти функцију; код у њој се извршава тек на позив naziv().
3. Функција мора бити дефинисана пре него што је позовемо.
4. Параметар је променљива у заградама код def; аргумент је вредност коју шаљемо при позиву.
5. Аргументи иду параметрима по редоследу, и мора их бити исто толико.
12

Провера знања

Без покретања кода: шта ће се десити?