Задания
- Во-первых: Не прикасайтесь к коду, который мы вам дали, Просто запустите код и попробуйте выяснить: ПОЧЕМУ Пэм не в состоянии полностью обойти вокруг озера?
Вы увидите, что это не работает!
Когда вы запускаете код, вы, вероятно, думаете, что очень далеки от выполнения этого задания и что вам нужно внести некоторые существенные изменения, чтобы заставить его работать, но — верите или нет, — вам нужно добавить только 1 команду, 1 строку, чтобы эта программа работала!
Вам надо добавить pam.waddle() на строке 7 (не забудьте удвоить отступ). Пожалуйста, попробуйте сделать это сами, используя следующий псевдокод.Псевдокод:
begin loop while penjee is not at Fish if is water on right waddle else turn right waddle ** the new command** end loop grab fish
- Итак, вам надо начать в строке 2, в колонке 1 и использовать один цикл
while
.
Внимательно посмотрите на псевдокод: внутри проверки условияif
блок кода (группа строчек), который вам надо написать, чтобы обойти каменную скалу.Псевдокод:
instantiate pam at 2,0 BEGIN loop while pam is not at fish BEGIN if test if pam is rock ahead then pam turn left pam waddle pam turn right pam waddle pam waddle pam turn right pam waddle pam turn left else pam waddle END if END loop pam grab fish
- Перед Пэм целая куча рыбы! Есть только одна проблема: отражающий куб, который находится прямо в середине всех этих вкусных, сочных рыб.
Используйте проверку условияif
для работы с кубом льда и метод.isSafe()
, чтобы убедиться, что ваш цикл завершается в нужном месте.
Примечание: псевдокод в этот раз сделан более общим и не описывает каждую строчку кода, которую вам надо будет написать.Псевдокод:
instantiate pam at 0,9, south BEGIN loop while pam is safe BEGIN if test if pam is cube ahead then pam go around cube pam get fish on way else pam waddle END if END loop
- 4 рыбы, одна проверка условия
if
и одинelse
. Итак, почти в каждом углу есть рыба. Используйте новые возможности условной конструкцииif... else
для навигации среди скал.
В каждом углу используйте проверку условияif
, чтобы обойти угол.Псевдокод
begin loop while not water is ahead if is fish here grab fish waddle one else waddle end loop grab last fish
- if isLogicError(ahead)… Если впереди логическая ошибка…
Если вы запустите код, который мы вам дали, то увидите, что Пэм скучает по рыбе (она на самом деле скучает по рыбе дважды).
Первая часть программы работает отлично. Однако блок программы, который выполняется, если условие в веткеif
истинно, нуждается в исправлении.
Дело в том, что большая часть нашего кода работает хорошо, и пока программа не будет запущена, мы не сталкиваемся с логической ошибкой.
Поскольку ваши программы становятся длиннее и сложнее, то и отладка вашего кода может, в конечном итоге, занимать много времени.
Однако, к счастью, у нас есть некоторые стратегии, которые помогут сократить время, необходимое для исправления логической ошибки (стратегии, которые мы объяснили в предыдущем видео).
В этом задании вы можете видеть, что проблема связана с кодом после проверки условияif
. Однако Пэм требуется некоторое время, чтобы прийти от ее стартовой позиции 6,0 к той части карты, где возникают проблемы. Мы должны использовать кнопку Run Stepwise «пошагового исполнения», чтобы отладить эту проблему, но для того, чтобы попасть в ту часть кода, которая является проблемой, потребуется очень много времени.
В предыдущем видео мы предложили вам стратегию улучшения процесса отладки, временно меняя место, откуда Пэм начинает своё движение.
Итак, используйте стратегию, которую мы объяснили в этом предыдущем видео, и (временно) измените позицию, с которой Пэм начинает движение, так, чтобы она начинала в позиции непосредственно перед кубом!
Шаг 1. Измените начальную позицию Пэм. Примечание: это временное изменение, чтобы помочь нам быстрее добраться до той части, где есть логическая ошибка.
pam = Penguin(6,15)
Шаг 2. Используйте кнопку Single Step «Один шаг», чтобы запустить код строку за строкой и определить, какие изменения вы должны внести, чтобы исправить логическую ошибку.
Шаг 3. Исправьте логическую ошибку и повторите шаг 2, чтобы убедиться, что всё отлично работает.
Шаг 4. После исправления логической ошибки восстановите исходную позицию Пэм, используя следующий код.
pam = Penguin(6,0)
Большая идея: когда это возможно: делайте вашу жизнь проще. Когда определенная часть вашей программы вызывает проблемы, полезно использовать функцию Single Step «Один шаг», а также вы можете сделать временное изменение начальной позиции Пэм, — чтобы тут же протестировать / отладить проблемную часть вашей программы. - Карта этого задания должна выглядеть так же, как и второе задание, которое вы сделали в этом уроке!
Вопрос в том, на сколько нам нужно изменить код второго задания, чтобы решить задачу этой карты? Вернувшись ко второму заданию, скопировав там код и вставив его в это задание, вы можете ответить для себя на вопрос: «На сколько нам нужно изменить код второго задания, чтобы решить задачу этой карты?»
- Карта этого задания должна выглядеть так же, как и третье задание задание, которое вы сделали в этом уроке!
Как в прошлый раз, когда вы сделали это, давайте посмотрим, на сколько вы должны изменить свой старый код? Вернитесь в третье задание и скопируйте код, вставьте его в это задание и посмотрите, на сколько его нужно изменить.
- Узор из каменных скал и рыб. Странная вещь случилась с камнями и рыбой. Оказывается, каждая рыба находится ровно на 2 позиции вдали от каждой скалы.
Пэм должна начать с позиции 1,0, и каждый раз, когда есть камень, она должна сделать один конкретный набор действий, чтобы получить рыбу.
Мы дадим вам подсказку: это займёт у вас ровно 15 строк кода. Большая часть кода находится внутри блокаif
(мы называем группу инструкции «блок»).
- Маленькие препятствия. Начните вместе со своим пингвином с позиции (20, 0) и заметьте повторяющийся узор в препятствиях из камней!