If оператор – упражнения¶
В този раздел ще практикуваме само с помощта на оператора if и комбинирането му с цикли.
Задачи за упражнения¶
Отидете до края на пътеката и вземете само една топка¶
Карел трябва да пристигне в края на коридора и да вземе само първата топка по пътя. Началният квадрат никога няма топка върху него, а Карел първоначално не носи топки.
(Karel_if__take_first_ball_only)
We have started one solution here. You are expected to complete the if statements with appropriate conditions.
Karel should take the ball only if two conditions are met:
the first condition is the one that we check whenever Karel tries to take the ball (without this condition the program could be terminated due to an undoable operation).
the second condition is imposed by the requirements of this task, which is that Karel takes the ball only if he has not already taken one before.
The order of checking these two conditions is not important, since both of them should be fulfilled in order to take the ball anyway.
Вземете топката на съседния площад¶
На дъската има само една топка. Карел и топката са разположени на два съседни квадрата без стена между тях (Карел е само на една стъпка от топката, ако първо се обърне към топката). Между другите площади може да има или да не съществува стена. Карел трябва да вземе топката и в крайна сметка може да завърши на всеки квадрат.
Както обикновено, стартирайте програмата няколко пъти, за да я тествате на различни примери.
Една възможна идея е, че във всяка от четирите посоки се опитваме да накараме Карел да върви една крачка напред и да вземем топката. Във всеки от четирите опита могат да възникнат различни сценарии:
възможно е да няма квадрат пред Карел в тази посока
възможно е да има квадрат пред Карел, но върху него няма топки
възможно е да има квадрат и да има топка върху него
Когато опитвате следващата посока, е много по-просто, ако не е нужно да вземаме предвид дали Карел е намерил квадрат без топка в предишната посока, която е опитал, или изобщо не е намерил квадрат. За да опрости следващия опит, за нас е удобно, че Карел завършва предишния опит, когато е бил на празен квадрат в същото състояние, както когато не е имало квадрат. Когато няма квадрат в опитаната посока, Карел ще остане на началния квадрат, обърнат към опитаната посока. За да улесним продължаването на търсенето, можем да оставим Карел на същия площад, обърнат към същата посока, когато той се върне от празен съседен квадрат. Всъщност няма да навреди, ако го направим и когато Карел вземе топката (възможно е Карел излишно да търси, но това няма да причини грешки). Тъй като доведохмеКарел в същото състояние (позиция и ориентация) след всеки от трите случая по-горе, ние знаем точно новото си изходно състояние за всеки следващ опит. След всеки опит за направление, просто трябва да завием Карел към следващата посока, в която ще се опитаме да намерим топката (или вляво, или вдясно).
(Karel_if__take_neighboring_ball)
Следвайте пътеката¶
На масата има само една топка и Карел трябва да я вземе. Пътят до топката не е само направо и няма пресечки (винаги има само един начин да продължите да се движите, дори от стартовия квадрат).
(Karel_if__take_ball_no_branches)
We give a program-like instructions for one possible solution:
Отклоняване от целта¶
На масата има само една топка и Карел трябва да я вземе. За да стигне до топката, Карел трябва да тръгне право, само когато не може да завие наляво или надясно (няма да има двусмислено кръстовище, където има път и вляво, и вдясно).
(Karel_if__p1_left_p2_right_p3_forward)
Instructions for one possible solution:
Завийте наляво, където е възможно¶
На масата има само една топка и Карел трябва да я вземе. Карел винаги ще достигне топката, като завива наляво, когато може, и ще тръгне направо, когато не може да отиде наляво (когато не може да отиде нито наляво, нито направо, това означава, че е пристигнал). Първоначално Карел е обърнат така, както трябва, а първата му стъпка винаги е напред.
(Karel_if_p1_left_p2_forward)
Instructions for one possible solution: