eduka-portal · На наредним часовима програмираћемо у ......

79
УЏБЕНИК ЗА 7. РАЗРЕД ОСНОВНЕ ШКОЛЕ Катарина Алексић, Катарина Вељковић, Милош Бајчетић, Дарко Крсмановић EDUKA-PORTAL

Upload: others

Post on 06-Aug-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

УЏБЕНИК ЗА 7. РАЗРЕД ОСНОВНЕ ШКОЛЕ

Катарина Алексић, Катарина Вељковић,Милош Бајчетић, Дарко Крсмановић

EDUKA-PORTAL

Page 2: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

106

РачунаРство3.import pygamepygame.init()prozor = pygame.display.set_mode((400, 400))temena = [(100, 100), (40, 200), (200, 210)]pygame.draw.polygon(prozor,pygame.Color("orange"), temena, 2)pygame.display.update()while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

EDUKA-PORTAL

Page 3: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

107

3.1. Програмски језик Пајтон

Трећа је година како се бавимо програмирањем. Програмирајући у Скречу и Пајтону, искусили смо да рачунари нису чаробне машине. Уверили смо се у то да њиховим понашањем управљају људи – програмери. И ти полако постајеш део те велике заједнице, дела човечанства који уме да користи дигиталне уређаје да би живот учинио лакшим, удобнијим и хуманијим.

Подсећамо те на то да је Пајтон (енгл. Python) текстуални програмски језик чије наредбе представљају комбинације енглеских речи, симбола и бројева. Сматрамо га једноставним и моћним програмским језиком, који чак и почетници са успехом користе.

Пајтон је лако читљив и разумљив. Наредба print("Zdravo!") заиста је блиска природном језику. Ево доказа: за испис поруке Zdravo! на екрану дигиталног уређаја, у програмском језику Пајтон користимо енглеску реч print, која на српском језику значи штампај. Другим речима, ми рачунару наређујемо да одштампа (прикаже) на екрану стринг Zdravo!.

Верујемо да се сећаш да је стринг (ниска) тип података у Пајтону који се састоји од низа слова (великих и малих) и других карактера (цифара, размака,

Програмски језик Пајтон

РачунаРствоОбнОвићемО знање О:

– рачунарским програмима;– типовима података у програмском језику Пајтон;– операторима;– уграђеним функцијама.

% На располагању имаш осам речи: програм, текстуални, програмирање, програмери, визуелни,

наредба, енглеског, природног.

% Изабери неколико одговарајућих речи и допуни текст тако да тврђења буду тачна:

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

и имају правила слична оним која има говорни језик. Наредбе се пишу у специфичној форми језика.

На наредним часовима програмираћемо у Пајтону. Као помоћ при инсталацији програмског језика Пајтон, користи видео-упутство:

bit.ly/Instalacija Pajtona

wEDUKA-PORTAL

Page 4: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

108

интерпункцијских знакова – тачака, запета, упитника, узвичника). Осим стрингова, у шестом разреду радили смо с још два типа података – бројевним (цели (int) и реални (float) бројеви) и логичким (bool – имају вредност тачно (True) или нетачно (False)). Говорили смо и о колекцијама података – листи (lista=[element0, element1, element2,…, elementn]) и скуповима односно сетовима (Ime_Seta = {elementA, elementB,…, elementW}).

Операције са подацима спроводимо користећи операторе.

Оператор Опис

Арит

ме-

тичк

и

+ Сабирање- Одузимање* Множење/ Дељење// Целобројно дељење

% Остатак при целобројном дељењу

Поре

ђењ

а

== Једнако< Мање од> Веће од<= Мање или једнако >= Веће или једнако!= Различито или није једнако

Логи

чки

and Повезује два услова и као резултат враћа Тачно само ако су оба услова испуњена.

or Повезује два услова и као резултат враћа Тачно ако је бар један услов испуњен.

not Поставља се испред услова и као резултат враћа Тачно када услов није задовољен.

Познавање аритметичких оператора, логичких оператора и оператора поређења било нам је неопходно за израду већине програма које смо прошле школске године креирали.

% Попуни табелу тако што ћеш поред података написати њихов тип.

Податак Тип податкаТrue1

"цитологија"1.250.2-900

"citologija"-3.0

boje= ["red", "blue", "green"]boje= {"red", "blue", "green"}

"900"

EDUKA-PORTAL

Page 5: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

109

Радећи с подацима, поред оператора, у шестом разреду користили смо неке од уграђених функција програмског језика Пајтон. Подсећамо те на то да је функција у Пајтону представљала групу наредби које се извршавају само када су позване. Извршавање функције позивамо наводећи њено име. Функцији можемо да проследимо податке – параметре. Као резултат, функција може да врати податке.

Уграђене функције су функције које су нам на располагању чим инсталирамо Пајтон. Неке од најчешће коришћених уграђених функција су:

► max() – враћа максималну (највећу) вредност;► min() – враћа минималну (најмању) вредност;► abs() – враћа апсолутну вредност броја;► len() – враћа број карактера у стрингу, број елемената у листи или сету;► round() – враћа реални број заокружен на најближи цео број;► math.ceil() – враћа реални број заокружен на најмањи цео број већи

или једнак њему;► math.floor() – враћа реални број заокружен на највећи цео број мањи

или једнак њему;► math.sqrt() – враћа квадратни корен;► math.pow() – враћа степеновани број.

% Напиши резултат извршавања следећих наредби:

min(123, 141, 89, 16, 125) ; len("informatika") ; math.sqrt(min(25,10)) ; math.pow(max(5,2),2) ; math.ceil(8.4) ; round(135.5) .

% У шестом разреду користили смо и друге важне уграђене функције.

% Заокружи тачан резултат извршавања наредбе:

Наредба Резултат извршавањаprint(123+456) 579 123456print("123"+"456") 579 123456print(25>=20) Нема резултата. Trueprint(25>=20 and 456<3) Нема резултата. Falseprint(19//4) 5 4print(19 % 4) 3 1

% Упореди своје решење са решењима другарица и другова. Покрени IDLE, унеси горње наредбе и провери тачност решења.

Програмски језик Пајтон

EDUKA-PORTAL

Page 6: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

110

Укратко 2 Функција у Пајтону представља групу наредби које се извршавају само

када су позване. 2 Уграђене функције су функције које су нам на располагању чим

инсталирамо Пајтон. 2 Неке од најчешће коришћених уграђених функција су:

► max() – враћа максималну (највећу) вредност; ► min() – враћа минималну (најмању) вредност; ► abs() – враћа апсолутну вредност броја; ► len() – враћа број карактера у стрингу, број елемената у листи или сету; ► round() – враћа реални број заокружен на најближи цео број; ► math.ceil() – враћа реални број заокружен на најмањи цео број већи

или једнак њему; ► math.floor() – враћа реални број заокружен на највећи цео број мањи

или једнак њему; ► math.sqrt() – враћа квадратни корен; ► math.pow() – враћа степеновани број.

Питања и задаци:

1. Покрени IDLE. Унеси одговарајући запис аритметичког израза и покрени извршавање програма. Попуни табелу:

Аритметички израз Запис у Пајтону Резултат извршавања(25 ∙ 25 – 255) – 525 : 25 (25*25-255)-525/25 349

23 ∙ 9 – 10273 + (23 ∙ 9 – 10)

5 ∙ ( 273 +(23 ∙ 9 – 10))

2. Попуни празна места одговарајућим вредностима (Тачно или Нетачно).7 >= 5-1 > 0

not(8>2) Нетачноnot(2>10)8 == 6+26 != 6

(2==2) or (9>(3!=3) or (9>20))(8>9) and (2>(2>1) and (2>9)) Нетачно

3. Напиши листу уграђених функција и оператора које најчешће користимо у раду с листама. Уз сваку функцију наведи опис вредности коју враћа, а уз сваки оператор опис операција коју изводи. Као литературу користи уџбеник за шести разред.

4. Напиши листу уграђених функција и оператора које најчешће користимо у раду са сетовима. Уз сваку функцију наведи опис вредности коју враћа, а уз сваки оператор опис операција коју изводи. Као литературу користи уџбеник за шести разред.

EDUKA-PORTAL

Page 7: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

111

Предлажемо ти да проучиш садржај интерактивних лекција на порталу Петља. Лекцијама можеш да приступиш скенирањем QR кода:

или преко линка: https://petlja.org/biblioteka/r/kursevi/prirucnik-python.

Осврни се на лекцију ПроĪрамски језик Пајтон и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

1 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Програмски језик Пајтон

EDUKA-PORTAL

Page 8: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

112

3.2. Променљиве

Програмирајући у Скречу и Пајтону, често смо користили променљиве. Један од програма који је садржао променљиве био је квиз за тестирање знања. Квиз је имао више питања, која су се током извршавања програма смењивала. У променљивој одговор чували смо одговор корисника на свако од питања. Није тешко закључити да се током извршавања програма садржај променљиве одговор мењао.

Дакле, променљива је место у меморији рачунара у коме се у једном тренутку времена чува само један податак (број, стринг, вредност Тачно или Нетачно). Током извршавања програма, садржај променљиве најчешће се мења. Када променљивој доделимо нову вредност, претходна се брише. Због тога овај важан концепт у програмирању и називамо – променљива.

Променљиву дефинише програмер. Даје јој име, поштујући следећа правила:

► Име променљиве мора да почне словом;► Било које слово или број може бити коришћено у имену;► Специјални симболи као што су @, -, /, #, !, ?, ... нису дозвољени;► Размак у имену није дозвољен уместо размака често користимо знак _;► Велика и мала слова Пајтон тумачи другачије (Ime и ime су различите

променљиве);► Није дозвољено коришћење резервисаних речи, као што су

print, input и сл.

ОбнОвићемО знање О:

– концепту променљиве;– додели вредности променљивој;– приказивању вредности променљиве.

% Пажљиво прочитај следеће тврдње:♦ Променљиве су места у меморији рачунара у којима се чувају

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

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

♦ Током извршавања програма, иста променљива може да чува различите податке.

% Да ли су ове тврдње тачне? Образложи свој одговор.

EDUKA-PORTAL

Page 9: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

113

% Означи садржај места у меморији рачунара након следећих наредби.

Promenljiva2 = "Zdravo!" Promenljiva3 = 7

% Размисли о томе која ће вредност бити сачувана у променљивој Promenljiva4 након извршавања наредбе

Promenljiva4 = Promenljiva1 + Promenljiva3.

Када желимо да користимо податак сачуван у променљивој, довољно је да наведемо њено име , на пример штампање обима троугла (print(O)).

Концепт променљиве један је од основних концепата у рограмирању. Управо он омогућава да исти програм користи више људи, изнова и изнова. Програмер креира програм користећи имена променљивих, а не конкретне вредности које се у њима налазе.

Другим речима, програмер мора да зна име променљиве и тип податка који се у њој чува (број, стринг, Тачно, Нетачно), а не мора да зна конкретну вредност тог податка.

Додела вредности променљивој

Смештање неког податка у променљиву назива се додела вредности променљивој. Наредба којом променљивој Promenljiva1 додељујемо вредност 5 гласи:

Promenljiva1 = 5

% Означи коректно дефинисана имена променљивих. Odeljenje 7/1 Odeljenje7/1 Odeljenje_Sedmo_Jedan Odeljenje_7/1 7razred1.odeljenje odeljenje7_1

% Образложи свој избор.

Слика 3.2.1. Концепт променљивих

Слика 3.2.2. Додела вредности променљивој Promenljiva1

Променљиве

EDUKA-PORTAL

Page 10: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

114

Пример да програмер не мора да зна конкретне податке сачуване у променљивама, већ само имена променљивих управо је наредба:

Promenljiva4 = Promenljiva1 + Promenljiva3.

Да би извршио ову наредбу, рачунар прочита податак сачуван у променљивој Promenljiva1, затим податак сачуван у променљивој Promenljiva3, након чега их сабере. Збир смешта односно чува у променљивој Promenljiva4.

Програме креирамо за себе, али и за друге људе, пре свега да бисмо олакшали обављање неких послова или обезбедили помоћ при решавању одређених задатака.

Навођењем наредбе input прихватамо унос корисника (број, стринг, вредност Тачно или Нетачно) и смештамо га у одабрану променљиву.

► Наредба која прихвата стринг који корисник унесе и смешта га у променљиву Promenljiva5 има следећи облик:

Promenljiva5 = input("Unesite ime najveće reke koja protiče kroz Srbiju.").

Функционисање ове наредбе изгледа овако:

♦ На екрану дигиталног уређаја корисника појављује се текст Unesite ime najveće reke koja protiče kroz Srbiju.;

♦ Извршавање програма се зауставља када корисник притисне тастер Enter;

♦ Након што корисник унесе неки стринг и притисне тастер Enter, програм наставља да се извршава (у променљиву Promenljiva5 смешта се стринг који је корисник унео).

► Наредба која прихвата цео број који корисник унесе и смешта га у променљиву Promenljiva6 има следећи облик:

Promenljiva6 = int(input("Unesite ceo broj.")).

► Након што корисник унесе неки цео број и притисне тастер Enter, програм наставља да се извршава (у променљиву Promenljiva6 смешта се стринг који је корисник унео).

Слика 3.2.3. Додела вредности променљивама

Promenljiva1, Promenljiva2, Promenljiva3, Promenljiva4

EDUKA-PORTAL

Page 11: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

115

