Скратите писање програма¶
У претходном поглављу је било задатака у којима би нам било згодно да имамо скраћени запис за неке акције које се понављају. На пример, било је потребно да Карел иде три корака напред. У случају само три корака није проблем да напишемо наредбу 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
наредбом не проради (што се у почетку често дешава), решење можете да видите када кликнете на дугме „Решење” испод.
(Karel_for_15_steps_and_take)
Иди једно поље напред и покупи 10 лоптица¶
Испред Карела је тачно једно поље, а на њему 14 лоптица. Карел треба да их покупи тачно десет.
(Karel_for_one_square_take_10_balls)
Узимај по једну лоптицу на наредних 8 поља¶
Испред Карела је осам поља, а на сваком од њих по једна лоптица. Карел треба да покупи све лоптице.
Приметите да сада у for петљи треба урадити две ствари: коракнути напред и узети лоптицу.
(Karel_for_EightSquaresOneBallEach_TakeAllBalls)
Покупи по 5 лоптица са наредна три поља¶
Испред Карела су три поља, а на сваком од њих по пет лоптица. Карел треба да покупи све лоптице.
(Karel_for_Take_5_5_5)