Садржај
1. Робот Карел - линијски програми и бројачка петља
2. Робот Карел - условна петља и гранање
3. Робот Карел - задаци за вежбање
4. Корњача графика - линијски програми и петље
5. Корњача графика - гранање, угнежђене петље, функције, торке и листе
6. Корњача графика - задаци за вежбање
9. Израчунавања - коришћење и дефинисање функција
10. Израчунавања - задаци за вежбање
13. Контрола тока - вежбање
17. Програмирање 2Д графике - Увод у Pygame

15.1. Примена петље у торци, листи и ниски

До сада смо бројачку петљу for користили само у комбинацији са функцијом range чиме смо постизали да бројачка променљива узима бројевне вредности из неког опсега. У овом поглављу ћемо се упознати и са другим облицима коришћења петље for који ће нам омогућити да анализирамо један по један елемент садржан у некој структури података.

Пролазак кроз торку/листу/ниску

Петља for ... in ... : се може употребити и да се проће кроз све елементе неке дате торке/листе/ниске. На пример, ако је l листа, тада for i in l: проузрокује да променљива i узима редом елементе листе l, по један у сваком кораку. Илуструјмо то следећим примером.

Оперативни системи

Дата је листа у којој се налази списак неколико оперативних система. Исписаћемо све елементе ове листе (сваки у посебној линији).

Други начин је да употребимо бројачку променљиву и да елементима листе приступамо на основу индекса. На тај начин уз сваки систем можемо исписати и његов редни број. Бројачка променљива узима редом вредности од 0, па све до броја који је за један мањи од дужине листе. Ако редни бројеви иду од 1 па до дужине листе, редни број је у сваком кораку за један већи од вредности бројачке променљиве.

Иако је некада неопходно употребити и овај приступ, јасно је да се у првој варијанти добија јаснији и лепши текст програма.

Годишња доба

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

У овом задатку ћемо више пута пролазити кроз једну исту листу, па ћемо употребити приступ на основу индекса. Ако су имена годишњих доба написана у једној листи, тада је потребно исписивати редом елементе на позицијама 0, 1, 2, 3, затим опет 0, 1, 2, 3, и тако даље. Ако направимо петљу у којој ће бројачка променљива узимати редом вредности од 0 до 19 (то је 20 годишњих доба која се смењују током пет година), тада се серија бројева 0, 1, 2, 3, 0, 1, 2, 3… може добити тако што се узимају остаци при дељењу бројева од 0 до 19 бројем 4. Имајући ово у виду, исправи наредни програм.

Пролазак кроз листу парова имена и презимена научника

У петљи можемо проћи и кроз све елементе листе парова.

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

Формирај прво списак неколико научника.

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

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

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

Свако слово у посебном реду

Већ сте видели да се у многим случајевима ниска може користити веома слично као листа карактера. У том светлу, могуће је у петљи проћи кроз све карактере ниске.

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

Примена истог израчунавања на више података

У неколико примера које смо срели до сада исто израчунавање применили смо на више различитих података. Хајде да размотримо један пример тог типа.

Последњи контролни

Петар је током полугодишта радио четири контролна задатка и добијао је редом оцене 3, 5, 4, 2. Јуче је радио последњи контролни задатак и занима га која ће му бити закључна оцена ако добије 1, 2, 3, 4 или 5. Напиши програм који то одређује.

Пошто оцене које анализирамо чине опсег природних бројева, уместо навођења вредности у торки, могли смо употребити и петљу облика for poslednja_ocena in range(1, 6):.

Учитавање и обрада листе

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

Просек учитаних оцена

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

Елементе у листу можемо учитати тако што кренемо од празне листе (листе []), а затим у петљу учитавамо један по један елемент и додајемо га у листу методом append.

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

Трајање путовања

Трајање путовања зависи од брзине и растојања. Претпоставимо да у 8:35 крећемо из Београда до Новог Сада и да треба да пређемо пут од 93,38 km. Напиши скрипт који израчунава када ћеш стићи у Нови Сад ако се крећеш просечном брзином од a) 120km/h, b) 110km/h и c) 100km/h.

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

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

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

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

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

Једна важна поука овог задатка је да разлика у брзини од целих 20 km/h, што је разлика између опуштене вожње и јурцања по ауто-путу уз кршење прописа и што често може бити разлика између живота и смрти на овој релацији утиче на време пута мање од 10 минута. Дакле, опрезном вожњом се не губи пуно времена, а пуно се добија.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+