Найти - Пользователи
Полная версия: Графический исполнитель "Робот"
Начало » Python для новичков » Графический исполнитель "Робот"
1 2 3 4 None 25 26 27 28 29 30 31
py.user.next
imagion
нужно решение 31го задания
Тут делал задачу 31.

imagion
в виде рабочего кода
  
def task_8_30():
    f_search_hole = True
    while f_search_hole:
        f_search_hole = False
        while not wall_is_on_the_right():
            move_right()
            while not wall_is_beneath():
                move_down()
                f_search_hole = True
        while not wall_is_on_the_left():
            move_left()
            while not wall_is_beneath():
                move_down()
                f_search_hole = True
Это псевдокод из того сообщения, переписанный точь в точь на питон. Лучше учись с псевдокодом работать. Сначала пишешь псевдокод полностью, а потом пишешь код по этому псевдокоду. Иначе будешь каким-нибудь очередным дурачком-выпускничком из школы Skillbox, который нихера вообще делать не умеет в итоге, зато кошелёк опустошил изрядно свой.
imagion
Спасибо ,но только код не работает.
можешь объяснить что такое “f_search_hole” , я так понимаю это флаг, но как он работает, в том смысле , что у него внутри.
py.user.next
imagion
но только код не работает
Выложи полный код, который запускаешь. У меня запускается всё.

imagion
можешь объяснить что такое “f_search_hole” , я так понимаю это флаг, но как он работает, в том смысле , что у него внутри.
Флаг переводится как “искать дыру”. Если полностью его писать, то будет flag_search_for_the_hole , но лишние слова убираем и слово flag сокращаем, делая из него префикс.
Пока дано указание искать дыру (значение флага выставлено в истину), остальной код, проверяя этот флаг, ищет дыру. Когда дано указание не искать дыру (значение флага выставлено в ложь), остальной код, проверяя этот флаг, не ищет дыру.

Таким образом, цикл всё время крутится (спускается от уровня к уровню), пока флаг сообщает, что надо продолжать искать дыру. Как только входишь в цикл, флаг сразу выключается. Если дыра будет найдена, то шарик перейдёт на новый уровень и надо будет снова искать дыру на этом новом уровне, поэтому флаг опять включится. А если дыра не будет найдена, флаг так и останется выключенным, потому что дыра не будет найдена только на последнем уровне.

Флаг этот можно и по-другому назвать. Типа f_seen_last_level - “видел последний уровень”.
Тогда код поменяется с истины на ложь и со лжи на истину
флаг_видел_последний_уровень := нет
цикл пока не флаг_видел_последний_уровень выполнять
флаг_видел_последний_уровень := да
цикл пока справа_нет_стены выполнять
шагнуть вправо
цикл пока снизу_нет_стены выполнять
шагнуть вниз
флаг_видел_последний_уровень := нет
конец цикла
конец цикла
цикл пока слева_нет_стены выполнять
шагнуть влево
цикл пока снизу_нет_стены выполнять
шагнуть вниз
флаг_видел_последний_уровень := нет
конец цикла
конец цикла
конец цикла
  
def task_8_30():
    f_seen_last_level = False
    while not f_seen_last_level:
        f_seen_last_level = True
        while not wall_is_on_the_right():
            move_right()
            while not wall_is_beneath():
                move_down()
                f_seen_last_level = False
        while not wall_is_on_the_left():
            move_left()
            while not wall_is_beneath():
                move_down()
                f_seen_last_level = False
Но видишь, когда флаг сделан в форме “искать дыру”, код менее запутан отрицаниями всякими и выглядит чётче и определённее. Сразу понятно, что нужно делать и чего не нужно делать.
Omenn
py.user.next
На псевдокоде рабочий код (проверял на реальном)

флаг_искать_проход := да
цикл пока флаг_искать_проход выполнять
флаг_искать_проход := нет
цикл пока справа_нет_стены выполнять
шагнуть вправо
цикл пока снизу_нет_стены выполнять
шагнуть вниз
флаг_искать_проход := да
конец цикла
конец цикла
цикл пока слева_нет_стены выполнять
шагнуть влево
цикл пока снизу_нет_стены выполнять
шагнуть вниз
флаг_искать_проход := да
конец цикла
конец цикла
конец цикла

Спасибо, все получилось!
Но флаги еще не изучал, поэтому вопрос: можно эту задачу решить без флагов? Попробовал составить блок-схему - какая-то замудреная очень получается…
py.user.next
Omenn
Но флаги еще не изучал
Эта задача на флаги.
Там на странице с заданиями идёт вставка
Использование переменных-флагов и переменных-счётчиков

Обратите внимание на то, что в этих задачах ситуативное поведение Робота не может решить задачу. В задачах требуется запомнить состояние или посчитать количество определённых клеток. Используйте для этого переменные.
И с 27-ой задачи нужно использовать эти инструменты - либо счётчики, либо флажки.

Omenn
можно эту задачу решить без флагов?
Эта задача специально придумана так, чтобы её нельзя было решить без флагов. Ты её не решишь без флагов. Это искусственная задача, направленная на развитие навыка создания флажка. Решая её, ты учишься придумывать флаги.

Omenn
Но флаги еще не изучал
Значит, тебе рано решать эту задачу.

Дело-то не в этой задаче; дело в том, что есть целое множество задач в реальном мире, где нужно флаги использовать, иначе ты эти задачи не выполнишь. И чтобы ты эти задачи мог выполнять, тебя учат придумывать и использовать флаги. А чтобы ты научился, для тебя придумывают задачу, устроенную определённым образом. Поэтому ты эту задачу решить не можешь без флагов. Она сделана специально так, чтобы ты к флагам обратился и начал их придумывать и использовать.
jaz-musik
Всем привет! Скажите, кто-то здесь уже решал задачку 15? https://mipt-cs.github.io/python3-2017-2018/labs/lab2.html#o15-task-8-21
У меня получился такой код, но что-то идет не так….
py.user.next
jaz-musik
Скажите, кто-то здесь уже решал задачку 15?
Здесь решал эту задачу.
jaz-musik
py.user.next
Спасибо большое! Я неправильно поняла задание
pokemon
py.user.next
Здравствуйте можете объяснить логику ? решения. на 30 задаче (task_9_3)этой) застрял. не могу понять никак.. читаю ваш код но не могу понять(ход и действия кода) как это вы закрашиваете поле «треугольниками».
остальные задачи решил. они полегче больше на простую логику.. а не математическую )
pokemon
py.user.next
Здравствуйте можете объяснить логику ? решения. на 30 задаче (task_9_3)этой) застрял. не могу понять никак.. читаю ваш код но не могу понять(ход и действия кода) как это вы закрашиваете поле «треугольниками».
остальные задачи решил. они полегче больше на простую логику.. а не математическую )
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB