Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2020 22:02:59

riomenx
Зарегистрирован: 2019-09-13
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Практика: Робот-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)

Офлайн

#2 Апрель 3, 2020 01:08:32

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

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

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-ой задачи, а функция - это разновидность подпрограммы (есть функции и процедуры, в древних языках типа Паскаля их разделяли синтаксически, сейчас перестали).

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



Офлайн

#3 Апрель 3, 2020 01:14:10

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

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

riomenx
Задача №9: task_8_2
riomenx
Есть более простой вариант решения У меня получилось вот так:
Здесь делал.



Отредактировано py.user.next (Апрель 3, 2020 01:14:54)

Офлайн

#4 Апрель 10, 2020 10:20:43

F.Dorohov
Зарегистрирован: 2020-03-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

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

py.user.next
количество_заполненных = 0
цикл пока справа_нет_стены выполнять
если клетка_заполнена то
количество_заполненных.увеличить на 1
иначе
количество_заполненных = 0
конец если
если количество_заполненных = 3 то
выход из цикла
конец если
шагнуть вправо
конец цикла

Здравствуйте, задача так и не зашла.
Понимаю что счетчик не обнуляется, если клетка не закрашена. Но как это реализовать так и не нашел.

Отредактировано F.Dorohov (Апрель 10, 2020 10:21:58)

Прикреплённый файлы:
attachment №29 task_7_7.JPG (90,4 KБ)

Офлайн

#5 Апрель 10, 2020 23:01:20

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

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

F.Dorohov
Понимаю что счетчик не обнуляется
Он не обнуляется потому, что в питоне операции = и == явлются разными.
= - это операция присваивания (в x записать число 1)
== - это операция сравнения (равно ли x числу 1)



Офлайн

#6 Апрель 11, 2020 19:13:45

F.Dorohov
Зарегистрирован: 2020-03-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

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

py.user.next
Спасибо! Теперь все ясно.

Офлайн

#7 Апрель 12, 2020 21:18:05

riomenx
Зарегистрирован: 2019-09-13
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Как решить задачу №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()

Офлайн

#8 Апрель 13, 2020 01:34:02

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

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

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
Я не использовал никаких параметров и решил с помощью цикла:
А в следующей задаче нужно десять крестов в ряде закрашивать. Если функцию правильно пишешь, то в следующей заадаче можешь её взять уже готовую из этой задачи. Если функцию пишешь как удобно, то в следующей задаче нужно будет писать новую функцию.

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

В данном случае мы взяли готовую функцию “закрасить крест” из 24-ой задачи; мы не писали эту функцию снова, а просто скопировали её. В 26-ой задаче делаем то же самое, только копируем уже две функции и пишем немного кода на их основе, меняя только значение параметра при вызове функции с пятёрки на десятку.



Отредактировано py.user.next (Апрель 13, 2020 01:40:53)

Офлайн

#9 Апрель 13, 2020 12:55:30

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

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

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()

Офлайн

#10 Апрель 13, 2020 15:58:36

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

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

Здравствуйте уважаемые. Вопрос по обсуждаемой тут практике “исполнитель робот”. Прочитал всё ветку не нашёл подсказки.
Задача №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()

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version