1.3. Бројачка петља for¶
Често робот исту наредбу треба да понови више пута. Такви програми једноставније се пишу коришћењем петљи.
У наставку ћеш се детаљније упознати са бројачком петљом.
Иди 8 поља напред¶
У наредном лавиринту постоји осам поља испред робота. Коришћењем петље покрени робота тако да дође до лоптице и да је затим покупи.
Један начин да решимо задатак је да роботу осам пута задамо наредбу да иде напред и затим наредбу да покупи лоптицу.
Замисли колико би досадно било куцати десет или сто пута наредбу да робот иде напред када би лавиринт био већи.
Пошто се у програмима често јавља потреба да се неке наредбе понављају, сви програмски језици обезбеђују начин да се
то постигне. У програмском језику Python, који наш робот Карел разуме, понављање се постиже коришћење наредбе for
.
Понављања у програмима се називају циклуси или петље (по чему је наша фондација Петља добила име). Погледај како се
претходни програм може скратити употребом петље for
.
Важна напомена: Приметићеш да је наредба napred()
увучена.
То значи да она припада петљи for
. Наредба uzmi()
није увучена,
што значи да она не припада петљи for
.
Овде смо употребили петљу for i in range(n):
што је уобичајени
начин да се изрази да се наредбе наведене у телу петље извршавају
n пута (ми смо уместо n навели 8
, чиме смо постигли то да
се наредба napred()
изврши осам пута). Овим смо дакле рекли:
„Понови осам пута корак напред.“
Да смо уместо 8 ставили неки други број, на пример 5, робот би корачао напред пет пута.
Уместо i
смо могли употребити и неко друго
слово или реч (или знак _
).
Наредбе које се понављају (за њих се каже да чине тело петље)
обавезно се морају увући у односу на наредбу for
(обично помоћу
неколико размака, најчешће 4, или једног табулатора, тј. карактера
Tab, који се на тастатурама налази лево од тастера Q). Када се
петља заврши, извршава се наредба која је наведена иза петље и то
поравната са речју for
(у претходном програму то је наредба
uzmi()
). Наредба uzmi()
након петље for
није увучена, што
значи да се она извршава само једном и то када се заврши извршавање
петље for
, тј. када се њено тело изврши одговарајући број
пута. Када би она била увучена, и она би се понављала.
Резимирајмо све горе наведено у следећој видео-илустрацији:
Неке од честих грешака¶
Нагласимо да се на крају линије у којој се употребљава наредба for
обавезно стављају две тачке,
тј. симбол „:“ .
Ако се оне не наведу, добићеш поруку о грешци:
SyntaxError: bad input on line ???
Ово значи „Синтаксна грешка: лош унос на линији ???“ – број линије ти може указати на то где је грешка направљена
(немој да заборавиш да провериш и линију изнад ове). Веома честа грешка програмера почетника је да забораве две тачке
на крају наредбе for
– обрати пажњу на тај важан детаљ.
Ако заборавиш да увучеш тело петље, поново ћеш добити поруку:
SyntaxError: bad input on line ???
Још једна грешка која може наступити услед неодговарајућег увлачења наредби је и:
IndentationError: unindent does not match any outer indentation level on line ???
На енглеском језику IndentationError
значи „Грешка у увлачењу“.
У складу са претходном дискусијом, исправи наредни програм.
Петљама ћемо се много детаљније бавити у поглављу **Понављање**.
Иди седам поља напред¶
Пробај сада самостално да допуниш наредни програм тако да робот покупи лоптицу. Не заборави да робот, пре петље, треба да се окрене у правом смеру.
Карел треба прво да се окрене налево, затим да иде седам пута напред и на крају да узме лоптицу. Прекопирај наредни код у претходни програм и испробај га.