► Наредба која прихвата реални број који корисник унесе и смешта га у променљиву Promenljiva7 има следећи облик:

Promenljiva7 = float(input("Unesite realni broj.")).

► Након што корисник унесе неки реални број и притисне тастер Enter, програм наставља да се извршава (у променљиву Promenljiva7 смешта се стринг који је корисник унео).

Приказивање вредности променљиве

Вредност променљиве исписујемо тако што је позивамо унутар наредбе print. Све текстуалне вредности унутар наредбе print, као и вредности променљиве, треба одвојити запетом.

Анализирај наредбе:

Promenljiva5 = input("Unesite ime najviše planine u Srbiji: ");Promenljiva6 = int(input("Unesite ceo broj: "));Promenljiva7 = float(input("Unesite realni broj: "));print("Mislite da je ", Promenljiva5," najviša planina u Srbiji.");print("Uneli ste ceo broj: ", Promenljiva6);print("Uneli ste realni broj: ", Promenljiva7).

Слика 3.2.4. Извршен код програма

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

На интернет страници Кошаркашког савеза Србије (http://www.kss.rs/muske-reprezentacije/seniori/2019-2/) доступне су информације о саставу репрезентације 2019. године. Наведено је 14 играча: Милош Теодосић, Никола Јокић, Богдан Богдановић, Немања Бјелица, Бобан Марјановић, Марко Гудурић,

Променљиве

EDUKA-PORTAL

Page 12: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

116

Стефан Јовић, Василије Мицић, Драган Милосављевић, Владимир Лучић, Марко Симоновић, Стефан Бирчевић, Мирослав Радуљица и Стефан Милутинов.

На основу пронађених информација закључујемо да нам је потребно 14 променљивих. Нека њихова имена буду kosarkas1, …, kosarkas14. Код програма могао би да изгледа овако:

Слика 3.2.5. Кôд програма

Резултат извршавања програма:

Слика 3.2.6. Извршен кôд програма

Укратко 2 Променљива је место у меморији рачунара у коме се чува један податак

(број, стринг, вредност Тачно или Нетачно).

2 Током извршавања програма, садржај променљиве најчешће се мења.

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

EDUKA-PORTAL

Page 13: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

117

Питања и задаци:

1. Објасни концепт променљиве у програмирању.2. Да ли програмер унапред мора да зна тип податка који се чува у променљивој?3. Да ли програмер унапред мора да зна конкретну вредност податка који се чува

у променљивој?4. Коју наредбу користимо када желимо да комуницирамо с корисником (када

очекујемо да унесе неку вредност)?5. Да ли ће се програм

приказан на слици извршити или ће пријавити грешку? Објасни.

Предлажемо ти да проучиш садржај интерактивних лекција на порталу Петља. Лекцијама можеш да приступиш скенирањем QR кода:

или преко линка: https://petlja.org/biblioteka/r/kursevi/prirucnik-python.

Осврни се на лекцију Променљиве и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

1 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Променљиве

EDUKA-PORTAL

Page 14: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

118

3.3. гранање

Твоје досадашње програмерско искуство подразумевало је употребу наредби које омогућавају гранање програма (управљање током програма). У петом и шестом разреду програмирали смо сложеније програме, у којима су се неке наредбе извршавале, а неке не. Које наредбе ће бити извршене, зависило је од испуњености неког услова. Ако је услов био испуњен, програм је имао један ток извршавања, а ако услов није био испуњен – сасвим други.

За креирање програма који садржи гранање користимо наредбу if, у оквиру које испитујемо испуњеност наведеног услова. Ако је услов испуњен (тврђење је тачно), извршава се једна група наредби (наведене су испод if uslov:), а ако није, извршава се друга група наредби (наведене су испод else:).if uslov: naredba_1 ... naredba_m else: naredba_1 ... naredba_n

Наредбу читамо:

Aко је испуњен услов,извршава се група наредби представљених зеленом бојом (naredba_1, ..., naredba_m), иначе се извршава група наредби представљених љубичастом бојом (naredba_1, ..., naredba_n).

ОбнОвићемО знање О:

– гранању у програмима;– наредби if..else;– наредби if..elif..else.

% Анализирај следећи програм.

% Објасни намену приказаног програма. % Подвуци услове чију испуњеност програм испитује.% Који оператори су коришћени у програму? Објасни разлоге за

коришћење сваког од њих.

EDUKA-PORTAL

Page 15: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

119

Уместо да за сваки ток извршавања користимо конструкцију if else можемо користити наредбу elif. Њеним коришћењем програм ће бити једноставнији и прегледнији.

% Анализирај следећи програм.

% Објасни намену приказаног програма. Да ли је могуће направити програм који има исти резултат извршавања без употребе наредбе elif? Образложи свој одговор.

if uslov_1: naredba_1 ... naredba_m elif uslov_2: naredba_1 ... naredba_n elif uslov_3: naredba_1 ... naredba_p …else: naredba_1 ... naredba_q

Укратко 2 Коришћење гранања у програму омогућава да се, у зависности од

испуњености услова, неке наредбе програма изврше, а неке не. 2 Коришћењем наредбе if омогућавамо

гранање програма. Прво испитујемо испуњеност наведеног услова. Ако је услов испуњен (тврђење је тачно), извршава се једна група наредби (наведене су испод if uslov:), а ако није, извршава се друга група наредби (наведене су испод else:).

2 Уместо да за сваки ток извршавања користимо конструкцију if else можемо користити наредбу elif.

if uslov: naredba_1 ... naredba_m else: naredba_1 ... naredba_n

if uslov_1: naredba_1 ... naredba_m elif uslov_2: naredba_1 ... naredba_n elif uslov_3: naredba_1 ... naredba_p …else: naredba_1 ... naredba_q.

Гранање

Aко је испуњен услов uslov_1, извршава се група наредби приказаних зеленом бојом (naredba_1, ..., naredba_m),иначе Aко је испуњен услов uslov_2, се извршава група наредби приказаних љубичастом бојом (naredba_1, ..., naredba_n).

EDUKA-PORTAL

Page 16: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

120

Питања и задаци:

1. Анализирај код: telesna_temperatura = 37.5 if (telesna_temperatura > 36.9): print("Препоручујемо ти да идеш код лекара.") else: print("Немаш температуру! Иди, играј се."). Унапреди програм тако што ћеш омогућити кориснику да унесе вредност

телесне температуре.

Предлажемо ти да проучиш садржај интерактивних лекција на порталу Петља. Лекцијама можеш да приступиш скенирањем QR кода:

или преко линка: https://petlja.org/biblioteka/r/kursevi/prirucnik-python.

Осврни се на лекцију Гранање и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

1 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

EDUKA-PORTAL

Page 17: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

121

3.4. корњача-графика и Понављање

У Пајтону цртамо помоћу корњача-графике. Да би употреба корњача-графике била могућа, неопходно је да, на почетку програма, увеземо библиотеку Корњача – import turtle. Након увоза библиотеке Корњача, све је спремно за цртање – курсор има спуштену оловку и оставља траг при кретању.

Основне наредбе за исцртавање су:

turtle.forward(n) – корњача се помера напред за n корака (пиксела);

turtle.left(n) – корњача се окреће налево за n степени;

turtle.right(n) – корњача се окреће надесно за n степени;

turtle.penup() – корњача подиже оловку;turtle.pendown() – корњача спушта оловку;turtle.color("боја оловке") – поставља се боја оловке на "боја

оловке" (назив боје пише се на енглеском језику, нпр. "red", "green", "blue");

turtle.bgcolor("боја позадине") – поставља се боја позадине на "боја позадине" (назив боје пише се на енглеском језику, нпр. "red", "green", "blue");

turtle.pensize(n) – поставља се дебљина оловке (n пиксела);

turtle.shape("облик") – корњача мења свој облик (назив облика пише се на енглеском језику нпр. "arrow", "turtle", "circle").

Комбиновањем ових наредби можемо да стварамо (програмирамо) комплексне цртеже.

ОбнОвићемО знање О:

– корњача-графици;– понављању у програмима;– петљи for;– условним понављањима;– петљи while.

Корњача-графика и понављање

EDUKA-PORTAL

Page 18: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

122

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

У Пајтону је могуће дефинисати блокове наредби који се понављају унапред познати број пута. Када унапред знамо број понављања (каже се и: итерација) користимо наредбу (петљу) for која има следећу структуру:

for i in range(n): naredbа_1 ... naredbа_m.

Функција range() је уграђена функција која се користи за стварање скупа вредности које узима променљива i.

% Анализирај програм.

% Шта ће бити исцртано након извршавања програма?

% Да ли програм садржи наредбе које се понављају?

Наведи их.

Колико пута се понављају?

% Анализирај табелу.

Наредба Скуп вредностиrange(10) 0,1,2,3,4,5,6,7,8,9range(1,10) 1,2,3,4,5,6,7,8,9range(3,7) 3,4,5,6range(2,15,3) 2,5,8,11,14range(9,2,-1) 9,8,7,6,5,4,3

Коју вредност узима променљива i ако је range(2,7)? Коју вредност узима променљива i ако је range(2,7,2)?

итерација – понављање,

циклично понављање

неког процеса

EDUKA-PORTAL

Page 19: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

123

Постављање једне петље унутар тела друге назива се угњеждавање и оно има овакав облик:

for i in range(5): for ј in range(4):

Спољашња петља одређује број понављања унутрашње петље.

Честе су ситуације у којима је потребно понављање одређених наредби, за које није унапред познато колико пута ће се поновити, јер понаваљање зависи од испуњености одређеног услова. У таквим случајевима користимо наредбу условног понављања. У питању је петља while, чије се наредбе извршавају све док је неки услов испуњен. Имај на уму да се услов проверава и при првом извршавању петље.

Петља while има следећу структуру:

while uslov: naredbа_1 ... naredbа_n.

% Унапреди програм који исцртава испрекидану линију од пет цртица тако што ћеш користити петљу for.

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

% Анализирај програм:

x = 3 i = 0 while i < 3: x = x + 1 i = i + 1 print(x).

% Шта ће бити одштампано на екрану дигиталног уређаја након извршавања овог програма?

% Представљени програм преправи тако што ћеш уместо петље while користити петљу for. Не заборави да резултат извршавања оба програма треба да буде исти.

Корњача-графика и понављање

EDUKA-PORTAL

Page 20: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

124

Интересантно је да у Пајтону петља while има своју else: грану. Наредбе у оквиру гране else ће се извршити само једном када услов постане нетачан.

while uslov: naredbа_1 ... naredbа_n else: naredbа_1 ... naredbа_m

Укратко 2 Када се неке наредбе програма извршавају више пута, кажемо да

програм садржи понављања (циклусе, петље).2 Наредбу for i in range(): користимо када унапред знамо тачан број

понављања (итерација). 2 Функција range() је уграђена функција која се користи за стварање

скупа вредности које узима променљива i. 2 Постављање једне петље унутар тела друге петље зове се угњеждавање.

2 Спољашња петља одређује број понављања унутрашње петље. 2 У програмима у којима не знамо колико је пута потребно поновити групу

наредби користимо условна понављања. 2 Условно понављање обезбеђује петља while, чије се наредбе извршавају

све док је неки услов испуњен (услов се проверава и пре првог извршавања петље).

2 Петља while има следећу структуру:

2 Само у Пајтону петља while има своју else: грану.

while uslov: naredbа_1 ... naredbа_nelse: naredbа_1 ... naredbа_m

while uslov: naredbа_1 ... naredbа_n.

for i in range(): for ј in range():

EDUKA-PORTAL

Page 21: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

125

Питања и задаци:

1. Када употребљавамо петљу for, а када петљу while?2. Покрени IDLE и направи програм

за цртање круга: Унапреди скрипту тако да: ► кружница буде љубичаста; ► дебљина линије буде 5.

Тестирај програм и упореди своје решење са нашим: CD → L3.4 → Zadatak1.py.

3. Шта ће бити исцртано извршавањем следећег кода?

Тестирај програм и упореди своје решење са нашим: CD → L3.4 → Zadatak2.py.

import turtleturtle.color("red")turtle.width(3)for i in range(6): for j in range(2): turtle.forward(10) turtle.penup() turtle.pendown()

Програм за исцртавање круга

Предлажемо ти да проучиш садржај интерактивне лекције Понављање на порталу Петља. Лекцији можеш да приступиш скенирањем QR кода:

или преко линка: https://petlja.org/biblioteka/r/lekcije/prirucnik-python/ kontrolatoka-cas11

Осврни се на лекцију Корњача-Īрафика и понављање и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

1 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Корњача-графика и понављање

EDUKA-PORTAL

Page 22: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

126

3.5. Дефинисање функције

Да бисмо избегли поновно писање или понављање истих наредби у оквиру једног или више програма, користимо функције. Видели смо да су нам одмах након инсталације Пајтона постале доступне бројне уграђене функције. Ипак, често је потребно да направимо своју, врло специфичну функцију.

Функцију дефинишемо поштујући следећу структуру:

def ime_funkcije: naredbe

Анализирај кôд функције којом се исцртава круг црвене боје:

def krug(): turtle.pencolor("red") turtle.width(5) for i in range(360): turtle.forward(1) turtle.left(1).

Извршавање функције позивамо навођењем њеног имена. У нашем случају krug() je функција коју позивамо да би се исцртао круг.

ОбнОвићемО знање О:

– дефинисању функције.

Слика 3.5.1. Програм и извршавање кôда за цртање црвеног круга

EDUKA-PORTAL

Page 23: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

127

Некада је потребно да се функција понаша другачије у зависности од наших потреба, на пример функција која би исцртавала кружницу задате дебљине линије, а не увек дебљине 5 као што је то случај у претходном примеру. Тада креирамо функцију која користи параметре. Параметри обезбеђују да функција добија вредности од корисника. Функцију са параметрима дефинишемо поштујући следећу структуру:

def ime_funkcije (parametri): naredbe return

Вредност параметара функција добија при позиву из програма. Функција се у програму позива навођењем имена функције (нпр. ime_funkcije (promenljiva)). Функција се у програму позива навођењем имена функције (нпр. ime_funkcije (promenljiva)) Ове вредности претходно је унео корисник или су добијене на основу одређених израчунавања.

Дефинисаћемо функцију која претвара температуру исказану у степенима Фаренхајта у степене Целзијуса. Као параметар, ова функција користи унос корисника.

def temperatura(f): c=(f-32)*(5/9) return(c)

Кôд програма изгледа овако:

Када желимо да исцртамо круг у боји коју уноси корисник, треба користити функцију с параметрима.

Овако изгледа функција за исцртавање круга:

def krug(boja): turtle.pencolor(boja) turtle.width(5) for i in range(360): turtle.forward(1) turtle.left(1).

Слика 3.5.2 Изглед програма

Дефинисање функције

У САД се температура

мери у степенима Фаренхајта – 32 степена Фаренхајта је 0 степени Целзијуса. Сваких наредних 9 степени Фаренхајта додаје 5 степени Целзијуса (тако је 41 степен Фаренхајта исто што и 5 степени Целзијуса, 50 степени Фаренхајта исто што и 10 степени Целзијуса итд.)

EDUKA-PORTAL

Page 24: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

128

Укратко 2 Функција се дефинише коришћењем резервисане речи def, након чега се

наводи име функције. Након те прве линије наводи се тело функције, које мора бити увучено. 

2 Функција која прихвата неку вредност на основу уноса корисника или одређених израчунавања и враћа вредност назива се функција с параметрима.

def ime_funkcije: naredbe

def ime_funkcije (parametri): naredbe return

Слика 3.5.3 Програм и извршавање кода за цртање зеленог круга

EDUKA-PORTAL

Page 25: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

129

Питања и задаци:

1. Направи програм који претвара метре у километре и кориснику обезбеђује повратну информацију у виду километара и преосталих метара. Упореди своје решење са нашим: CD → L3.5 → Zadatak1.py.

2. Креирај функцију која ће исцртавати квадрат чију величину странице уноси корисник. Упореди своје решење са нашим: CD → L3.5 → Zadatak2.py.

3. Направи програм који одређује брзину кретања особе и изражава је у ms .

Корисник уноси пређени пут у километрима, а време у секундама. Програм треба да садржи функцију која претвара километре у метре. Мала помоћ: Подсети се формуле за израчунавање брзине кретања: v = s

t . Упореди своје решење са нашим: CD → L3.5 → Zadatak3.py.

Осврни се на лекцију Дефинисање функције и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

1 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Дефинисање функције

EDUKA-PORTAL

Page 26: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Вежбаоница 1

130

Вежбаоница 1

Задатак 1.

Шта ће бити вредност следећег израза? floor((14 + -10) / 16 % 49))

