Скратите писање програма

У претходном поглављу је било задатака у којима би нам било згодно да имамо скраћени запис за неке акције које се понављају. На пример, било је потребно да Карел иде три корака напред. У случају само три корака није проблем да напишемо наредбу napred() три пута, међутим када Карел треба да направи дванаест корака напред, ако пишемо:

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

Наредба for

Бољи начин задавања оваквог кретања би био да кажемо: „дванаест пута иди напред”. Да бисмо неку наредбу (или групу наредби) поновили одређени број пута, користимо наредбу for. Најчешће коришћени облик ове наредбе У Пајтону изгледа овако:

Касније ћемо се упознати са још неким облицима наредбе for.

Наш пример са дванаест понављања једног корака напред се помоћу for наредбе може записати овако:

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

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

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

  • Запис range(n) представља опсег целих бројева почевши од 0, а n говори колико бројева садржи тај опсег. На пример range(3) је опсег који садржи бројеве 0, 1, 2, а range(7) је опсег са бројевима 0, 1, 2, 3, 4, 5, 6.

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

Запис for i in range(3) би требало читати: „за i у опсегу [0, 1, 2]”. То значи да ће се наредбе у телу for наредбе извршити по једанпут за i=0, i=1, i=2, дакле укупно три пута. Ми у телу for наредбе за сада нећемо користити вредност i, тако да нам је битно само колико опсег има вредности (број иза range у загради), јер ће се тело for наредбе толико пута извршити.

Да би било јасно које наредбе чине тело for наредбе, те наредбе се пишу увучено (померено у десно), и то све за исти број размака. Можемо сами да одаберемо колико размака користимо за увлачење наредби у телу for наредбе. Било би добро да то увек буде исти број, јер ћемо тако навићи да одређени изглед програма и лакше га читати. Најчешће је то 4 размака, па ћемо и ми увлачити тело for наредбе за четири места.

Наредба for се често зове и наредба понављања. Такође је позната и као петља (енгл. loop), јер кретањем у програму по наредбама које извршавамо, кад наиђемо на наредбу for кружимо одређени број пута по наредбама у њеном телу, то јест правимо петљу. Изрази „петља” или „наредба понављања” су мање прецизни, јер као што ћемо ускоро видети, наредба for није једина петља, односно наредба понављања. Реч „петља” обично користимо када је јасно (или небитно) о којој наредби говоримо, јер лакше је рећи на пример „тело петље”, него „тело for наредбе”.

Задаци за вежбу

Помери се петнаест поља напред и узми лоптицу

Напиши програм на основу којега ће се Карел померити на поље (16, 1) и покупити лоптицу.

У простору за решавање вас чека дужи (и ружнији) програм. Покушајте да га замените for наредбом. У случају да вам решење са for наредбом не проради (што се у почетку често дешава), решење можете да видите када кликнете на дугме „Решење” испод.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_for_15_steps_and_take)

Иди једно поље напред и покупи 10 лоптица

Испред Карела је тачно једно поље, а на њему 14 лоптица. Карел треба да их покупи тачно десет.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_for_one_square_take_10_balls)

Узимај по једну лоптицу на наредних 8 поља

Испред Карела је осам поља, а на сваком од њих по једна лоптица. Карел треба да покупи све лоптице.

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

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_for_EightSquaresOneBallEach_TakeAllBalls)

Покупи по 5 лоптица са наредна три поља

Испред Карела су три поља, а на сваком од њих по пет лоптица. Карел треба да покупи све лоптице.

Please try loading this page in HTML5 enabled web browsers. All the latest versions of famous browsers such as Internet explorer, Chrome, Firefox, Opera support HTML5.

(Karel_for_Take_5_5_5)