Нека съкратим още програмите¶
Да се върнем към последната програма от предишния урок. Карел трябваше да вземе по пет топки от всеки от трите квадрати в него.

Програмата, която решава задачата, може да изглежда така:
Виждаме, че в тази програма следната група оператори се повтаря три пъти:
Това ни позволява да съкратим програмата допълнително. В обясняването на оператора за изказване споменахме, че в тялото на цикъла могат да се намерят други цикли. Сега имаме възможност да го използваме.
Nested for цикли¶
Когато в тялото на един цикъл има втори цикъл, тогава първият цикъл се нарича външен цикъл, а другият се нарича вътрешен цикъл. Заедно ги наричаме вложени или вмъкнати цикли. В следващия пример ще видим как се пишат вложени for цикли.
Вземете пет топки три пъти¶
Пред Карел има три полета, а на всеки от тях има 5 топки. Карел трябва да вземе всичките топки.
Задачата се повтаря, но сега ще я решим по различен начин.
Споменахме, че i в предходните примери служи брояч на повторения. Сега за първи път трябва да броим други неща (топки) по време на броенето на едно нещо (полета). Това означава например, че ще трябва да знаем точно кога сме на третото поле, като вземем втората топка. Следователно не можем да използваме едно и също име и за двата брояча, затова сме въвели нови имена за броячи вместо предишните i. В следната програма наричаме брояча на полетата i_square, а името на брояча на топката е i_ball.
(Karel_for_TakeMxN)
В даденото решение, операторът pick_ball () е допълнително отразен, тъй като се изпълнява такива за всеки i_ball от диапазона [0, 1, 2, 3, 4]. В допълнение, целия statement за i_ball в диапазон (5): (заедно с неговото тяло и оператора се движат () над него), се повтаря 3 пъти, по един за всеки i_square от обхвата [0, 1, 2]. Това означава, че командата pick_ball () изпълнява общо 3 х 5 = 15 пъти (на всеки от трите полета пет пъти). .. infonote:: С вложени цикли е необходимо да се обърне допълнително внимание на правилното отстъпване на операторите, защото става малко по-сложно. Неправилното отстъпване на някои команди може да доведе до грешен резултат или до програма, която изобщо не работи.
Задачи за упражнения¶
Skip¶
Пред Карел има по една топка на всяко трето поле и Карел трябва да ги вземе и двете.
Карел трябва да повтори група действия „Движете се три пъти и след това вземете топката“ 2 пъти.
(Karel_for_every_nth_square)
5 топки на всяко трето поле¶
На всяко трето поле пред Карел има пет топки и той трябва да събере всички.
Задачата е подобна на предишната, просто трябва да повторите вдигането на топката. Уверете се, че цикълът за вземане на топките е под цикъла за придвижване напред, а не в него.
(Karel_for_every_nth_square_5)
Мини напред¶
Карл още веднъж трябва да вземе всички топки.
Външният цикъл трябва да бъде изпълнен 3 пъти, а в него Karel трябва да направи следното:
Повторете два пъти двете действия: „движете се напред“ и „вземете топката“
Завийте наляво
(Karel_for_ring)
We’ve made verbal instructions a little more similar to the program, try converting them into statements. If you still want to see the program itself, click the “Solution” button.
Върви и вземи по 3 топки всеки път¶
Напишете програма, чрез която Карел ще вземе всичките 18 топки.
Тази задача се различава от предходната само в едно: сега вдигането на топките трябва да бъде в допълнителен цикъл. Това означава, че ще имаме три внедрени цикъла: един, който брои страните на лабиринта, един, който брои квадратите по едната страна, и трети, който брои топките на едно поле.
(Karel_for_ring_3)
Again, we give instructions which look like a program (this time without the program itself).