Упореди решење са нашим (CD→Vezbaonica 1 V1Z1.py).

Задатак 2.

Једно одељење има n ученика и сви они воле да гледају филмове или читају књиге. Ако се зна да филмове воли да гледа m ученика, а да чита књиге p ученика колико ученика воли и да гледа филм и да чита књиге? Са улаза се уносе целобројне вредности за број ученика одељења, затим број ученика који воле да гледају филмове, и оне који воле да читају књиге. Унос мора да буде user friendly. На пример: n=int(input("Unesi broj ucenika")). Излаз треба да изгледа овако: Укупан број ученика који воле и да гледају филмове и да читају књиге је: израчуната вредност

Упореди решење са нашим (CD→Vezbaonica 1→V1Z2.py).

Задатак 3.

У средини собе квадратног облика се налази тепих. Ако је позната димензија собе у метрима, удаљеност тепиха од зидова, и цена прања по једном квадратном метру тепиха, израчунај цену прања целог тепиха. Са улаза се уносе целобројне вредности за димензију собе, удаљеност тепиха од зида и цену тепиха по квадратном метру. Унос мора да буде user friendly. На пример: cena=int(input("Unesi cenu pranja tepiha")). Излаз треба да изгледа овако: Укупна цена прања тепиха је: израчуната вреgност.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z3.py).

Вежбаоницу треба да схватиш као прилику да научиш или боље разумеш програмирање у Пајтону.

Пред тобом су задаци:

Покушај да урадиш сваки од њих. Решења задатака која ти нудимо упореди са својим решењима или их искористи као помоћ при решавању задатака.

основног нивоа

средњег нивоа

напредног нивоа

User friendly – једноставан,

интуитиван, лак за коришћење.

EDUKA-PORTAL

Page 27: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

131

Вежбаоница 1

Задатак 4. Илија и Матија организују рођенданску журку. Илија има n пријатеља,

док их Матија има m. Када је Илија погледала списак који је Матија направио, видео је да имају p заједничких пријатеља. Ако би и један и други позвали све своје пријатеље на рођендан, колико различтих људи би добило тај позив.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z4.py).

Задатак 5.Напиши програм у којем се учитавају две ниске и исписује дужина дуже

од њих.Упореди решење са нашим (CD→Vezbaonica 1→V1Z5.py).

Задатак 6. Пребројати колико се пута у унетом стрингу појављује слово "М" (и

велико и мало). Нпр. за стринг 'Мама има мому', добија се резултат 5.Упореди решење са нашим (CD→Vezbaonica 1→V1Z6.py).

Задатак 7. Учитаj реч са тастатуре. Испиши колико има слова.Упореди решење са нашим (CD→Vezbaonica 1→V1Z7.py).

Задатак 8. Написати програм којим се проверава да ли су два цела броја истог

знака. На улазу се налазе два цела броја различита од нуле, док је на излазу Да ако су дати бројеви истог знака, иначе се приказује Не.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z8.py). Задатак 9. Написати програм којим се на основу димензије стола који је

правоугаоног облика и ширине стољњака кружног облика одређује да ли стољњак може у потпуности прекрити сто или не.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z9.py).

Задатак 10. Ако је унети број непаран испиши његову реципрочну вредност, а ако је

паран број испиши квадратни корен његовог следбеника.Упореди решење са нашим (CD→Vezbaonica 1→V1Z10.py).

Задатак 11. Написати програм који пребројава колико има великих, а колико малих

слова у учитаном стрингу.Упореди решење са нашим (CD→Vezbaonica 1→V1Z11.py).

EDUKA-PORTAL

Page 28: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Вежбаоница 1

132

Задатак 12. Напиши програм који тражи од корисника да унесе стринг, а онда штампа

све позиције на којима се налази слово 'а' у стрингу.Упореди решење са нашим (CD→Vezbaonica 1→V1Z12.py).

Задатак 13. Употреби петљу 

for j in range(2): turtle.forward(50) turtle.left(90) turtle.forward(100) turtle.left(90)

и напиши програм којим корњача графика исцртава следећу слику:

Упореди решење са нашим (CD→Vezbaonica 1→V1Z13.py).

Задатак 14. Отац има три сина. Напиши програм који одређује колика је разлика у

годинама између најстаријег и најмлађег сина. Корисник са улаза уноси године синова.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z14.py).

Задатак 15. Наталија и Ксенија су другарице које су се упознале на летовању.

Решиле су да проведу један дан у обиласку Београда. Наталија је дошла аутобусом на станицу у s1 сати и m1 минута, док је Ксенија на станицу стигла у s2 сати и m2 минута. Колико је чекала она која је прва стигла?

Упореди решење са нашим (CD→Vezbaonica 1→V1Z15.py).

Задатак 16. Напиши програм који исцртава квадратну спиралу. Свака наредна линија је

5 корака дужа од претходне и са њом гради прав угао.Упореди решење са нашим (CD→Vezbaonica 1→V1Z16.py).

Задатак 17.Написати програм којим корњача графика исцртава следећи лик:

Mала помоћ: Листе: boje= ["red", "blue", "green", "yellow", "purple", "orange"] и насумичног избора боја из дате листе: izborboje = random.choice(boje) turtle.color(izborboje)Упореди решење са нашим (CD→Vezbaonica 1→V1Z17.py).

EDUKA-PORTAL

Page 29: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

133

Вежбаоница 1

Задатак 18. Пребројати колико има знакова који су цифре у унетом стрингу. Mала помоћ: Користи уграђену функцију isdigit().Упореди решење са нашим (CD→Vezbaonica 1→V1Z18.py).

Задатак 19. Одреди брзину кретања неке особе која је прошла

одређени пут за одређено време. Покушај да направиш функцију која ће да претвори km/h у m/s.

Mала помоћ: Подсети се формуле из физике: v=s/t. Основна јединица за мерење је метар у секунди: m/s, често се користи и километар на час: km/s.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z19.py).

Задатак 20. Написати програм којим се проверава да ли две тачке А(x1,y1), B(x2,y2)

припадају истом квадранту. Сматраћемо да тачке на позитивном делу x осе припадају првом и четвртом квадранту, тачке на негативном делу x осе припадају другом и трећем квадранту, слично тачке на позитивном делу y осе припадају првом и другом квадранту, а на негативном делу y осе трећем и четвртом квадранту, а да координатни почетак припада свим квадрантима.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z20.py).

Задатак 21. Напиши програм који, за унета два броја рачуна њихов збир, разлику,

производ или количник и приказује резултат.За израчунавање основних аритметичких операција дефиниши функције:► сабирање() – израчунава збир два унета броја,► одузимање() – израчунава разлику два унета броја,► множење() - израчунава производ два унета броја,► дељење() - израчунава количник два унета броја.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z21.py).

Задатак 22. Напиши програм којим се у датом природном троцифреном броју

размењује цифра јединица и цифра стотина. За број са мање од три цифре сматрамо да су недостајуће цифре једнаке 0. Тако на пример, за унет број 512, добија се број: 215, или за унет број 12, добија се 210.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z22.py).

Задатак 23.

Напиши програм који учитава четвороцифрени број и исписује збир свих цифара тог броја. На пример, за унет број 5876, збир цифара је: 26

Упореди решење са нашим (CD→Vezbaonica 1→V1Z23.py).

EDUKA-PORTAL

Page 30: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Вежбаоница 1

134

Задатак 24.

У току недеље пало је n литара кише по квадратном метру. Написати програм којим се одређује за колико центиметара се подигао ниво воде у отвореном базену датих димензија, ако знамо да се вода није прелила преко базена. На стандарном излазу приказати један реалан број на две децимале који представља за колико центиметара се подигао ниво воде у базену. (print("%.2f" % vrednost))

Упореди решење са нашим (CD→Vezbaonica 1→V1Z24.py).

Задатак 25.

Направи програм који симулира игрицу Папир-камен-маказе. Дефиниши функцију којом ћеш упоређивати избор рачунара и корисника. Корисник игра Папир-камен-маказе против рачунара. Рачунар насумице бира један од облика: папир, камен или маказе, док корисник уноси свој избор притиском на слово П или K или M.

Победник се бира на основу правила игре:► маказе су јаче од папира (маказе секу папир);► камен је јачи од маказа (камен разбија маказе);► папир је јачи од камена (папиром може да се обавије и зароби камен).

У случају да оба играча (рачунар и корисник) изаберу исти знак, на екрану треба да буде приказана порука "Нерешено је. ". У супротном, приказује се порука о победнику ("Ти си победник" или "Рачунар је победник"). У случају погрешног уноса исписује се порука на екрану: "Дошло је до грешке!"

Упореди решење са нашим (CD→Vezbaonica 1→V1Z25.py).

Задатак 26.

Модификуј горњи пример тако да:► корисник унесе број партија које жели да игра.► рачунар приказује поруку о победнику и броју добијених партија.

Упореди решење са нашим (CD→Vezbaonica 1→V1Z26.py).

Додатне задатке можеш пронаћи на порталу Петља. Порталу можеш да приступиш скенирањем QR кода:

или преко линка:

https://petlja.org/biblioteka/r/kursevi/prirucnik-python

EDUKA-PORTAL

Page 31: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

135

3.6. БиБлиотека Пајгејм (енг. PyGame)

Да цртају на рачунару или другом дигиталном уређају умеју и сасвим мала деца. Сви смо волели да цртамо. Повући линију одабране боје, развући круг, правоугаоник или неки други основни облик било је изузетно једноставно. Уживали смо у лакоћи коришћења програма за цртање. Ипак, стварност је нешто сложенија.

У седмом разреду имамо прилику да погледамо „испод хаубе“. Програмирајући исцртавање једноставних облика стећи ћемо праву слику о томе колико јесу или нису једноставни програми за цртање.

Већ смо користили библиотеку корњача- графика. Добар је тренутак да се упознамо са новом графичком библиотеком, напреднијом од корњача-графике. У питању је библиотека PyGame (Пајгејм). Користићемо је за програмирање 2D графичких апликација које можемо да сачувамо као посебне (извршне) датотеке.

Пајгејм је библиотека која се састоји од кôдова коју су написали други програмери и тиме нам олакшали:

