Уведомления

Группа в Telegram: @pythonsu

#1 Июль 21, 2018 14:27:29

Prorokius
Зарегистрирован: 2018-07-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

В Pascal'e и КуМир'e тоже есть робот исполнитель
И в них есть команды:
FreeFromRight – возвращает True если справа от Робота свободно; (Pascal)
если справа свободно то (КуМир)
Нужна точно такая же команда в Python3, которая будет проверять свободно ли с нужной мне стороны. Я же нашел только команду, которая проверяет есть ли стена wall_is_on_the_left() если слева стена, возвращает True, иначе — False
Есть идеи?
Заранее благодарен за помощь

Офлайн

#2 Июль 22, 2018 06:42:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

В КуМире многие команды избыточны, то есть их можно заменить другими.
http://test.kumir.su/Syntax%20Kumir.htm

Так, например, если слева стена, то уже ясно, что слева не свободно. Зачем отдельную команду иметь “слева свободно”, если можно просто применить отрицание (даже не имея операции отрицания)? То есть система команд избыточна.

Prorokius
Я же нашел только команду, которая проверяет есть ли стена wall_is_on_the_left()
Ну потому там и нет этой команды. Есть операция отрицания (not), которую можно применить к команде “слева стена”.

Можешь себе сделать команду, основав её уже на существующих командах. Это надо отнаследоваться от робота и добавить ему метод, который тебе нужен. А лучше, конечно, агрегацию сделать - создать класс с нужными методами, к которому через инициализацию подключать исполнителя Робот. И при исполнении команды она будет просто передаваться Роботу в виде одной команды или нескольких.



Отредактировано py.user.next (Июль 22, 2018 06:44:53)

Офлайн

#3 Июль 22, 2018 13:55:35

Prorokius
Зарегистрирован: 2018-07-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

py.user.next
В КуМире многие команды избыточны, то есть их можно заменить другими.http://test.kumir.su/Syntax%20Kumir.htmТак, например, если слева стена, то уже ясно, что слева не свободно. Зачем отдельную команду иметь “слева свободно”, если можно просто применить отрицание (даже не имея операции отрицания)? То есть система команд избыточна.

Операция отрицания-то, что было нужно мне
А про агрегацию я даже не в курсе. Всего вторая лекция по Python'y у меня
Спасибо за просвещение в операцию отрицания

Офлайн

#4 Июль 22, 2018 17:13:40

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

py.user.next
Так, например, если слева стена, то уже ясно, что слева не свободно. Зачем отдельную команду иметь “слева свободно”, если можно просто применить отрицание (даже не имея операции отрицания)? То есть система команд избыточна.
Затем, что слева может быть ящик, другой робот и также стена. Ящик и робот могут переместиться, а со стеной это не произойдет и например, ждать бессмысленно. В крайнем случае в стене можно сделать проход, если это какая-то боевая симуляция. Так что отдельная функция просто необходима.

Отредактировано Vladimirv (Июль 22, 2018 17:53:35)

Офлайн

#5 Июль 22, 2018 23:13:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

Исполнитель Робот
http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html

Команды робота
Команда Описание
move_left(n=1) Пройти n клеток влево (по умолчанию n = 1)
move_right(n=1) Пройти n клеток вправо (по умолчанию n = 1)
move_up(n=1) Пройти n клеток вверх (по умолчанию n = 1)
move_down(n=1) Пройти n клеток вниз (по умолчанию n = 1)
wall_is_above() если сверху стена, возвращает True, иначе — False
wall_is_beneath() если снизу стена, возвращает True, иначе — False
wall_is_on_the_left() если слева стена, возвращает True, иначе — False
wall_is_on_the_right() если справа стена, возвращает True, иначе — False
fill_cell() Закрасить текущую клетку
cell_is_filled() Возвращает True, если текущая клетка закрашена
mov(r, v) Поместить значение v в регистр r

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

Ещё на КуМир'е вариант
https://en.ppt-online.org/338661
https://en.ppt-online.org/32585



Отредактировано py.user.next (Июль 22, 2018 23:18:40)

Офлайн

#6 Июль 23, 2018 00:02:53

Prorokius
Зарегистрирован: 2018-07-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

py.user.next
Исполнитель Роботhttp://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html
Еще один вопрос по этому роботу
У меня есть задание http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html#id46 (Задача №16: task_8_22)
Я пишу такое
while not wall_is_above():
move_up()
else:
if wall_is_the_right():
*тут хочу написать, пока нет стены слева-иди влево, как это реализовать? в Python'e нет же do … while*
То есть мне нужно использовать выше цикл, вложенный в условие
Помоги, пожалуйста, как это реализовать?
Да и вообще, хотя бы пример легкий, как использовать цикл, вложенный в условие, никак не могу допереть, ибо там несколько заданий с такими задачами (использовать цикл, вложенный в условие)

Отредактировано Prorokius (Июль 23, 2018 00:07:20)

Офлайн

#7 Июль 23, 2018 01:52:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

Дойти до конца тупика. Тупик имеет форму буквы Г (влево или вправо). Размеры тупика не известны.
Сначала надо пройти вверх до упора. Потом надо определить сторону, куда поворачивает тупик. Потом надо идти в правильную сторону.
Это while + if + while.

while не_наверху
идти_вверх
if справа_свободно
while не_в_правом_конце
идти_вправо
else
while не_в_левом_конце
идти_влево



Отредактировано py.user.next (Дек. 19, 2019 14:47:50)

Офлайн

#8 Сен. 4, 2018 21:49:41

sdl5
Зарегистрирован: 2018-09-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

py.user.next
Исполнитель Робот
http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html
Всем привет. У меня возникли проблемы с задачей №10: task_8_3 (Закрасить клетки. Расстояние до стены не известно.) не получается сделать все правильно. Помогите с решением.

Офлайн

#9 Сен. 5, 2018 01:56:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

sdl5
У меня возникли проблемы с задачей №10: task_8_3 (Закрасить клетки. Расстояние до стены не известно.)
Закрашиваются только те клетки, сверху или снизу которых есть стена.
if сверху_стена or снизу_стена
закрасить_клетку
while справа_свободно
идти_вправо
if сверху_стена or снизу_стена
закрасить_клетку



Отредактировано py.user.next (Дек. 19, 2019 14:48:23)

Офлайн

#10 Сен. 11, 2018 23:57:03

sdl5
Зарегистрирован: 2018-09-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Графический исполнитель "Робот"

Есть Задача №21: task_4_11. Нашел похожую для КуМира. А как будет выглядеть решение для задачи #21 на питоне?

 Ряд
{
int n; 	   
направо;
цикл ( n=1; n<=6; n=n+1 )   
    {
    повтори (  n  )
        {
        вперед ( 1 );
        посади;
        }
  направо;
  вперед ( 1 );
  налево;
  назад (  n  );
  }
    }
направо; вперед ( 1 ); налево;
назад ( n );
}

Прикреплённый файлы:
attachment robot.jpg (38,0 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version