Форум сайта python.su
Практика: Робот-http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html
Условные действия на каждой итерации цикла
Задача №9: task_8_2
Закрасить клетки. Расстояние до стены не известно.
Решением этой задачи является клетки без верха,которые необходимо закрасить.Есть более простой вариант решения У меня получилось вот так:
from pyrob.api import * import time @task def task_8_2(): while not wall_is_on_the_right(): move_right() if not wall_is_above() and wall_is_beneath(): fill_cell() while not wall_is_on_the_left(): move_left() if not wall_is_above() and wall_is_beneath(): fill_cell() while not wall_is_on_the_right(): move_right() if not wall_is_above() and wall_is_beneath(): fill_cell() if __name__ == '__main__': run_tasks()
Отредактировано riomenx (Апрель 2, 2020 22:04:32)
Офлайн
Romanteg
Добрый вечер. Не могли бы уточнить, допустимо ли такое решение?
Задача 32@task(delay=0.01) def task_8_18(): y = 0 x = 0 for c in range(50): if wall_is_on_the_right() and not wall_is_beneath() and not wall_is_above() and not wall_is_on_the_left(): break ...
RomantegЗадание там другое. Надо посчитать жёлтые клетки, которые были на доске изначально. Те жёлтые клетки, которые появились на доске после их закрашивания, считать не надо.
Т.е. сперва считаю клеточки, которые необходимо закрасить по Х, затем по Y.
RomantegМожно и без функции написать код, который с функцией сделан. Но функция там используется, потому что подпрограммы уже пройдены до 32-ой задачи, а функция - это разновидность подпрограммы (есть функции и процедуры, в древних языках типа Паскаля их разделяли синтаксически, сейчас перестали).
Может только через функцию работает?
Офлайн
riomenx
Задача №9: task_8_2
riomenxЗдесь делал.
Есть более простой вариант решения У меня получилось вот так:
Отредактировано py.user.next (Апрель 3, 2020 01:14:54)
Офлайн
py.user.next
количество_заполненных = 0
цикл пока справа_нет_стены выполнять
если клетка_заполнена то
количество_заполненных.увеличить на 1
иначе
количество_заполненных = 0
конец если
если количество_заполненных = 3 то
выход из цикла
конец если
шагнуть вправо
конец цикла
Отредактировано F.Dorohov (Апрель 10, 2020 10:21:58)
Прикреплённый файлы:
№29 task_7_7.JPG (90,4 KБ)
Офлайн
F.DorohovОн не обнуляется потому, что в питоне операции = и == явлются разными.
Понимаю что счетчик не обнуляется
Офлайн
py.user.nextСпасибо! Теперь все ясно.
Офлайн
Как решить задачу №25: task_2_2 с использованием параметра n функции row_cross
Есть подсказка: “”“Возьмите функцию cross() из предыдущей задачи.
Напишите функцию row_cross(n), которая закрашивает n крестов в ряд.
Используя эту функцию закрасьте клетки, как на рисунке.”“”
На выходе как я понял должно получиться:
move_down()
row_cross(5)
Я не использовал никаких параметров и решил с помощью цикла:
from pyrob.api import * def make_cross(): move_right() fill_cell() move_down() fill_cell() move_right() fill_cell() move_left() move_down() fill_cell() move_up() move_left() fill_cell() move_up() def row_cross(): make_cross() for i in range(4): move_right(4) make_cross() @task def task_2_2(): move_down() row_cross() if __name__ == '__main__': run_tasks()
Офлайн
riomenx
Как решить задачу №25: task_2_2 с использованием параметра n функции row_cross
программа закрасить крест
шагнуть вправо
закрасить ячейку
шагнуть вниз
закрасить ячейку
шагнуть вправо
закрасить ячейку
шагнуть влево
шагнуть вниз
закрасить ячейку
шагнуть вверх
шагнуть влево
закрасить ячейку
шагнуть вверх
конец программы
программа закрасить ряд крестов <вх:n:Z+>
цикл пока n > 0 выполнять
закрасить крест
шагнуть вправо
шагнуть вправо
если справа_есть_стена то
шагнуть влево
шагнуть влево
иначе
шагнуть вправо
шагнуть вправо
конец если
n.уменьшить на 1
конец цикла
конец программы
шагнуть вниз
закрасить ряд крестов <вх:5>
[guest@localhost pyrob]$ python3 task_25.py
INFO:pyrob:Starting task task_2_2
INFO:pyrob:Task task_2_2 finished: +
INFO:pyrob:Total: 1/1
[guest@localhost pyrob]$
riomenxА в следующей задаче нужно десять крестов в ряде закрашивать. Если функцию правильно пишешь, то в следующей заадаче можешь её взять уже готовую из этой задачи. Если функцию пишешь как удобно, то в следующей задаче нужно будет писать новую функцию.
Я не использовал никаких параметров и решил с помощью цикла:
Отредактировано py.user.next (Апрель 13, 2020 01:40:53)
Офлайн
riomenx
Практика: Робот-http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.htmlУсловные действия на каждой итерации циклаЗадача №9: task_8_2Закрасить клетки. Расстояние до стены не известно.Решением этой задачи является клетки без верха,которые необходимо закрасить.Есть более простой вариант решения У меня получилось вот так:
#!/usr/bin/python3 from pyrob.api import * @task def task_8_2(): x=True while x==True: if wall_is_above()==False: fill_cell() if wall_is_on_the_right()==False: move_right() else: x=False if __name__ == '__main__': run_tasks()
Офлайн
Здравствуйте уважаемые. Вопрос по обсуждаемой тут практике “исполнитель робот”. Прочитал всё ветку не нашёл подсказки.
Задача №16, task_8_22. Не могу понять почему робот не поворачивает в тупике. Хотя условие вроде явно прописано.
#!/usr/bin/python3 from pyrob.api import * @task def task_8_22(): while wall_is_on_the_right() and wall_is_on_the_left(): move_up() if wall_is_on_the_left(): while not wall_is_on_the_right(): move_right elif wall_is_on_the_right(): while not wall_is_on_the_left(): move_left if __name__ == '__main__': run_tasks()
Офлайн