♦ цртање графичких облика;♦ приказивање слика;♦ израду анимација;♦ интеракције са тастатуром, мишем и џојстиком;♦ репродукцију звука;♦ утврђивање догађаја попут додиривања објеката.

За инсталацију библиотеке Пајгејм потребно је да;

► инсталирамо програмски језик Пајтон (пожељно је верзију 3.6 или новију). Веома је важно да, приликом инсталације Пајтона означимо (чекирамо) опцију Add Python to PATH.

Говорићемо о:

– инсталацији и покретању библиотеке Пајгејм;– програму за oтварање прозора.

Слика 3.6.1. Означавање опције Add Python to PATH приликом инсталације Пајтона

Библиотека Пајгејм

EDUKA-PORTAL

Page 32: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

136

Наредба Опис наредбеimport pygame Увоз (учитавање) библиотеке Пајгејм

pygame.init() Покретање (иницијализација) библиотеке Пајгејм

pygame.display.set_caption("Prvi program") Постављање наслова прозора

prozor = pygame.display.set_mode((200, 200)) Oтварање прозора димензије 200 x 200 пиксела

pygame.time.wait(5000) Прозор је отворен пет секунди (5000 милисекунди).

pygame.quit() Искључивање библиотеке Пајгејм

Слика 3.6.2. Инсталација библиотеке Пајгејм у оперативном систему Windows

► након инсталације Пајтона, покренемо командну линију (најлакше тако што заједно притиснемо тастер windows и тастер r) и у прозору

откуцамо cmd. Отвориће се прозор у оквиру кога, на командној линији треба да откуцамо pip install pygame.

Након приказаног поступка, инсталација библиотеке Пајгејм завршена. Увек је добро да одмах тестирамо да ли је све протекло на начин који очекујемо. Зато ћемо да:

♦ покренемо Пајтон развојно окружење IDLE;♦ отворимо нови пројекат (opcija File → New);♦ откуцамо кôд програма за отварање прозора димензија 200x200 пиксела,

који ће остати отворен 5 секунди: EDUKA-PORTAL

Page 33: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

137

Слика 3.6.3. Кôд програма за отварање прозора димензија 200x200 пиксела, који ће остати отворен 5 секунди

► пре него што програм извршимо, потребно је да га сачувамо кликом на File → Save As ;

► извршавамо програм кликом на Run → Run Module или F5.

Након покретања програма очекујемо да се појави прозор који ће остати отворен наредних пет секунди, а затим ће се самостално затворити.

Посматрањем извршавања програма, уочавамо да кориснику није омогућена интеракција с прозором – он не може чак ни да га затвори. Зато ћемо модификовати програм тако да реагује на догађај – затварање прозора (клик на дугме у горњем десном углу прозора).

Најједноставнији начин да то урадимо јесте да користимо условну петљу while:

while pygame.event.wait().type != pygame.QUIT: pass.

У while петљи pygame.event.wait() чека да се деси неки догађај. Када се он деси, проверавамо да ли је испуњен услов – да ли је детектовани догађај различит од догађаја затварање прозора pygame.QUIT.

важно: Немојте никада именовати своју

датотеку са pygame.py, јер је pygame једна од резервисаних речи у програмском језику Пајтон

Слика 3.6.4. Резултат извршавања програма

У програмирању, догађај је појава која је најчешће резултат нечега што је корисник урадио (клик миша, притисак неког тастера, затварање прозора...).

Библиотека Пајгејм

EDUKA-PORTAL

Page 34: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

138

► У случају да корисник није искључио прозор, тачније у случају када је тип догађаја различит од pygame.QUIT, извршава се тело петље које не ради ништа. У језику Пајтону то се постиже навођењем наредбе pass.

► Ако је корисник затворио прозор, тачније ако је тип догађаја баш pygame.QUIT, услов петље није више испуњен, петља се прекида.

Коначан изглед програма:

Наредба Опис наредбе

import pygame Увоз (учитавање) библиотеке Пајгејм

pygame.init() Покретање (иницијализација) Пајгејм библиотеке

pygame.display.set_caption("Prvi program") Постављање наслова прозора

prozor = pygame.display.set_mode((200, 200)) Oтварање прозора димензије 200 x 200 пиксела

while pygame.event.wait().type != pygame.QUIT: pass

Све док корисник не кликне на дугме за затварање прозора, не дешава се ништа. У тренутку када то учини, петља while прекида да се извршава.

pygame.quit() Искључивање библиотеке Пајгејм

Укратко 2 pygame.init()

Укључивање рада библиотеке 2 pygame.quit()

Искључивање рада библиотеке 2 prozor = pygame.display.set_mode((duzina, sirina))

Укључивање прозора дате димензије 2 pygame.time.wait(ms)

Паузира извршавање за наведени број милисекунди 2 pygame.QUIT

Догађај искључивања прозора

Као што видиш, Пајгејм омогућава да стварамо програме који препознају активности корисника (догађаје) и у односу на њих се извршава.

Да ли је то случај и са рачунарским игрицама које волиш? Испричај своје искуство.

EDUKA-PORTAL

Page 35: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

139

Наредба Опис наредбе

import pygame Увоз (учитавање) библиотеке Пајгејм

pygame.init() Покретање (иницијализација) Пајгејм библиотеке

pygame.display.set_caption("Prvi program") Постављање наслова прозора

prozor = pygame.display.set_mode((200, 200)) Oтварање прозора димензије 200 x 200 пиксела

while pygame.event.wait().type != pygame.QUIT: pass

Све док корисник не кликне на дугме за затварање прозора, не дешава се ништа. У тренутку када то учини, петља while прекида да се извршава.

pygame.quit() Искључивање библиотеке Пајгејм

Питања и задаци:

1. Да би се наредбе библиотеке Пајгејм извршавале, које две линије кода уносимо прве?

2. Објасни наредбу pygame.display.set_mode().

3. Шта je резултат извршавања наредбе pygame.quit()?

Осврни се на лекцију Библиотека ПајĪејм и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

2 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Предлажемо ти да проучиш садржај интерактивне лекције Библиотека Pygame на порталу Петља. Лекцији можеш да приступиш скенирањем QR кода:

или преко линка: https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/instalacija-os.

Библиотека Пајгејм

EDUKA-PORTAL

Page 36: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

140

3.7. исцртавање дужи

Резултати извршавања Пајгејм команди се приказују у Пајгејм прозору. Пајгејм прозор. Положај објеката који се у прозору исцртавају (тачака, дужи, кругова и др.) одређен је њиховим x и у координатама.

Координатни почетак налази се у горњем левом углу прозора. Координата x одређује колико је објекат удаљен од леве ивице прозора, а координата y колико је објекат удаљен од горње ивице прозора. Важно је да знаш да је јединица мере координата x и у један пиксел.

Координата x расте када се померамо у десно, а координата y расте када се померамо надоле. Дакле, Пајгејм другачије тумачи вредности координата x и у у односу на то како бисмо их тумачили у математици.

Пре него што се посветимо исцртавању различитих облика у Пајгејму, осврнућемо се на дефинисање боје тих фигура. Боје дефинишемо коришћењем функције pygame.Color(). У оквиру заграда наводимо параметар, тј. одговарајући назив боје на енглеском језику:

Функција Име бојеpygame.Color("black") Црнаpygame.Color("white") Белаpygame.Color("red") Црвенаpygame.Color("green") Зеленаpygame.Color("blue") Плаваpygame.Color("cyan") Светло плаваpygame.Color("magenta") Цикламаpygame.Color("yellow") Жутаpygame.Color("orange") Наранџаста

Говорићемо о:

− координатном систему Пајгејм прозора;− дефинисању боја;− цртању дужи.

Слика 3.7.1. Координатни систем у ПајгејмуEDUKA-PORTAL

Page 37: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

141

Боју не користимо само када желимо да исцртамо одређени облик. Слично као у корњача-графици, могуће је обојити читав прозор у коме се програм извршава. Тада користимо функцију prozor.fill().

Боје могу бити дефинисане као комбинација заступљености неколико боја дефинисаних палетом. Једна од основих палета боја која се користи у рачунарству јесте RGB (енгл. Red-Green-Blue). Употребом ове палете боја се дефинише задавањем заступљености црвене, зелене и плаве компоненте. Заступљеност се описује бројем. Сваки од бројева узима вредности од 0 до 255, где 0 значи да одговарајућа боја уопште није заступљена, а 255 представља максималну заступљеност те боје.

У Пајтону боју можемо да представимо у облику трочлане уређене тројке (нпр. (123, 80, 56)) или трочлане листе (нпр. [123, 80, 56]).

RGB вредности Име боје(255, 0, 0) Црвена(0, 255, 0) Зелена(0, 0, 255) Плава(255, 255, 0) Жута(0, 255, 255) Светло плава(255, 0, 255) Циклама(255, 255, 255) Бела(0, 0, 0) Црна(128, 128, 128) Сива(255, 128, 0) Наранџаста(255, 128, 128) Розе

% Допуни кôд одговарајућом наредбом тако да се прозор обоји у наранџасто.

import pygame pygame.init() prozor = pygame.display.set_mode((400, 400))

pygame.display.update() while pygame.event.wait().type != pygame.QUIT: pass pygame.quit()

% Упореди своје решење са нашим (CD → L.3.7 → 4.py).

Mала помоћ: Да бисмо обојили прозор, потребно је да користимо функцију prozor.fill(), где у оквиру заграда наводимо дефинисану боју користећи pygame.Color().

Слика 3.7.2. Табела са RGB вредностима неких карактеристичних боја

Да бимо изабрали жељену боју,

можемо да користимо онлајн „бираче боја”. Један такав бирач боја је и овај: http://www.colorpicker.com/.

Исцртавање дужи

EDUKA-PORTAL

Page 38: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

142

Већ познајеш основне елементе Пајгејма – простор у коме ће се програм извршавати и боје које имамо на располагању. Спремни смо да пређемо на исцртавање различитих облика. За исцртавање различитих облика користићемо функцију pygame.draw().

Хајде да нацртамо плаву дуж дебљине два пиксела.

Прва фаза

Размишљање о проблему: Математика каже да је дуж најкраће растојање између две тачака, или да је дуж права линија ограничена тaчкама на обе стране.

Алгоритам за исцртавање дужи:

Корак 1: Учитавање библиотекe Пајгејм.Корак 2: Покретање (иницијализација) библиотеке Пајгејм.Корак 3: Отварање прозора димензија 640 x 480 пиксела.Корак 4: Исцртавање дужи плаве боје, дебљине два пиксела, почев од

тачке с координатама (10, 10) до тачке с координатама (200, 10).Корак 5: Освежавање садржаја прозора и приказивање исцртане дужи.Корак 6: Искључивање библиотеке Пајгејм када корисник затвори

прозор.

% Допуни програмски кôд одговарајућом наредбом тако да се прозор обоји љубичастом бојом. Боју ћемо дефинисати користећи променљиву ljubicasta, која ће садржати информације о одговарајућој количини црвене, зелене и плаве светлости коју ова боја садржи. Љубичасту боју чини мешавина црвене и плаве боје, без имало зелене. Зато променљиву дефинишемо као уређену тројку ljubicasta = (255, 0, 255).

import pygame pygame.init() prozor = pygame.display.set_mode((400, 400))

pygame.display.update() while pygame.event.wait().type != pygame.QUIT: pass pygame.quit()

% Упореди своје решење са нашим (CD→ L3.7. → 5.py).

% Модификуј облик променљиве ljubicasta на следећи начин: ljubicasta = (255, 0, 255, 10). Уочаваш да је боја сада дефинисана навођењем четири параметра где последњи, четврти параметар одређује прозирност.

% Упореди своје решење са нашим (CD→L3.7.→ 6.py).

EDUKA-PORTAL

Page 39: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

143

Друга фаза

Покрећемо програм Пајтон, отварамо едитор кликом на File → New File и уносимо одговарајуће наредбе у складу са алгоритмом описаним у првој фази.

Алгоритам ПрограмУкључивање библиотеке Пајгејм import pygameИницијализација Пајгејм окружења

pygame.init()

Отварање прозора димензија 640 x 480 пиксела

prozor = pygame.display.set_mode((640, 480))

Исцртавање дужи плаве боје дебљине 2 почев од тачке с координатама (10, 10) до тачке с координатама (200, 10)

pygame.draw.line(prozor, pygame.Color("blue"), (10,100), (200,100),2)

Освежавање садржаја прозора и приказивање исцртане дужи

pygame.display.update()

Искључивање Пајгејм окружење када корисник затворио прозор

while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

Као што видиш, општи облик наредбе за исцртавање линије је:

pygame.draw.line(prozor,boja,tačka1,tačka2,debljina).

► Први параметар представља прозор у коме желимо да нацртамо дуж.

► Други параметар је боја.

► Следећа два параметра су координате почетног темена дужи (на доњој слици је то тачка А) и крајњег темена дужи (тачка B).

► Последњи параметар је дебљина линије којом се исцртава дуж, задата у пикселима.

Обрати пажњу на функцију pygame.display.update(). Иако смо функцијом draw() додали дуж, она се неће приказати на екрану све док се тако измењен прозор поново не исцрта, што се дешава извршавањем функције update().

Исцртавање дужи

EDUKA-PORTAL

Page 40: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

144

Коначно, програм изгледа овако:

Слика 3.7.3. Програм за цртање дужи

Пајтон не дозвољава покретање програма ако он није претходно сачуван. Дакле, сачувајмо га под именом duz.py.

