Раздел «Язык Си».PythonRobotEng:

pyrob - робот на питоне

Установка пакетов

Команды робота

Команда Описание
move_left() Шаг влево
move_right() Шаг вправо
move_up() Шаг вверх
move_down() Шаг вниз
free_left()
free_lt()
Свободно слева?
free_right()
free_rt()
Свободно справа?
free_up() Свободно вверху?
free_down() Свободно внизу?
fill_cell() Закрасить клетку
cell_is_filled() Клетка закрашена?

Состояния робота

Задача решена

#!/usr/bin/python3

from pyrob.api import *

@task
def example1():
    # пишем решение тут:
    for i in range(9):
        move_right()
        move_down()

if __name__ == '__main__':
    run_tasks()

demo1.gif

Задача НЕ решена - робот не дошел до конечной точки

#!/usr/bin/python3

from pyrob.api import *

@task
def example1():
    # пишем решение тут:
    for i in range(4):
        move_right()
        move_down()

if __name__ == '__main__':
    run_tasks()

Задача НЕ решена - ошибка во время выполнения

#!/usr/bin/python3

from pyrob.api import *

@task
def example1():
    # пишем решение тут:
    for i in range(9):
        move_right()
        move_down()
        if i == 6:
            z = 1 / 0  # делить на 0 нельзя!

if __name__ == '__main__':
    run_tasks()

Задача НЕ решена - врезались в стену

#!/usr/bin/python3

from pyrob.api import *

@task
def example1():
    # пишем решение тут:
    for i in range(10):
        move_right()
        move_down()

if __name__ == '__main__':
    run_tasks()

while - цикл с условием

Задачи на команды робота

Задача №1: task_1_1

Дойти до конечной точки.

Задача №2: task_1_2

Дойти до конечной точки. Закрасить по дороге голубую клетку.

Цикл while - делаем пока

Описать теорию. Пример - дойти до стены внизу.

if elif else - если / иначе

Дописать пример: если стоим на голубой клетке - закрасить.

Дописать примеры - 1) если есть выход справа, то выходим; иначе никуда не идем (if); 2) есть выход справа или слева, идем куда есть выход (if-else). 3) задача на 4 выхода. Татьяна, как тебе идея? (ТД)

Задачи с условиями

Задача №3: task_3_1

Дойти до стены. Расстояние до стены не известно.

task_3_1.png

Задача №4: task_3_3

С трёх сторон стены. Выйти в свободную сторону. Где выход не знаем. Робот должен найти выход и выйти.

task_3_3.png

Задачи: циклы с условием

Задача №5: task_5_2

Дойти до конца стены. Длина стены не известна.

Задача №6: task_5_3

Дойти до конца стены. Длина стены не известна.

Задача №7: task_5_4

Обойти стену. Размеры стены и расстояние до неё неизвестны. Стена одна.

Задача №8: task_5_7

Выйти из коридора. Есть проёмы сверху или снизу.

if внутри цикла

Задача №9: task_8_2

Закрасить клетки этого ряда, у которых НЕТ верхней стенки. Расстояние до правой стены не известно.

TODO: сменить картинку, взять такую, где есть закрашенная клетка без верхней и без нижней стены. Ибо на этом рисунке только "верха нет, низ есть", что неправильно.

Задача №10: task_8_3

Закрасить клетки этого ряда, у которых есть верхняя или нижняя стена. Расстояние до правой стены не известно.

Задача №11: task_8_4

Закрасить клетки этого ряда, у которых есть обе стены (верхняя и нижняя). Расстояние до правой стены не известно.

Задача №12: task_8_6

Закрасить клетки этого ряда, у которых есть только нижняя стена. Расстояние до правой стены не известно.

Задача №13: task_8_10

Закрасить клетки вне коридора (сверху и снизу), если можно пойти и закрасить. Расстояние до правой стены не известно.

Задача №14: task_8_11

Закрасить клетки вне коридора (сверху и снизу), если можно пойти и закрасить. Закрасить клетки, у которых обе стены (сверху и снизу). Расстояние до правой стены не известно.

Урок 20 апреля

Функции

Для робота можно написать новые функции.

Задача №24: task_2_1

Напишите функцию cross(), которая закрашивает 5 клеток как на картинке.
Используя эту функцию закрасьте клетки, как на рисунке.

TODO: Переделать задачу так, чтобы крест начинался из левого верхнего угла, без пропуска строк или столбцов. Причина: именно так нужно будет использовать функцию cross в следующих задачах.

Задача №25: task_2_2

Возьмите функцию cross() из предыдущей задачи.
Напишите функцию row_cross(n), которая закрашивает n крестов в ряд.
Используя эту функцию закрасьте клетки, как на рисунке.

TODO: Переделать задачу так, чтобы кресты начинались из левого верхнего угла, без пропуска строк или столбцов. Причина: именно так нужно будет использовать функцию row_cross в следующих задачах.

Задача №26: task_2_4

Возьмите функции cross() и row_cross(n) из предыдущей задачи.
Напишите функцию rect_cross(n, m), которая закрашивает m рядов по n крестов в ряд.
Используя эту функцию закрасьте клетки, как на рисунке.

Подсказка 1: move_left(20) и move_down(4) будут передвигать робота на 20 клеток влево и на 4 вниз.

