Управление на Карел¶
За да видите как изглежда програмирането, ще ви представим Karel. Karel е анимиран робот, който се движи по таблица, подобна на лабиринт, като следва нашите инструкции под формата на програма. Чрез управлението на Karel ние ще възприемем логика, която е много важна за писането на всяка програма, а също така можем да се забавляваме по пътя.
Идеята за изучаване на програмиране чрез управление на робот датира от 70-те години на миналия век, когато Ричард Е. Патис, като аспирант в Станфордския университет, създава първата такава среда с език за програмиране, специално създаден за тази цел. Езикът, подобно на робота, е кръстен Карел, на името на Карел Чапек, чешкият писател, който пръв започва да използва думата робот. Книгата на Патис Карел, Роботът: Въведение в изкуството на програмирането, е публикувана през 1981 г. и бързо се превръща в най-продаваната уводна книга в курсовете по програмиране.
За да управляваме Karel можем да използваме следните функции:
move()
- преместване с един квадрат напред,turn_left()
- завийте 90 градуса наляво (обратно на часовниковата стрелка),turn_right()
- завийте 90 градуса надясно (по посока на часовниковата стрелка),pick_ball()
- вземете топка от полето, на което се намирате,drop_ball()
- пуснете топка върху полето, на което се намирате.
Използвайки тези пет функции, ние заявяваме какво искаме да направи Karel, така че ще ги наречем „команди за Karel“ или „оператори“. Карел разбира още пет различни функции, които ще видим скоро. В допълнение към тези команди, директно адресирани до Karel, можем да използваме и всички команди на езика за програмиране Python, които ще научим по време на курса.
Нека да разгледаме примерите как гореспоменатите команди могат да се използват за насочване на Карел през неговия свят:
Примери¶
Преместете се с един квадрат напред и вземете топката¶
Напишете програма, за да преместите Карел на поле (2, 1) и да го накарате да вземе топката.
Тази програма се състои само от две команди. Първата казва на Карел да се придвижи едно поле напред, а другата да вземе топката.
(Karel_intro_two_squares_one_ball)
Including karel library¶
Функциите, които използваме за управление на Karel, са дефинирани в библиотеката karel. Следователно в началото на всяка програма трябва да кажем на компютъра (по-точно програмата, който изпълнява нашата програма) първо да прикачи определенията на тези функции за управление на Karel. Това се постига чрез първия ред на програмата: from karel import. Всяка програма, занимаваща се с Karel, която пишем, трябва да започва по този начин.
Имайте предвид, че засега библиотеката на karel може да се използва в тази среда. Можете да стартирате другите си програми по други начини, но ние ще ви напомним за това, когато дойде времето.
На едно поле може да има повече от една топка и нашата задача може да е да кажем на Карел да вземе няколко или всичките.
Движение с едно поле напред и събиране на три топки¶
Напишете програма, която казва на Карел да се премести на поле (2, 1) и да вземе три от петте топки, които са там.
В тази програма след командата move (), командата pick_ball () трябва да бъде написана три пъти, за да вземе Карел 3 топки. Обърнете внимание на номера, който се появява на топката. Показва колко топки има на това поле. В допълнение към това, числото вляво от главата на Карел (което може би сте забелязали и в предишния пример) показва колко топки има Карел с него.
(Karel_intro_two_squares_five_balls)
Следващата задача е подобна, но малко по-трудна.
Стигнете до топката и я вземете¶
Напишете програма, която казва на Карел да дойде на поле (4, 1) и да вземе топката.
Задачата по същество не се различава от предишната. Все още е необходимо да изведете Карел на целевия площад и да му кажете да вземе топката. Разликата е, че сега пътят до целевия квадрат е по-дълъг и такава е нашата програма:
(Karel_intro_take_ball_on_square_4_1)
Четейки тази програма, става трудно да следвате коя команда води Карел до кoe поле. Това не е така само за начинаещи, за всеки е трудно, защото всяко move () изглежда едно и също. За да си помогнем след всяка команда добавихме знака # и текст, който ни помага да следваме до къде сме довели Карел.
Коментари¶
Частта от всяка програма на Python от символа # до края на реда се нарича коментар(comment). Коментарите не засягат изпълнението на програмата, програмата прави същото със или без тях. Коментарите са предназначени само за хора, които четат и пишат програми, за да им помогнат да разберат по-добре тези програми и да се справят по-лесно с тях.
Когато обмисляме да пишем коментари в нашите програми, трябва да ги пишем както за себе си, така и за други хора, които ще четат нашите програми. От друга страна, коментарите, които другите хора пишат в своите програми, ще ни помогнат да разберем техните програми.
Няма точни правила за писане на коментари. В коментарите си трябва да запишете всичко, за което вярвате, че помага на другите (и на себе си) да разберат по-добре вашата програма.
Вземете всички топчета¶
В този пример топките са на различни полета и трябва да докараме Карел до всяка от тези топки.
Напишете програма, за да кажете на Карел да вземе всичките четири топки.
Можем да изберем пътя за Карел по много начини, но колкото по-кратък е пътят, който избираме, толкова по-къса (и по-бърза) ще бъде нашата програма. Така че, например, първо можем да вземем топката на поле (5, 2), след това двете топчета при (5, 5) и накрая топката при (4, 4)
(Karel_intro_collect_three_balls)
Групиране на команди¶
Тъй като тази програма е дори по-дълга от предишната, за да улесним навигацията в програмата и да проследим позицията на Карел, направихме групи команди, които съставляват един етап от пътуването и поставихме всяка група в един ред от програма. В края на всеки ред има коментар, който обяснява групата команди в този ред.
Обърнете внимание, че когато пишете програма по този начин, знакът ; между командите трябва да присъства.
Командите могат да бъдат групирани по различен начин, например чрез разделяне на група от команди (написани една под друга) от следващата група в празен ред. Този метод за групиране се използва много по-често, тъй като командите обикновено не са толкова кратки, колкото контролите на Karel. Ето как би изглеждало:
from karel import *
# go to square (3, 1) and turn north"
move()
move()
turn_left()
# go to square (3, 3) and turn east
move()
move()
turn_right()
# go to square (5, 3) and turn south
move()
move()
turn_right()
# come to square (5, 2) and take the ball
move()
pick_ball()
# turn north
turn_left()
turn_left()
# come to square (5, 5)
move()
move()
move()
# take two balls
pick_ball()
pick_ball()
# go to square (4, 4)
turn_left()
move()
turn_left()
move()
# take the last ball at (4, 4)
pick_ball()
Карел също може да поставя топчета в полетата. Ето как го прави.
Преместете топката¶
Напишете програма, която кара Карел да премести топката на поле (2, 2) (обърнете внимание, че в началото Карел не е ориентиран правилно).
(Karel_intro_move_ball_in_2x2)
Грешки в изпълнението¶
Моля, обърнете внимание, че Karel не може да изпълни всякаква команда по всяко време. По-специално, Карел не може да продължи напред, ако е пред стена, не може да вземе топка, където няма топка, и не може да играе топка, ако няма топки със себе си.
Опитайте да изтриете първата команда turn_left () в предишната програма и след това стартирайте програмата, за да видите какво ще се случи.
Когато програмата, изпълняваща нашата програма, стигне до команда, която не може да бъде изпълнена, изпълнението на програмата ни се прекъсва и получаваме съобщение за грешка. Такива съобщения са нормални и ще ги виждаме винаги, когато Карел не е в състояние да направи това, което му казваме или когато изказването ни не е ясно (по-точно, когато не е написано правилно). В такива ситуации трябва да се опитаме да разберем какъв е проблемът, да го решим и рестартираме програмата.
По-долу са някои задачи за самоубочение. Всяка задача идва с решение, което можете да видите, като кликнете върху бутона „solution“. Можете да копирате показаното решение във вашата работна зона и да го тествате, като стартирате програмата. Обърнете внимание, че вашето решение може да е различно от нашето и все пак да бъде доста добро.
Задачи за упражнение¶
Ела на поле (3, 3)¶
В тази задача няма топки, просто oтведете Карел на поле (3, 3).
(Karel_intro_task_go_to_3_3)
Вземете топките¶
Напишете програма, за да вземе Карел топките.
(Karel_intro_task_collect_balls_in_2x2)
Напред, след това наляво и после пак¶
Карел трябва да стигне до поле(2, 3).
(Karel_intro_task_spiral_left_fixed)