Трећа фаза

Тестирање програма: програм у Пајтону тестирамо одабиром опције Run → Run Module или притиском на тастер F5.

Слика 3.7.3. Резултат извршавања програма за исцртавање дужи

Након извршавања програма закључујемо да он ради правилно – исцртава дуж плаве боје дебљине два пиксела.

Укратко 2 Положај објекта (тачка, дуж, круг и др.) у прозору одређен је x и у координатама.

2 Координатни почетак налази се у горњем левом углу прозора.

EDUKA-PORTAL

Page 41: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

145

Укратко 2 Боје дефинишемо коришћењем функције pygame.Color(). 2 Боје прецизирамо навођењем њеног назива на енглеском језику или навођењем

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

2 У Пајгејму се за исцртавање различитих облика користи функција pygame.draw (). 2 Линија се исцртава коришћењем функције: pygame.draw.line(prozor, boja, tačka1,tačka2,debljina).

Питања и задаци:

1. Објасни по чему се координатни систем Пајгејм прозора разликује од Декартовог правоуглог координатног система.

2. Напиши програм који исцртава велико латинично слово L у центру прозора димензије 400 x 400 пиксела. Слово се састоји од једне хоризонталне и једне вертикалне дужи произвољне дужине (однос дужине вертикалне и хоризонталне дужи треба да буде 2 : 1) и дебљине је 10 пиксела. Упореди своје решење са нашим (CD → L.3.7 → slovoL.py).

3. Прилагоди претходни програм тако да позадина прозора буде жута, хоризонтална линија црвена, а вертикална плава. Упореди своје решење са нашим (CD → L.3.7 → slovoLdoradjeno.py).

Предлажемо ти да проучиш садржај интерактивне лекције Цртање на порталу Петља. Лекцији можеш да приступиш скенирањем QR кода:

или преко линка: https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/ crtanje-toctree.

Осврни се на лекцију Исцртавање gужи и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

2 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Исцртавање дужи

EDUKA-PORTAL

Page 42: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

146

3.8. исцртавање Правоугаоника и круга

У прошлој лекцији написали смо програм који исцртава дуж. Пред нама је нови изазов – исцртавање правоугаоника. За исцртавање овог облика потребно је да знамо координате његовог горњег левог темена, његову висину и ширину.

За цртање правоугаоника користимо функцију:

pygame.draw.rect(prozor, boja, (x, y, sirina, visina)).

► Први параметар функције представља прозор на коме се црта.

► Други параметар је боја, коју дефинишемо наводећи њен назив, користећи функцију pygame.Color() или на основу тројке бројева из модела боја RGB.

► Трећи параметар чине четири броја, где прва два броја представљају координате горњег левог темена правоугаоника, а друга два представљају редом његову ширину и висину.

Говорићемо о:

– исцртавању правоугаоника;– исцртавању круга.

Слика. 3.8.1. Приказ правоугаоника с почетком у (20, 20), ширином од 250 и висином од 50 пиксела

EDUKA-PORTAL

Page 43: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

147

Имамо сва потребна знања да напишемо програм који исцртава правоугаоник плаве боје с почетком у (10, 10), ширином од 200 и висином од 100 пиксела.

Прва фаза

Размишљање о проблему: Математика каже да је правоугаоник геометријска фигура ограничена са четири странице, при чему су наспрамне странице паралелне и једнаке дужине, а углови између суседних страница су 90о.

Алгоритам за цртање правоугаоника:

Корак 1: Учитавање библиотекe Пајгејм.Корак 2: Покретање (иницијализација) библиотеке Пајгејм.Корак 3: Отварање прозора димензија 640 x 480 пиксела.Корак 4: Исцртавање плавог правоугаоника, почев од тачке с координатама

(10, 10), ширине 200 и дужине 100 пиксела.Корак 5: Освежавање садржаја прозора и приказивање исцртаног

правоугаоника.Корак 6: Искључивање библиотеке Пајгејм када корисник затвори прозор.

Друга фаза

Покрећемо програм Пајтон, отварамо едитор кликом на File → New File и уносимо одговарајуће наредбе у складу са алгоритмом описаним у првој фази.

Алгоритам Програм

Учитавање библиотекe Пајгејм import pygame

Покретање (иницијализација) библиотеке Пајгејм

pygame.init()

Отварање прозора димензија 640 x 480 пиксела

prozor = pygame.display.set_mode((640, 480))

Исцртавање плавог правоугаоника, почев од тачке с координатама (10, 10), ширине 200 и дужине 100 пиксела

pygame.draw.rect(prozor, pygame.Color("blue"), (10, 10, 200, 100))

Освежавање садржаја прозора и приказивање исцртаног правоугаоника

pygame.display.update()

Искључивање библиотеке Пајгејм када корисник затвори прозор

while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

Исцртавање правоугаоника и круга

EDUKA-PORTAL

Page 44: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

148

Коначно, програм изгледа овако:

Слика. 3.8.2. Програм за цртање правоугаоника

Сачувајмо програм под именом pravougaonik.py.

Трећа фаза

Тестирање програма: Програм тестирамо одабиром опције Run → Run Module или притиском на тастер F5.

Слика. 3.8.3. Резултат извршавања програма за исцртавање правоугаоника

Након извршавања програма закључујемо да он ради правилно – исцртава плави правоугаоник.

EDUKA-PORTAL

Page 45: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

149

Функција pygame.draw.circle(prozor,boja,(cx,cy),poluprečnik,debljina) користи се за исцртавање још једног основног геометријског облика – круга.

► Први параметар је прозор на коме се црта. ► Други параметар је боја којом се црта. ► Трећи параметар је уређени пар којим се задају

координате центра круга и полупречник круга. ► Последњи параметар представља дебљину линије

круга у пикселима (црта се само кружна линија).

У центру прозора димензије 640 x 480 пиксела, нацртаћемо круг полупречника 100 пиксела, чија је кружна линија зелене боје.

Прва фаза

Размишљање о проблему: Центар круга је дефинисан у центру прозора, као половина ширине и висине прозора.

Алгоритам за цртање круга:

Корак 1: Учитавање библиотекe Пајгејм.Корак 2: Покретање (иницијализација) библиотеке Пајгејм.Корак 3: Дефинисање димензија прозора (sirinа и visinа).Корак 4: Отварање прозора задатих димензија.Корак 5: Дефинисање центра круга (cx, cy).Корак 6: Исцртавање плаве кружнице, с центром у (cx, cy), полупречника

100 пиксела, дебљине 1 пиксел.Корак 7: Освежавање садржаја прозора и приказивање исцртане кружнице.Корак 8: Искључивање библиотеке Пајгејм када корисник затвори прозор.

% Допуни програмски кôд одговарајућом наредбом тако да се исцрта плави правоугаоник белих ивица дебљине 1 пиксел, почев од тачке с координатама (10, 10), ширине 200 и дужине 100 пиксела.

import pygame pygame.init() prozor = pygame.display.set_mode((400, 400)) pygame.draw.rect(prozor, pygame.Color("blue"), (10, 10, 200, 100))

pygame.display.update() while pygame.event.wait().type != pygame.QUIT: pass pygame.quit()

% Упореди своје решење са нашим (CD → L.3.8 → pravougaonikLinija.py).

Mала помоћ: Функција за исцртавање правоугаоника има следећи облик: pygame.draw.rect(prozor, boja, (x, y, sirina, visina),debljina).

важно: Ако се параметар за дебљину линије

изостави, исцртаће се круг који је испуњен бојом. За разлику од функција за исцртавање дужи и правоугаоника, код ове функције координате центра круга, као и вредности за полупречник, морају да буду цели бројеви.

Исцртавање правоугаоника и круга

EDUKA-PORTAL

Page 46: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

150

Друга фаза

Покрећемо програм Пајтон, отварамо едитор кликом на File → New File и уносимо одговарајуће наредбе у складу са алгоритмом описаним у првој фази.

Алгоритам ПрограмУчитавање библиотекe Пајгејм

import pygame

Покретање (иницијализација) библиотеке Пајгејм

pygame.init()

Дефинисање димензија прозора (sirina и visina)

(sirina, duzina)=(640,480)

Отварање прозора задатих димензија

prozor = pygame.display.set_mode((sirina, duzina))

Дефинисање центра круга (cx, cy)

