Сложные условия в Penjee

Задания

  1. Введение в оператор and
    В этом простом задании мы даём вам весь код, кроме одного слова.
    Нужно заменить ??? оператором and. Внимательно изучи код, чтобы понять, как он работает!

  2. Задумывались ли вы о том, что у оператора and есть брат? 😉
    Цель этой задачи: Пэм начинает в (4, 2) и, используя один цикл, двигается к (4, 13), как показано на анимации ниже.

    В этой задаче нужно просто заменить ?? оператором or.

  3. Двойное not
    Можете ли вы сказать not двум вещам? Прочитайте весь абзац ниже, потому что там есть важная информация. И, собственно, весь ответ мы вам даём ниже, но читайте внимательно, чтобы понять, что вам нужно сделать.
    Вам надо написать цикл, который остановится, когда Пэм окажется в столбце 5. Вот анимация, показывающая, что должен сделать ваш цикл.

    Дело в том, что единственный способ закончить в этом месте (в столбце 5), это отрицать истинность двух условий: isFish(here) и isFish(ahead). Другими словами, наш код должен выразить: что Пэм будет продолжать двигаться до тех пор, пока не истинны 2 вещи. Мы никогда не делали этого раньше.

    Псевдокод:

    instantiate Pam
    BEGIN LOOP
      while Pam is not on fish and Pam is not fish ahead
          Pam waddle
    END LOOP
    grab the fish
    waddle
    grab fish

    Мы даём вам неверный код, и вы должны это исправить! (Не волнуйтесь, мы вам поможем!)
    Вы спросите, почему мы вам даём неправильный код? Зачем?
    Однако мы предоставили вам код, который пишут многие начинающие программисты и ошибаются.
    Чтобы этот код работал правильно надо:

    1. Добавить скобки.
    2. Проверить, что оператор not находится перед скобками.
    3. Убедиться, что условия pam.isFish(here) и pam.isFish(ahead) находятся внутри скобок.

  4. and… снова not?
    Используй свои новые знания, чтобы написать один цикл while.
    Вам необходимо завершить цикл в строке 0, столбце 8, поэтому необходимо написать условие цикла так, как в последнем задании.
    Вот анимация того, как должна выглядеть законченная программа.

    Постарайтесь сделать это самостоятельно, но если вы зайдёте в тупик, не расстраивайтесь. Мы знаем, что этот раздел, в частности, является настолько трудным, что в этом задании вы можете, по крайней мере, потерять одно очко опыта, нажав на кнопку с решением 🙂 …Все-таки постарайтесь не потерять ни одного очка, если сможете!
    Удачи!
  5. Половина пути
    Пэм начинает в верхнем правом углу и хочет спуститься в нижний левый угол так, как показано в этой анимации.

    Дело в том, что мы собираемся сделать это с помощью одного и только одного цикла while. Для этого нужно задать себе вопрос : чем отличается нижний левый угол?
    …И ответ связан с тем, что это единственная клетка, где выполняются условия pam.isLooking(south) и pam.isWall(ahead).

    Псевдокод:

    instantiate pam at (0, 9, west)
    begin loop
      while pam is not looking south and not wall ahead
         if pam isWall ahead 
             pam turns left
         else 
             pam waddles
    end loop

  6. Три четверти вокруг
    Как и в предыдущем задании, Пэм начинает в правом верхнем углу, но на этот раз она хочет закончить в правом нижнем углу, как показано в следующей анимации:

    Единственное изменение, которое вам нужно сделать, это условие цикла while.

    Псевдокод:

    instantiate pam
    begin loop
      while pam is not looking east and is not wall ahead
         if pam isWall ahead 
             pam turn left
         else 
             pam waddle
    end loop

  7. Кругом марш!
    Подумайте о том, как вы измените этот цикл. Вот анимация.

    Попробуйте сделать это без псевдокода. Просто подумайте о том, как нужно изменить условие цикла while.
  8. Рок-музыка под скалой
    Пэм находится в верхнем левом углу и слышала действительно крутую рок-музыку под нижней скалой (в строке 8, столбец 4, если быть точным).

    Напишите один цикл while используя “not” и “and” для того, чтобы привести Пэм туда, где играет крутой рок!