Съкратете програмите си¶
В предишната глава имаше задачи, при които би било удобно да имаме по-кратък начин да посочим някои повтарящи се действия. Например, Карел трябваше да извърви три стъпки напред. В случай на само три стъпки е достатъчно лесно да напишете три пъти операцията move (), но когато Karel трябва да направи, да речем, дванадесет стъпки напред, ако напишем:
такъв начин на писане на програми е по-предразположен към грешки и също така е по-труден за четене. Ако смятате, че дори дванадесет повторения не са проблем, имайте предвид, че в света на програмирането не е рядкост цикълът да бъде повторен милион пъти.
For цикълът¶
По-добър начин да се уточни подобна маневра би било да се каже „дванадесет пъти напред“. За да повторим цикъла определен брой пъти, използваме for оператор. Най-често използваната форма на този цикъл в Python изглежда така:
По-късно ще видим и някои други форми на цикъла for.
Примерът с дванадесет повторения на една стъпка напред може да бъде написан по този начин:
Тук даваме малко по-подробно описание на цикъла. Понастоящем не е необходимо да го разбирате напълно - използването и правилата за писането му ще станат по-ясни със следните примери. Ако имате нужда от повече подробности за for по-късно, можете да се върнете към това обяснение (но имайте предвид, че то не описва други форми на цикъла for).
Според правилата за писане на програми в Python,
for
иin
, както и двоеточието:
в края на реда са задължителни условия на оператора for.Буквата i тук служи като мястото, където съхраняваме броя на повторенията.
range(n)
представлява диапазон от цели числа, започващи с 0, и n показва колко числа съдържа този диапазон. Например, обхват (3) е диапазонът, съдържащ числата 0, 1, 2, а диапазонът (7) е диапазонът на числата 0, 1, 2, 3, 4, 5, 6.Следващите редове съставят така нареченото тяло на цикъла for. Това могат да бъдат всякакви оператори в Python, включително за управление на Karel, други за оператори или някои операции, които все още не сме споменавали. В тялото на цикъла може да има един или повече такива оператори.
В i в диапазон (3) се интерпретира като: „стойност i в диапазона [0, 1, 2]“. Това означава, че операторите в тялото на оператора for се изпълняват веднъж за i = 0, за i = 1 и за i = 2, така че общо три пъти. Засега няма да използваме стойността на i в тялото на оператора, така че само трябва да знаем колко стойности има в диапазона (това е числото в скоби зад диапазона на думите), тъй като операциите в тялото ще бъдат изпълнява този брой пъти.
За да се изясни какви оператори са в тялото на for, тези оператори се пишат с отстъпи (преместени надясно), всички за същия брой интервали. Можем да изберем броя на интервалите за отстъпи за всяко за операция. Добра практика е обаче винаги да избираме един и същ номер, защото по този начин ще свикнем с определеното оформление на програмата и кодът ще бъде по-четим. Най-често срещаният избор за отстъп са 4 пространства, така че ние също ще го приемем.
For е известен също като цикъл, тъй като следвайки операторита, които изпълняваме, когато стигнем до оператора for, ние преглеждаме няколко пъти през операторите в неговото тяло. Терминът „цикъл“ е по-малко прецизен, както скоро ще видим, операторът for не е единственият цикъл, който съществува. Думата “цикъл” обикновено се използва, когато е ясно (или не е от значение) за кой точно изказване на цикъла говорим, тъй като е по-лесно да се каже, например, “тяло на цикъла”, а не за “тяло на оператора”.
Задачи за упражнения¶
Преместете се петнадесет полета напред и вземете топката¶
Напишете програма, въз основа на която Карел ще се премести на поле (16, 1) и ще вземе топката.
По-дълга програма ви очаква в областта на решението. Опитайте да го замените с for. В случай, че вашето решение с for statement не работи (което често се случва в началото), можете да видите нашето решение, като кликнете върху бутона „Solution“ по-долу.
(Karel_for_15_steps_and_take)
Преминете едно поле напред и съберете 10 топки¶
Има едно поле пред Карел, а на него има 14 топки. Карел трябва да вземе точно десет топки.
(Karel_for_one_square_take_10_balls)
Вземете по една топка от всеки от следващите 8 полета¶
Пред Карел има осем квадрата, а на всеки от тях има по една топка. Карел трябва да вземе всички топки.
Забележете, че в цикъла трябва да присъстват две неща: придвижване напред и вземане на топката.
(Karel_for_EightSquaresOneBallEach_TakeAllBalls)
Вземете по 5 топки от всеки от следващите три полета¶
Пред Карел има три квадрата, а на всеки от тях има по пет топки. Карел трябва да вземе всички топки.
(Karel_for_Take_5_5_5)