(cx, cy) = (sirina // 2, duzina // 2)

Исцртавање плаве кружнице, с центром у (cx, cy), полупречника 100 пиксела, дебљине 1 пиксел

pygame.draw.circle(prozor, pygame.Col-or("blue"), (cx, cy), 100,1)

Освежавање садржаја прозора и приказивање исцртане кружнице

pygame.display.update()

Искључивање библиотеке Пајгејм када је корисник затворио прозор

while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

Коначно, програм изгледа овако:

Слика. 3.8.4. Програм за цртање круга

Сачувајмо програм под именом krug.py .

Програм можете преузети са

C CD → L.3.8 → krug.py

EDUKA-PORTAL

Page 47: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

151

Трећа фаза

Тестирање програма: Програм тестирамо одабиром опције Run → Run Module или притиском на тастер F5.

Слика. 3.8.5. Резултат извршавања програма за исцртавање круга

Након извршавања програма закључујемо да он ради правилно – исцртава круг.

% Допуни код одговарајућом наредбом тако да се исцртавају два круга, један унутар другог. Оба круга су с центром у центру прозора димензије 400 x 400. Већи круг је полупречника 120, а мањи трећину полупречника већег круга. Кружна линија је зелена и дебљине 2.

import pygamepygame.init()(sirina, duzina)=(400,400)prozor = pygame.display.set_mode((sirina, duzina))(cx, cy) = (sirina // 2, duzina // 2)poluprecnik=120pygame.draw.circle(prozor, pygame.Color("green"), (cx, cy),

poluprecnik, 2)

pygame.display.update()while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

% Упореди своје решење са нашим (CD → L.3.8 → dvakruga.py).

Исцртавање правоугаоника и круга

EDUKA-PORTAL

Page 48: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

152

Укратко 2 За исцртавање правоугаоника користи се функција: pygame.draw.rect(prozor, boja, (x, y, sirina, visina), debljina).

2 За исцртавање круга користи се функција: pygame.draw.circle(prozor,boja,(cx,cy),poluprečnik,debljina).

Питања и задаци:

1. Ако су ширина и висина екрана 400 пиксела, а правоугаоник је нацртан почев од (0, 400), где ће бити приказан правоугаоник?

2. Када цртате правоугаоник, шта се дешава ако је ширина линије нула?3. Напиши програм помоћу кога ћеш нацртати следећу слику знака

забране саобраћаја у једном правцу. Упореди своје решење са нашим CD → L.3.8 → zadatak3.py

Осврни се на лекцију Исцртавање правоуĪаоника и круĪа и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

2 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Предлажемо ти да проучиш садржај интерактивне лекције Цртање на порталу Петља. Лекцији можеш да приступиш скенирањем QR кода: или преко линка:

https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/ crtanje-toctree.

Саобраћајни знак

изричите забране

– забрана саобраћаја у

једном правцу

EDUKA-PORTAL

Page 49: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

153

3.9. исцртавање многоугла и исПисивање текста

Многоугао је геометријска фигура у равни ограничена затвореном изломљеном линијом. Има најмање три странице и исто толико углова.

Правоугаоник је многоугао који смо исцртавали коришћењем функције:

pygame.draw.rect(prozor, boja, (x, y, sirina, visina)).

Сваки четвороугао, па и правоугаоник, дефинисан је са четири тачке, тако да се правоугаоник може исцртати и коришћењем функције:

Свака тачка (теме) је листа од два броја, а сва темена дефинишу листу која се наводи као параметар функције.

Вратимо се на исцртавање правоугаоника с почетком у тачки (10, 10), ширине 200 и висине 100 пиксела. Неопходно је да дефинишемо листу темена тог правоугаоника.

Слика. 3.9.2. Дефинисање темена правоугаоника

Говорићемо о:

− исцртавању многоугла;− исписивању текста.

pygame.draw.polygon(prozor, boja, [teme1, teme2, teme3, teme4], debljina).

Слика. 3.9.1. Неколико многоуглова

Исцртавање многоугла и исписивање текста

EDUKA-PORTAL

Page 50: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

154

Покрећемо програм Пајтон, отварамо едитор кликом на File → New File и уносимо одговарајуће наредбе.

Коначно, програм изгледа овако:

Слика. 3.9.2. Програм за цртање правоугаоника

Сачувајмо програм под именом pravougaoniktemena.py.

Тестирање програма: Програм тестирамо одабиром опције Run → Run Module или притиском на тастер F5.

Након извршавања програма закључујемо да он ради правилно – исцртава правоугаоник. Програм можете преузети са CD → L.3.9 → pravougaoniktemena.py.

Алгоритам ПрограмУкључивање библиотеке Пајгејм

import pygame

Покретање (иницијализација) библиотеке Пајгејм

pygame.init()

Отварање прозора димензија 640 x 480 пиксела

prozor = pygame.display.set_mode((640, 480))

Дефинисање темена правоугаоника

temena = [(10, 10), (210, 10), (210, 110), (10, 110)]

Исцртавање правоугаоника

pygame.draw.polygon(prozor,pygame.Color("blue"), temena)

Освежавање садржаја прозора и приказивање исцртаног правоугаоника

pygame.display.update()

Искључивање Пајгејм библиотеке када корисник затвори прозор

while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

важно: Темена многоугла се у листи наводе или у смеру кретања казаљке сата или у супротном смеру од кретања казаљке на сату.

EDUKA-PORTAL

Page 51: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

155

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

Приказаћемо поруку Ala je lep ovaj svet! фонтом Calibri, величине 40, на белом екрану димензије 640 x 480 пиксела.

Прва фаза

Размишљање о проблему За приказивање текста потребно је да:

► креирамо променљиву која садржи информације о типу и величини фонта који ћемо користити (за креирање променљиве користимо функцију pygame.font.SysFont(nazivfonta,veličina); 

Први параметар је назив системског фонта ; Други параметар је величина фонта.

Уместо системског фонта можемо навести и друге фонтове (.ttf или .otf датотеке), користећи функцију pygame.font.Font());

► од жељеног текста креирамо слику која представља нацртани текст (за креирање слике користимо функцију font.render(tekst, True/False, boja) са три параметра;

Први параметар представља текст који се исписује; Други параметар је логичка вредност која одређује да ли ће се цртати

лепшим линијама; Последњи параметар је боја којом ће текст бити исписан.

% Допуни програмски кôд одговарајућом наредбом тако да се исцрта троугао као на слици.

import pygamepygame.init()prozor = pygame.display.set_mode((400, 400))

pygame.display.update()while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

% Упореди своје решење са нашим (CD → L.3.9 → trougao.py).

Системски фонт је инсталиран на нивоу оперативног система.

Исцртавање многоугла и исписивање текста

EDUKA-PORTAL

Page 52: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

156

► дефинишемо положај слике текста на екрану (слику постављамо на жељени положај помоћу функције prozor.blit();

Први параметар је слика; Други параметар су координате на које ће бити постављен горњи леви

угао слике.

Друга фаза

Покрећемо програм Пајтон, отварамо едитор кликом на File → New File и уносимо одговарајуће наредбе у складу са алгоритмом описаним у првој фази.

Алгоритам ПрограмУкључивање библиотеке Пајгејм

import pygame

Покретање (иницијализација) библиотеке Пајгејм

pygame.init()

Дефинисање димензије прозора (sirina и visina)

(sirina, duzina)=(640,480)

Отварање прозора задате димензије

prozor = pygame.display.set_mode((sirina, duzina))

Бојење позадине прозора у бело

prozor.fill(pygame.Color("white"))

Креирање променљиве font која чува информацију о фонту Calibri, величине 40

font=pygame.font.SysFont("Calibri",40)

Креирање променљиве poruka чија је вредност: Ala je lep ovaj svet!

poruka="Ala je lep ovaj svet!"

Креирање слике од плавог текста

tekst = font.render(poruka, True, pygame.Col-or("blue"))

Постављање слике текста на жељени положај на екрану (100, 100)

prozor.blit(tekst, (100, 100))

Освежавање садржаја прозора и приказивање слике текста

pygame.display.update()

Искључивање библиотеке Пајгејм када је корисник затворио прозор

while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

EDUKA-PORTAL

Page 53: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

157

Коначно, програм изгледа овако:

Слика. 3.9.3. Програм за приказивање текста

Сачувајмо програм под именом tekst.py . Програм можете преузети са CD → L.3.9 → tekst.py.

Трећа фаза

Исцртавање многоугла и исписивање текста

Тестирање програма: Програм тестирамо одабиром опције Run → Run Module или притиском на тастер F5.

Слика. 3.9.4. Резултат извршавања програма за приказивање текста

Након извршавања програма закључујемо да он ради правилно – приказује текст Ala je lep ovaj svet!.

EDUKA-PORTAL

Page 54: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

158

Укратко 2 Функција за цртање многоугла: pygame.draw.polygon(prozor, boja, [teme1, teme2, teme3, teme4], debljina)

2 Функција за дефинисање текста: pygame.font.SysFont(nazivfonta,veličina)

2 Функције за дефинисање ширине и висине текста: get_width(), get_height()

% Допуни кôд одговарајућом наредбом тако да текст буде приказан на средини екрана.import pygamepygame.init()(sirina, duzina)=(640,480)prozor = pygame.display.set_mode((sirina, duzina))prozor.fill(pygame.Color("white"))

font=pygame.font.SysFont("Calibri",40)poruka="Ala je lep ovaj svet!"tekst = font.render(poruka, True, pygame.Color("blue"))

#definiše se širina i visina teksta

#definiše se položaj teksta na sredini ekrana pomoću koordinata x i y

prozor.blit(tekst, (x, y))pygame.display.update()while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

% Упореди своје решење са нашим (CD → L.3.9 → modifikovantekst.py).

Mала помоћ: Положај текста дефинише се ширином и висином, координатама (x, y). Да би се текст приказао на средини екрана (прозора), најпре је потребно да се запамте вредности ширине и висине помоћу функција get_width() и get_height(), тачније:

(sirina_teksta, visina_teksta) = (tekst.get_width(), tekst.get_height()).Када су очитане вредности, координате положаја текста добијају се као половина

разлике између димензија екрана и димензија текста (текст је центриран јер се празан простор равномерно распоређује с његове обе стране).

Ширина се дефинише као: (sirina - sirina_teksta) / 2, а висина (visina - visina_teksta) / 2).

EDUKA-PORTAL

Page 55: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

159

Осврни се на лекцију Исцртавање мноĪоуĪла и исписивање текста и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

1 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Питања и задаци:

1. Анализирај следеће линије кода. Заокружи број испред слике која представља фигуру која ће бити исцртана.

temena = [(10, 10), (210, 110), (210, 10), (10, 110)] pygame.draw.polygon(prozor,pygame.Color("blue"), temena)?

a) б) в)

2. Опишите која су три корака потребна за испис текста на екрану.3. Написати програм за цртање плавог петоугла са теменима А = (146, 0),

B = (291, 106), C = (236, 277), D = (56, 277) и E = (0, 106). Упореди своје решење с нашим (CD → L.3.9 → petougao.py).

Предлажемо ти да проучиш садржај интерактивне лекције Цртање на порталу Петља. Лекцији можеш да приступиш скенирањем QR кода: или преко линка:

https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/ crtanje-toctree.

Исцртавање многоугла и исписивање текста

EDUKA-PORTAL

Page 56: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

160

3.10. учитавање слике и звука

Осим правилног рада, важно је да програми атрактивно изгледају. Корисници воле да раде у лепом окружењу. Постављањем квалитетне позадинске слике у прозор апликације на добром смо путу да им то и омогућимо.

Слике које ће се користити у програму је потребно претходно припремити. Припрема слике подразумева употребу неког од програма за обраду слика, у коме ће бити подешене димензије и формат слике. Величину слике је потребно ускладити са величином прозора програма. Неки од формата слика које подржава Пајгејм су: JPG, PNG, GIF, BMP, TIF. Препоручујемо ти да, за почетак, слике сачуваш у фасцикли у којој се налази датотека самог програма који ће те слике користити. Ово ти омогућава да слику користиш наводећи само њен назив, уместо целе путање до фасцикле у којој је сачувана.

На твом CD-у, у фасцикли L3.10, налази се слика sky.jpg.Слику sky.jpg учитавамо коришћењем наредбe:

pygame.image.load("sky.jpg")

Подсећамо те да слика мора да буде сачувана у истој фасцикли у којој се налази и програм. Да би учитана слика могла да се користи у програму, потребно је да креирамо променљиву slika која ће да прихвати вредност коју враћа наредба load():

slika = pygame.image.load("sky.jpg")

После учитавања слике потребно је да употребимо наредбу convert() како би слику превели из формата у којем је сачувана у формат који је погодан за приказивање на екрану:

slika = pygame.image.load("sky.jpg").convert()

Говорићемо о:

– учитавању позадинске слике– репродукција звука и музике

Напомена: Водите рачуна да слике које користите буди или оне које сте сами нацртали/фотографисали или оне које нису

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

EDUKA-PORTAL

Page 57: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

161

У програму који се извршава у прозору који је дефинисан као prozor, слику приказујемо наводећи наредбу:

prozor.blit(slika,(x,y))

Помоћу ове наредбе дефинишемо о којој слици се ради и где она треба да се прикаже на екрану. Први параметар наредбе јесте променљива у којој чувамо учитану слику, а други параметар су координате (x,y) којима дефинишемо положај горњег левог угла слике у прозору у коме се програм извршава.

Чини се да смо спремни да учитамо позадинску слику. Покрећемо IDLE, а затим и едитор кликом на File → New File.

Алгоритам ПрограмУкључивање библиотеке Пајгејм import pygameПокрећемо (иницијализујемо) Пајгејм библиотеку

pygame.init()

Oтвара прозор димензије 400x400 prozor = pygame.display.set_mode((400, 400))Поставља се наслов прозора pygame.display.set_caption("Pozadinska slika")Учитавамо слику slika = pygame.image.load("sky.jpg").convert()Све док је прозор отворен: – приказује се слика у горњем

левом углу и – врши се ажурирање садржаја

(слике) целог екрана

while pygame.event.wait().type != pygame.QUIT: prozor.blit(slika, (0, 0))pygame.display.flip()

Искључивање Пајгејм библиотеке pygame.quit()

Коначан изглед програма:

Слика. 3.10.1. Програм за приказ позадинске слике

Тестирање програма: Пајтон програм тестирамо одабиром опције Run→Run Module или притиском на тастер F5

Учитавање слике и звука

EDUKA-PORTAL

Page 58: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

162

Слика. 3.10.2. Резултат извршавања програма за приказ позадинске слике

На сличан начин можемо да учитамо слику pas.png која ће се појавити на средини екрана.

Покрећемо IDLE, а затим и едитор, кликом на File → New File.

Алгоритам ПрограмУкључивање библиотеке Пајгејм import pygameПокрећемо (иницијализујемо) Пајгејм библиотеку

pygame.init()

Oтвара прозор димензије 640x480

prozor = pygame.display.set_mode((640, 480))

Бојимо позадину прозора у бело. prozor.fill(pygame.Color("white"))Учитавамо слику slika = pygame.image.load("pas.png")Дефинишемо положај слике на средини прозора

(x, y) = ((sirina - slika.get_width()) / 2, (duzina- slika.get_height()) / 2)

Приказ слике са координатама (x, y)

prozor.blit(slika, (x, y))

Освежава се садржај прозора и приказује исцртана правоугаоник

pygame.display.update()

Искључивање Пајгејм библиотеке када је корисник затворио прозор

while pygame.event.wait().type != pygame.QUIT: passpygame.quit()

Програм можете преузети:

C CD→L3.10→ pozadinskaslika.py

EDUKA-PORTAL

Page 59: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

163

Коначан изглед програма:

Слика. 3.10.3. Програм за приказ слике

Тестирање програма: Пајтон програм тестирамо одабиром опције Run→Run Module или притиском на тастер F5.

Слика. 3.10.3. Резултат тестирања (покретања) програма за приказ слике

Након извршавања програма закључујемо да он ради правилно – приказује слику.

Програм можете преузети:

C CD → L3.10→ slikaSredina.py

Учитавање слике и звука

EDUKA-PORTAL

Page 60: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

164

Поред рада са сликама, Пајгејм пружа могућност рада са звучним записима, ефектима (Sound) и позадинском музиком (music) коришћењем модула mixer. Звучни ефекти су представљени у формату .wav или .ogg, a позадинска музика у формату .mp3 или .ogg. Главна разлика између звучних ефеката и позадинске музике је у томе што се у датом тренутку коришћењем позадинске музике може репродуковати само једна нумер на уређају.

Под звучним ефектима подразумевамо звуке који прате одређену радњу у програму (нпр. клик на дугме, скакање, ударање, летење, ...). Коришћењем модула mixer могуће је да се истовремено репродукује више звучних ефеката или се чак и исти звук може репродуковати више пута.

Као и када се ради са сликама, и звучни ефекти и позадинска музика морају да буду сачувани у фасцикли у којој се налази датотека самог програма у коме ће се користити звук и музика.

Звучни запис beep.wav учитавамо наводећи наредбу:

pygame.mixer.Sound('beep.wav')

Да би ова наредба радила, датотеку beep.wav морамо да сачувамо у фолеру у којем се налази наш програм. Mеђутим, да би звучна датотека могла да се користи у програму, неопходно је да креирамо променљиву zvuk која ће да прихвати вредност коју враћа наредба load():

zvuk = pygame.mixer.Sound('beep.wav')

Звучни ефекти се могу репродуковати више пута без поновне иницијализације или поновног уметања.

За репродукцију звука користимо наредбу play(), наводећије уз име променљиве у којој се чува учитана звучна датотека:

zvuk.play()

% Допуни код одговарајућом наредбом тако да се слика приказује у горњем углу екрана.

import pygame pygame.init() prozor = pygame.display.set_mode((400, 400)) slika = pygame.image.load("pas.png")

prozor.blit(slika, (x, y)) pygame.display.update() while pygame.event.wait().type != pygame.QUIT: pass pygame.quit()

% Упореди решење са нашим (CD→L.3.10.→ slika.py).

EDUKA-PORTAL

Page 61: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

165

Унутар заграда наредбе play() можемо да унесемо аргумент (број) који представља број понављања звучног записа. Ако се не наведе аргумент, звучни запис ће се репродуковати само једном. Ако се на пример, унесе вредност 1 звучни запис ће се репродуковати два пута, а ако се унесе вредност 499 репродуковаће се 500 пута.