Подсказка 2: можно написать функцию home, которая будет передвигать робота в начало ряда. Можно посчитать сколько клеток или написать условие "пока слева свободно".

Красим

Задача №20: task_4_3

Закрасить отмеченные клетки. Поле фиксированного размера.

Задача №21: task_4_11

Закрасить отмеченные клетки. Поле фиксированного размера.

Задача №22: task_5_10

Закрасить всё поле. Размеры поля неизвестны. Начинаем в левом верхнем углу. Заканчиваем в левом нижнем углу.

Задача №23: task_6_6

Закрасить коридоры и вернуться. Количество и длины коридоров не известны. Коридоры только вверху.

Еще больше функций

Задача №15: task_8_21

Перейти в противоположный угол. В начальный момент робот находится в углу, но не известно, в каком.

Задача №16: task_8_22

Дойти до конца тупика. Тупик имеет форму буквы Г (влево или вправо). Размеры тупика не известны.

Задача №17: task_8_27

Дойти вверх до закрашенной клетки. Перейти на вторую закрашенную клетку. Клетка может быть как справа, так и слева.

НЕ ДЕЛАТЬ

Задача №18: task_8_28

Выйти из ловушки. Где находится выход, не известно.

Задача №19: task_8_29

Выйти из ловушки. Выход может находиться как справа, так и слева. Выхода может не быть, в этом случае остановиться в правом тупике.

Оставшиеся рисунки к задачам

Attachment sort Action Size Date Who Comment
demo1.gif manage 731.3 K 19 Apr 2017 - 18:57 TatyanaDerbysheva  
demo2.gif manage 243.2 K 19 Apr 2017 - 18:57 TatyanaDerbysheva  
demo3.gif manage 419.6 K 19 Apr 2017 - 18:58 TatyanaDerbysheva  
demo4.gif manage 500.5 K 19 Apr 2017 - 18:58 TatyanaDerbysheva  
task_1_1.png manage 9.1 K 19 Apr 2017 - 18:58 TatyanaDerbysheva  
task_1_2.png manage 9.2 K 19 Apr 2017 - 18:58 TatyanaDerbysheva  
task_2_1.png manage 9.2 K 19 Apr 2017 - 18:59 TatyanaDerbysheva  
task_2_2.png manage 9.4 K 19 Apr 2017 - 18:59 TatyanaDerbysheva  
task_2_4.png manage 20.3 K 19 Apr 2017 - 18:59 TatyanaDerbysheva  
task_3_1.png manage 9.1 K 19 Apr 2017 - 19:00 TatyanaDerbysheva  
task_3_3.png manage 9.2 K 19 Apr 2017 - 19:00 TatyanaDerbysheva  
task_4_3.png manage 15.0 K 19 Apr 2017 - 19:00 TatyanaDerbysheva  
task_4_11.png manage 13.0 K 19 Apr 2017 - 19:01 TatyanaDerbysheva  
task_5_2.png manage 9.2 K 19 Apr 2017 - 19:01 TatyanaDerbysheva  
task_5_3.png manage 10.4 K 19 Apr 2017 - 19:01 TatyanaDerbysheva  
task_5_4.png manage 12.8 K 19 Apr 2017 - 19:02 TatyanaDerbysheva  
task_5_7.png manage 10.5 K 19 Apr 2017 - 19:02 TatyanaDerbysheva  
task_5_10.png manage 8.1 K 19 Apr 2017 - 19:02 TatyanaDerbysheva  
task_6_6.png manage 12.7 K 19 Apr 2017 - 19:03 TatyanaDerbysheva  
task_7_5.png manage 6.3 K 19 Apr 2017 - 19:03 TatyanaDerbysheva  
task_7_6.png manage 7.8 K 19 Apr 2017 - 19:03 TatyanaDerbysheva  
task_7_7.png manage 6.0 K 19 Apr 2017 - 19:04 TatyanaDerbysheva  
task_8_2.png manage 6.4 K 19 Apr 2017 - 19:04 TatyanaDerbysheva  
task_8_3.png manage 7.0 K 19 Apr 2017 - 19:04 TatyanaDerbysheva  
task_8_4.png manage 6.3 K 19 Apr 2017 - 19:05 TatyanaDerbysheva  
task_8_6.png manage 6.3 K 19 Apr 2017 - 19:05 TatyanaDerbysheva  
task_8_10.png manage 7.9 K 19 Apr 2017 - 19:05 TatyanaDerbysheva  
task_8_11.png manage 7.3 K 19 Apr 2017 - 19:05 TatyanaDerbysheva  
task_8_18.png manage 14.9 K 19 Apr 2017 - 19:06 TatyanaDerbysheva  
task_8_21.png manage 9.1 K 19 Apr 2017 - 19:06 TatyanaDerbysheva  
task_8_22.png manage 9.7 K 19 Apr 2017 - 19:07 TatyanaDerbysheva  
task_8_27.png manage 9.5 K 19 Apr 2017 - 19:07 TatyanaDerbysheva  
task_8_28.png manage 9.6 K 19 Apr 2017 - 19:07 TatyanaDerbysheva  
task_8_29.png manage 9.6 K 19 Apr 2017 - 19:07 TatyanaDerbysheva  
task_8_30.png manage 17.0 K 19 Apr 2017 - 19:08 TatyanaDerbysheva  
task_9_3.png manage 4.3 K 19 Apr 2017 - 19:08 TatyanaDerbysheva