Може да се догоди да Пајгејм не репродукује твоју .wav датотеку. Препоручујемо ти да овај проблем превазиђеш помоћу програма Audicity. Потребно је да спорну датотеку конвертујеш у формат .ogg. Овај формат звучног записа поуздан је за употребу у Пајгејму.

Креирајмо програм у коме се звук репродукује када је притиснут тастер p са тастатуре.

Изглед кôда:

Алгоритам Кôд

Укључивање библиотеке Пајгејм

import pygame

Покрећемо (иницијализујемо) Пајгејм библиотеку и модул Миксер

pygame.init()pygame.mixer.init()

Учитавање звучног записа Beep.wav

zvuk = pygame.mixer.Sound('Beep.wav')

Oтварамо прозор димензије 400x400 и постављамо наслов прозора

prozor = pygame.display.set_mode((400, 400))pygame.display.set_caption("Zvuk")

Сваки пут када прођемо кроз петљу тражи се прекид догађаја (да ли је корисник прекинуо извршавање програма) и ако га пронађемо, програм се прекида.

while True: for event in pygame.event.get() : if event.type == "QUIT": pygame.quit()

Репродукује се звук ако је притиснут тастер p

elif event.type == pygame.KEYDOWN: if event.key == ord ("p"): zvuk.play()

Реаговање на акције корисника реализује се кроз догађај (енг. event). Догађај може да буде притискање тастера на тастатури или дугмета на апликацији, померање миша, промена садржаја у пољу за унос текста и слично. Сваки пут када корисник помери миша, притисне неко дугме у апликацији или тастер на тастатури систем то бележи у облику догађаја који се региструје у нашем програму и на шта можемо одреаговати извршавањем неког програмског кода.

Наредба pygame.event.get() чува листу сваког догађаја који се десио од тренутка када је иницијализована Пајгејм библиотека. Ако се десио догађај клик на дугме за затварање прозора, тачније ако је event.type == "QUIT" извршава се наредба за искључивање Пајгејм библиотека.

Функција која враћа цео број који репрезентује слово „p”.

Учитавање слике и звука

EDUKA-PORTAL

Page 62: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

166

Коначан изглед програма:

Слика. 3.10.4. Изглед програма за репродукцију звучног ефекта Beep

Тестирањем програма одабиром опције Run→Run Module или притиском на тастер F5 звучни запис се репродукује када корисник притисне тастер p.

За разлику од pygame.mixer.Sound (), којим се учитава цео звучни ефекат у меморији рачунара, коришћењем pygame.mixer.music () врши се стиминг (пуштање) датотеке са рачунара. Стриминг подразумева учитавање датотеке део по део, оним редом у ком их је потребно репродуковати / обрадити. Пајгејм подржава само једну музичку нумеру.

За учитавање позадинске музике користимо наредбу:

pygame.mixer.music.load('muzika.mp3')

Ако желимо песму да репродукујемо користимо наредбу:

pygame.mixer.music.play()

Ова функција прихвата додатни аргумент. Први аргумент је број колико се пута репродукује музика (ако нема аргумента или је унета 0 музика се репродукује само једном, -1 репродукује се бесконачно, или на пример ако је унет број 4, музика ће се понављати 5 пута). Други аргумент представља време (у секундама) одакле креће репродукција позадинске музике.

Да би смо зауставили песму користимо наредбу:

pygame.mixer.music.stop()

EDUKA-PORTAL

Page 63: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

167

Креирајмо програм у коме се репродукује позадинска музика када је притиснут тастер p са тастатуре.

Анализирај код:

Алгоритам КодУкључивање библиотеке Пајгејм import pygame

Покрећемо (иницијализујемо) Пајгејм библиотеку и модул Миксер

pygame.init()pygame.mixer.init()

Учитавање позадинске музике Kalimba.mp3

pygame.mixer.music.load('Kalimba.mp3')

Oтварамо прозор димензије 400x400 и постављамо наслов прозора

prozor = pygame.display.set_mode((400, 400))pygame.display.set_caption("Zvuk")

Сваки пут када прођемо кроз петљу тражи се прекид догађаја (да ли је корисник прекинуо извршавање програма) и ако га пронађемо, програм се прекида.

while True: for event in pygame.event.get(): if event.type == "QUIT": pygame.quit()

Репродукује се музика само једном ако је притиснут тастер p

elif event.type == pygame.KEYDOWN: if event.key == ord ("p"): pygame.mixer.music.play(0)

Коначан изглед програма:

Слика. 3.10.5. Изглед програма за репродукцију позадинску музику Kalimba.mp3

Тестирањем програма одабиром опције Run→Run Module или притиском на тастер F5 позадинску музику се репродукује када корисник притисне тастер p.

Учитавање слике и звука

EDUKA-PORTAL

Page 64: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

168

Укратко 2 Слика, звук и музика треба да буде сачувана у фолдеру где је сачуван и

програм у коме се користе ове датотеке.

2 За учитавање слике: slika = pygame.image.load("slika.png")

2 За приказивање слике: prozor.blit(slika, (x, y))

2 За учитавање звука: zvuk = pygame.mixer.Sound('zvuk.wav')

2 За репродукцију музике: pygame.mixer.music.load('muzika.mp3')

2 За репродукцију звука и музике: play(broj,[vreme])

% Учитај програм за репродукцију позадинску музику Kalimba.mp3 са CD→L.3.10.→ Мuzika.py.

% Доради програм тако да се позадинска музика репродукује од трећег минута и 20 секунди (3:20).

% Упореди решење са нашим (CD→L.3.10.→ МuzikaDopunjen.py).

Mала помоћ: Претвори време од којег започиње репродукција позадинске музике у секунде.

Питања и задаци:

1. Шта у наредној линији кода screen.blit(background_image, (0, 0)) дефинише пар (0, 0)?

a) Приказивање слике на средини екрана. б) Дефинисана димензија (ширина и висина) слике. в) Дефинише координату x, y у горњем углу прозора одакле почети

приказивање слике на екрану.

2. Да ли би наредбу:

требало поставити у или ван програмске петље:

a) У петљи, јер слика мора да се исцртава сваки пут фрјем по фрејм. б) Ван петље, јер није добра идеја учитавати слику са диска 20 пута у секунди

slika = pygame.image.load("nebo.jpg").convert()

while pygame.event.wait().type != pygame.QUIT:

EDUKA-PORTAL

Page 65: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

169

Mала помоћ: Претвори време од којег започиње репродукција позадинске музике у секунде.

3. Да ли би наредба

требало да буде постављена у или ван програмске петље:

a) У петљи, јер слика мора да се исцртава сваки пут фрјем по фрејм. б) Ван петље, јер није добра идеја учитавати слику са диска 20 пута у секунди

4. Уочи грешку у коду:

a) Звук се не може учитати у главној програмској петљи while. б) Пајгејм не подржава формат .wav звучног записа. в) Звук мора да буде учитан на почетку програма, пре главне програмске петље.

screen.blit(slika, (0, 0))

while pygame.event.wait().type != pygame.QUIT:

while pygame.event.wait().type != pygame.QUIT: zvuk = pygame.mixer.Sound('Beep.wav') zvuk.play()

Осврни се на лекцију Учитавање слике и звука и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

2 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Предлажемо ти да проучиш садржај интерактивне лекције Цртање на порталу Петља. Лекцији можеш да приступиш скенирањем QR кода: или преко линка:

https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/crtanje-cas3

Учитавање слике и звука

EDUKA-PORTAL

Page 66: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

170

3.11. Aнимација

Анимација је поступак стварања илузије кретања. Већ смо говорили да се доживљај континуираног кретања постиже приказивањем низа статичних слика одређеном брзином.

Анализираћемо програм којим се симулира кретање лоптице скочице унутар Пајгејм прозора, у оквиру кога се програм извршава. Намера нам је да креирамо програм који симулира одбијање лоптице од ивице прозора. Лоптица се креће дуж целог екрана (и по хоризонтали и по вертикали). Када дође до ивице прозора, лоптица се одбија и наставља кретање.

Говорићемо о:

– креирању једноставне анимације

Алгоритам ПрограмУкључивање библиотеке Пајгејм import pygameПокрећемо (иницијализујемо) Пајгејм библиотеку

pygame.init()

Oтварамо прозор димензије 500x300prozor = pygame.display.set_mode((500, 300))

Постављамо наслов прозора pygame.display.set_caption("Лоптицаскочица")Дефинишемо брзину кретања лоптице (број сличица (фрејмова) у секунди)

brzinaKretanja = 30

Дефинишемо сат за праћење дефинисаног временског периода.

sat = pygame.time.Clock()

Дефинишемо позицију лопте на екрану (центар лопте)

x = 250y = 150

Постављамо хоризонтално и вертикално убрзање лоптице

Ubrzanje_x = 5Ubrzanje_y = -5

У бесконачној петљи се извршава извршавају наредба за:постављање боје позадине у белуисцртавање круга зелене боје, са центром у (x, y), пречника 10 и без линије (оквира) све док не пронађе догађај који ће је зауставити.

while True:prozor.fill(pygame.Color("white")) pygame.draw.circle(prozor, pygame.Col-or("green"), (x, y), 10, 0)

EDUKA-PORTAL

Page 67: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

171

Сваки пут када прођемо кроз петљу тражи се прекид догађаја (да ли је корисник прекинуо извршавање програма) и ако га пронађемо, програм се прекида.

for event in pygame.event.get(): if event.type == "QUIT": pygame.quit()

Такође, сваки пут када се пролази кроз петљу мења се и положај лоптице на екрану (и по хоризонтали и по вертикали).

x = x + Ubrzanje_x y = y + Ubrzanje_y

Освежава се садржај прозора и приказује исцртан зелени круг

pygame.display.update()

Дефинисање брзине кретања лоптице, у нашем случају 30 сличица у секунди.

sat.tick(brzinaKretanja)

Коначан изглед програма:

Слика. 3.11.1. Изглед програма за анимацију лоптице скочице (лоптице која се одбија од ивица прозора)

Пајтон програм тестирамо одабиром опције Run→Run Module или притиском на тастер F5.

Програм можете преузети:

C CD→L.3.11.→ animacija.py

Aнимација

У рачунарству 1. јануар 1970. године у 12 сати, представља посебно време, које се користи за почетак одбројавања времена. Овај посебан тренутак назива се епоха

(Computer Age). У Пајтону се време између садашњег тренутка и специјалног времена исказује у секундама. Тај временски период се зове Tick.

EDUKA-PORTAL

Page 68: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

172

Приликом тестирања уочавамо грешку: лоптица се не одбија од ивице прозора.

Исправљање грешке: Потребно је ограничити кретање лоптице унутар прозора и њен смер у тренутку када стигне до ивице прозора. То постижемо постављањем услова у коме се лоптица по хоризонтали креће у интервалу од 10 до 490 (if x > 490 or x <10:), а по вертикали од 10 до 290 (if y >290 or y <10:).

Промену правца кретања лоптице постижемо множењем променљивих Ubrzanje_x и Ubrzanje_y са -1:

if x > 490 or x <10: Ubrzanje_x *= -1if y >290 or y <10: Ubrzanje_y *= -1

Коначан изглед кода:

Слика. 3.11.2. Исправљен програм за анимацију лоптице скочице (лоптице која се одбија од ивица прозора)

Шта би се догодило ако би услов да се лоптица

одбија од ивица прозора био дефинисан овако:

if x > 500 or x <0: Ubrzanje_x *= -1 if y >300 or y <0: Ubrzanje_y *= -1

Образложи свој одговор.

Програм можете преузети:

C CD→L.3.11.→ animacijaIspravljeno.py

EDUKA-PORTAL

Page 69: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

173

Пајтон програм тестирамо одабиром опције Run→Run Module или притиском на тастер F5. Програм сада ради како треба, лоптица се одбија од ивица прозора.

% Анализирај код:

import pygame import random pygame.init() prozor = pygame.display.set_mode((500, 300)) pygame.display.set_caption('Lopticaskočica') brzinaKretanja = 30 sat = pygame.time.Clock() x = random.randint(0,250) y = random.randint(0,150)

Ubrzanje_x = 5 Ubrzanje_y = -5

while True: prozor.fill(pygame.Color("white")) pygame.draw.circle(prozor, pygame.Color("green"), (x, y), 10, 0) for event in pygame.event.get(): if event.type == "QUIT": pygame.quit() x = x + Ubrzanje_x y = y + Ubrzanje_y if x > 490 or x <10: Ubrzanje_x *= -1 if y >290 or y <10: Ubrzanje_y *= -1 pygame.display.update() sat.tick(brzinaKretanja)

% Шта је дефинисано означеним линијама кода? Објасни.

% Можете преузети програм (CD→L.3.13.→ animacijaRandom.py).

Aнимација

EDUKA-PORTAL

Page 70: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Рачунарство

174

Укратко 2 Дефинисање сата за праћење одређеног временског периода: sat = pygame.time.Clock()

2 Дефинисање покрета (откуцаја сата): sat.tick()

Питања и задаци:

1. У горњем примеру Лоптице скочице, ако је вредност променљиве којом је дефинисано вертикално убрзање лоптице негативна, а вредност променљиве којом је дефинисано хоризонтално убрзање лоптице позитивна, у ком правцу ће се кретати лоптица?

2. У горњем примеру Лоптице скочице, ако је вредност променљиве којом је дефинисано вертикално убрзање лоптице позитивна, а вредност променљиве којом је дефинисано хоризонтално убрзање лоптице једнака нули, у ком правцу ће се кретати лоптица?

3. Анализирај доњи код.

Исправи и допуни програм тако да се квадрат беле боје креће и одбија од ивица прозора.

Упореди своје решење са нашим: CD→L.3.11.→ animacijaKvadrat.py

a) левоб) десно

в) горег) доле

д) на доле деснођ) на доле лево

е) на горе десно

ж) левоз) десно

и) гореј) доле

к) на доле деснол) на доле лево

м) на горе десно

import pygamepygame.init()prozor = pygame.display.set_mode((700,500))

clock = pygame.time.Clock()Ubrzanje_x = 5Ubrzanje_y = 5

while True:prozor.fill(pygame.Color("black")) pygame.draw.rect(prozor, pygame.Color("white"), (x, y, 50, 50))

for event in pygame.event.get(): if event.type == "QUIT": pygame.quit() x = 50 y = 50

x = x + Ubrzanje_x y = y + Ubrzanje_y

pygame.display.update() clock.tick(20)

EDUKA-PORTAL

Page 71: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

175

Предлажемо ти да проучиш садржај интерактивне лекције Aнимације на порталу Петља. Лекцијама можеш да приступиш скенирањем QR кода:

или преко линка: https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/ animacije-toctree

Осврни се на лекцију Анимације и одговори на следећа питања:

1 Шта је, по твом мишљењу, најважније што си данас научио/научила?

2 Да ли ти је нешто остало нејасно? Ако јесте, шта?

Можеш ли да осмислиш начин да додатно напредујеш? Напиши неколико идеја.

Aнимација

EDUKA-PORTAL

Page 72: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Вежбаоница 2

176

Задатак 1.

Која линија кода ће да отвори прозор висок 400 пиксела и широк 800 пиксела?

a) size = [400, 800] screen = pygame.display.set_mode(size) screen = pygame.display.open_window(400, 800)

б) size = [800, 400] screen = pygame.display.set_mode(size)

в) size = 400, 800 screen = pygame.display.set_mode(size)

г) screen = pygame.display.open_window(800, 400) size = 800 x 400д) screen = pygame.display.set_mode(size)

Задатак 2.

Која линија кода ће нацртати линију са координата (0, 0) до (100, 100)?

a) pygame.draw.line(5, GREEN, [0, 0], [100, 100], screen)б) pygame.draw.line(screen, GREEN, [0,0,100,100], 5)в) pygame.draw.line(GREEN, screen, 0, 0, 100, 100, 5)г) pygame.draw.line(screen, GREEN, [0, 0], [100, 100], 5)д) pygame.draw.line(screen, GREEN, 0, 0, 100, 100, 5)

Вежбаоница 2

Вежбаоницу треба да схватиш као прилику да научиш или боље разумеш програмирање у Пајтону.

Пред тобом су задаци:

Покушај да урадиш сваки од њих. Решења задатака која ти нудимо упореди са својим решењима или их искористи као помоћ при решавању задатака.

основног нивоа

средњег нивоа

напредног нивоа

EDUKA-PORTAL

Page 73: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

177

Вежбаоница 2

Задатак 3.

Нацртај елипсу плаве боје са почетком у (10, 10), ширине 200 и висине од 100 пиксела.

Упореди решење са нашим (CD→ Vezbaonica 2→ V2Z3.py).

Задатак 4.

Напиши програм којим се учитава слика и приказује у доњем десном углу екрана. Слику папагаја учитај из датотеке pas.png .

Упореди решење са нашим (CD→ Vezbaonica 2→ V2Z4.py).

Задатак 5.

Напиши програм који црта концентричне кругове чији је центар у центру екрана, а полупречници су редом 10, 20, …, 100 пиксела. Сваки круг нацртати црвеном линијом дебљином 5 пиксела. *

Упореди решење са нашим (CD→ Vezbaonica 2→ V2Z5.py).

Задатак 6

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

Упореди решење са нашим (CD→ Vezbaonica 2→ V2Z6.py).

Задатак 7

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

Упореди решење са нашим (CD→ Vezbaonica 2→ V2Z7.py).

* Текст задатка преузет са сајта https://petlja.org.

Mала помоћ: За исцртавање елипсе користи се функција:

pygame.draw.ellipse(prozor, boja, (x, y, sirina, duzina), debljina)

За елипсу користе се границе за ицртавање правоугаоника. Најчешћа грешка у раду са елипсом је да је почетна тачка одређује центар елипсе.

EDUKA-PORTAL

Page 74: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

Вежбаоница 2

178

Задатак 8.

Напиши програм којим се исцртавају олимпијски кругови (као на слици).

Упореди решење са нашим (CD→Vezbaonica 2→ V2Z8.py).

Задатак 9.

Напиши програм којим се учитава слика папагаја и приказује тако да су папагаји распоређени тако да стоје једна поред другог, на врху прозора. Слику папагаја учитај из датотеке papagaj.png .

Упореди решење са нашим (CD→ Vezbaonica 2→ V2Z9.py).

Задатак 10.

Напиши програм којим се учитава слика куце и приказује тако да су куце распоређени тако да стоје једна поред другог, дну прозора. Слику куце учитај из датотеке kuca.png .*

Упореди решење са нашим (CD→ Vezbaonica 2→ V2Z10.py).

* Текст задатка преузет са сајта https://petlja.org.

EDUKA-PORTAL

Page 75: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

179

Истраживачки пројекат

ИСТРАЖИВАЧКИ ПРОЈЕКАТ

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

Предлажемо ти да одабереш једну од понуђених тема:

► Да ли живим здраво? – Истраживање концепта „здрав начин живота”, утврђивање у којој мери лични начин живота ученика одговара овом концепту на основу података добијених програмирањем физичког уређаја да врши функцију бројача корака, креирањем програма за израчунавање индекса телесне масе...

► Дигитална башта. – Истраживање услова за узгој зачинског биља у затвореном простору, креирање дигитализоване баште – програмирање физичког уређаја да мери влажност земљишта и сигнализира да ли је заливање потребно, или програмирање физичког уређаја да, на основу очитане влажности земљишта, покреће мотор који омогућава аутоматско заливање; програмирање физичког уређаја да мери ниво осветљености места на коме се башта налази и сигнализира да башту треба поставити на друго место...

► Бицикл са сигнализацијом. – Истраживање концепта „безбедност у саобраћају” у контексту визуелне сигнализације, програмирање физичког уређаја да симулира рад мигаваца и других визуелних обележја бицикла

Концепт – план, нацрт, скица.

EDUKA-PORTAL

Page 76: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

180

Истраживачки пројекат

► Интерактивни албум. – Израда програма у виду албума са: делима познатог уметника, архитектуре једне епохе, седам чуда Античког света... које се након клика увеличавају, неко време остају увећане, а затим смањују на своје почетне димензије.

► Ово је кретање. – Креирање анимираних модела који приказују промене физичких величина, као на пример: брзина, убрзање, потенцијална и кинетичка енергија, а при задатом кретању објекта – вертикални хитац, кретање тела низ стрму раван.

Већ знаш да пројекат није активност која се дешава случајно, већ има своју специфичну структуру. Подсећамо те на њене најважније елементе.

1. Одабир теме и сарадника

а. Размисли о понуђеним темама и одабери једну којом ћеш се бавити наредна три школска часа.

б. Пронађи сараднике – другове и другарице који се интересују за исту тему. Формирајте тим.

в. Дефинишите истраживачки задатак.

2. Пројектне активности

а. У оквиру тима, дефинишите пројектне активности. б. Одредите реализаторе за сваку од активности.в. Одредите временски оквир за реализацију активности.г. Представите резултате активности (дигиталне слике, текстове и звучне

записе) свим члановима групе.

3. Представљање резултата пројекта публици

а. Направите програм у Пајтону поштујући све три фазе израде програма. Размислите о проблему и напишите или нацртајте алгоритам (кораке)

за његово решавање. У складу са алгоритмом, направите програм у Пајтону. Тестирајте и анализирајте рад програма. Исправите грешке (ако их има).б. Осмислите сценарио за усмену презентацију. в. Поделите улоге.

4. Лични осврт на пројектне активности

а. Размисли о проблемима који су се јављали и начинима на које су превазиђени.

б. Утврди које одлуке су биле добре, а које погрешне. в. Да ли је тим функционисао добро или је било одређених проблема?

EDUKA-PORTAL

Page 77: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

181

Истраживачки пројекат

5. Процена успешности пројекта

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

б. Формирајте листу закључака чијом применом би пројекат био ефикасније реализован.

И овога пута, ту смо да ти помогнемо. Показаћемо ти један од могућих начи-на да осмислиш и спроведеш пројекат који укључује програмирање у Пајтону.

Да бисмо реализовали пројекат Да ли живим здраво? поделићемо га у две фазе:

► програмирање Микробит уређаја коришћењем Мју едитора – Бројач корака (педометар);

► креирање програма у Пајтону којим се на основу података са микроби-та израчунава индекс телесне масе, као и колика је утрошена енергија у зависности од броја корака и растојања.

Прва фаза → Бројач корака (педометар)

Ходање представља физичку активност којом се могу бавити готово сви. У жељи да прате своју физичку активност, људи све чешће користе једноставне апликације и уређаје којима могу пратити напредак и резултате свог тренинга. Већина тих апликација бележи покрет (направљене кораке), док неке рачунају и приказују колико је особа утрошила енергије прелазећи одређени броја корака (kcal) и растојање (км).

Потребно је да креирамо уређај – Педометар којим ћемо бројати кораке. За израду овог уређаја потребан нам је Микробит који ћемо програмирати коришћењем МикроПајтона.

Калорија је мерна јединица за енергију.

Француски физичар и хемичар Николас Клемент је 1824. године први дефинисао калорију као јединицу топлоте. Име калорија је изведено од латинске речи „calor“ што у преводу, значи топлота.

Велика калорија, кило калорија или нутрициона калорија (скр. kcal) представља количину енергије потребну за повећање температуре једног килограма воде за један степен целзијуса.

Помоћни материјал за реализовање ове фазе пројекта можете наћи на страници 183 овог уџбеника.

EDUKA-PORTAL

Page 78: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

182

Истраживачки пројекат

Код Објашњење

from microbit import * укључивање библиотеке за рад са микробитом

broj_koraka = 0 вредност променљиве постављена је на почетку на 0.

while True:

омогућава да се део програма понавља неограничен број пута све док је микробит укључен (или се у њега не учита неки други програм).

if accelerometer.was_gesture("shake"): broj_koraka += 1

ако је направљен неки покрет, тако што се Микробит протресе ("shake"), увећај бројач broj_koraka за 1.

if button_a.was_pressed(): if broj_koraka > 5000: display.show(Image.YES)

ако је тастер А притиснут на Микробиту, и број корака је већи од 3000 на Микробиту ће бити приказана слика

else: for x in range(3): display.show(Image.NO) sleep(500) display.clear()

у супротном, ако није притиснут тастер А, биће приказана слика и 500 милисекунди, екран на Микробиту ће бити обрисан

if button_b.was_pressed(): display.scroll(broj_koraka)

ако је притиснут тастер B на Микробиту приказује се на екрану број остварених корака

if button_a.is_pressed() and button_b.is_pressed(): broj_koraka = 0

када корисник притисне оба тастера, и тастер А и тастер B, ресетује се број корака, и вредност променљиве broj_koraka се поставља на 0.

Анализирајте код у доњој табели:

EDUKA-PORTAL

Page 79: EDUKA-PORTAL · На наредним часовима програмираћемо у ... поређења било нам је неопходно за израду већине

183

Истраживачки пројекат

Код Објашњење

from microbit import * укључивање библиотеке за рад са микробитом

broj_koraka = 0 вредност променљиве постављена је на почетку на 0.

while True:

омогућава да се део програма понавља неограничен број пута све док је микробит укључен (или се у њега не учита неки други програм).

if accelerometer.was_gesture("shake"): broj_koraka += 1

ако је направљен неки покрет, тако што се Микробит протресе ("shake"), увећај бројач broj_koraka за 1.

if button_a.was_pressed(): if broj_koraka > 5000: display.show(Image.YES)

ако је тастер А притиснут на Микробиту, и број корака је већи од 3000 на Микробиту ће бити приказана слика

else: for x in range(3): display.show(Image.NO) sleep(500) display.clear()

у супротном, ако није притиснут тастер А, биће приказана слика и 500 милисекунди, екран на Микробиту ће бити обрисан

if button_b.was_pressed(): display.scroll(broj_koraka)

ако је притиснут тастер B на Микробиту приказује се на екрану број остварених корака

if button_a.is_pressed() and button_b.is_pressed(): broj_koraka = 0

када корисник притисне оба тастера, и тастер А и тастер B, ресетује се број корака, и вредност променљиве broj_koraka се поставља на 0.

Коначан изглед кода:

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

Приликом реализације ове друге фазе сарађујете са наставницима биологије, физичког васпитања и лекарима нутриционистима, како бисте направили што бољи план исхране и активности које доприносе здравом животу.

Структуру пројектне документације (ProjektnaDokumentacija.docx), која ће твом тиму бити од помоћи при планирању и реализацији пројектних активности, можеш да пронађеш на CD-у, у фасцикли Projekat – Racunarstvo.

CCD→Projekat- Racunarstvo→ Projekat.py

Програм бројања корака

Структурa пројектне документације:

EDUKA-PORTAL